[問題] verilog 問題

看板Electronics作者 (owo)時間19年前 (2006/05/14 21:16), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/2 (看更多)
下面是一個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
簡單說就是我要做8除2 -4除2 2除-2 -9除-3 但只有8除2正常
05/14 22:53, 2F

05/14 22:54, , 3F
其他有負數的都出現一堆數字orz
05/14 22:54, 3F
文章代碼(AID): #14PoslMy (Electronics)
文章代碼(AID): #14PoslMy (Electronics)