[問題] verilog 問題
下面是一個divide的code
`define DvLen 16
`define DdLen 32
`define QLen 16
`define HiDdMin 16
module divide
(input [`DdLen-1:0] ddInput,dvInput,
output reg signed [`QLen-1:0] quotient,
input go,
output reg done);
reg signed [`DdLen-1:0] dividend;
reg signed [`DvLen-1:0] divisor;
reg negDivisor,negDividend;
always begin
done=0;
wait(go);
divisor=dvInput;
dividend=ddInput;
quotient=0;
if (divisor) begin
negDivisor=divisor[`DvLen-1];
if (negDivisor) divisor=-dividend;
negDividend=dividend[`DdLen-1];
if (negDividend) dividend=-dividend;
repeat (`DvLen) begin
quotient=quotient<<1;
dividend=dividend<<1;
dividend[`DdLen-1:`HiDdMin]=
dividend[`DdLen-1:`HiDdMin]-divisor;
if (!dividend[`DdLen-1]) quotient=quotient+1;
else
dividend[`DdLen-1:`HiDdMin]=
dividend[`DdLen-1:`HiDdMin]+divisor;
end
if (negDivisor != negDividend) quotient=-quotient;
end
done=1;
wait(~go);
end
endmodule
教授要我們寫出一個4種狀況的test bench (正除正 正除負 負除正 負除負)
以下是我寫的code
`include "3.1.v"
module test_divide;
reg [`DdLen-1:0] dvInput,ddInput;
reg go;
wire done;
wire [`QLen-1:0] quotient;
parameter DELY = 100;
always begin go=1; forever #(DELY/2) go=~go; end
divide t (ddInput,dvInput,quotient,go,done);
initial begin
ddInput=16'd0;dvInput=16'd0;
#DELY go=1'b0; ddInput= 16'd8; dvInput= 16'd2;
#DELY go=1'b0; ddInput= -16'd4; dvInput= 16'd2;
#DELY go=1'b0; ddInput= 16'd2; dvInput= -16'd2;
#DELY go=1'b0; ddInput= -16'd9; dvInput= -16'd3;
#DELY $stop;
end
initial $monitor($time,,,"ddInput=%d dvInput=%d,quotient=%d",ddInput,dvInput,quotient);
endmodule
在執行正除正沒問題 可是負數就出現一堆數字了 希望各位大大幫我更正一下QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.117.61.137
推
05/14 22:28, , 1F
05/14 22:28, 1F
→
05/14 22:53, , 2F
05/14 22:53, 2F
→
05/14 22:54, , 3F
05/14 22:54, 3F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
問題
1
3