日常記錄(22)程式碼書寫
阿新 • • 發佈:2021-12-27
程式碼書寫
以下是一個乘法器設計,其中task的tmp指明瞭16位長度,用於儲存移位後的結果。另外注意tmp需要為16位,否則儲存結果會被截斷。
如果直接q = q + p1<<i;則輸出結果錯誤,需要括號q = q +( p1<<i);。
module mul (); reg[15:0] q; reg[7:0] p1, p2; initial begin mul_task(q, p1, p2); # 10 p1=5;p2=6; mul_task(q, p1, p2); # 85 p1=5;p2=111; mul_task(q, p1, p2); # 10 p1=123; mul_task(q, p1, p2); # 10 $finish; end initial begin $monitor("@%t, input p1 %d, p2 %d, output q %d", $time, p1, p2, q); end task automatic mul_task; output reg[15:0] q; input [7:0] p1, p2; integer i; reg [15:0] tmp; begin q=0; for(i=0;i<8;i=i+1) begin tmp=p1<<i; if(p2[i]==1) q = q + tmp; end # 10 q = q; end endtask reg [7:0] tx; initial begin tx=8'b10110011; # 10 tx=tx<<1; # 5 tx=tx>>1; end initial begin //$monitor("tx is %b", tx); ; end endmodule
結果:
@ 0, input p1 x, p2 x, output q x @ 10, input p1 x, p2 x, output q 0 @ 20, input p1 5, p2 6, output q 0 @ 30, input p1 5, p2 6, output q 30 @ 115, input p1 5, p2 111, output q 30 @ 125, input p1 5, p2 111, output q 555 @ 135, input p1 123, p2 111, output q 555 @ 145, input p1 123, p2 111, output q 13653 $finish called from file "mul.v", line 13. $finish at simulation time 155
本文來自部落格園,作者:大浪淘沙、,轉載請註明原文連結:https://www.cnblogs.com/bai2022/p/15735510.html