8位無符號數(shù)乘法運(yùn)算HDL設(shè)計實例
`timescale 1 ns/ 1 ps
module mux_vlg_tst();
reg [7:0] ain;
reg [7:0] bin;
reg clk;
reg enable;
reg rst_n;
wire ready;
wire [31:0] yout;
reg[8:0] i,j;
mux i1 (
.ain(ain),
.bin(bin),
.clk(clk),
.enable(enable),
.ready(ready),
.rst_n(rst_n),
.yout(yout)
);
initial begin
$display(mux example simulation is running.n);
rst_n = 0;
clk = 0;
enable = 0;
ain = 8'hzz;
bin = 8'hzz;
#1000;
@(posedge clk);
rst_n = 1;
for(i=0;i256;i=i+1) begin (1)
for(j=0;j256;j=j+1) begin (2)
mux_ab(i,j); (3)
end
end
$display(mux example simulation is over.All right.n); (4)
$stop;
end
always #10 clk = ~clk;
task mux_ab; (5)
input[7:0] a;
input[7:0] b;
begin
@(posedge clk); #3;
ain = a;
bin = b;
enable = 1; (6)
@(posedge ready); (7)
@(posedge clk); #3;
if(a*b == yout) $display(%3d * %3d = %5d, it is right.,a,b,yout);
(8)
else begin (9)
$display(%3d * %3d = %5d, it is wrong.,a,b,yout);
$stop;
end
@(posedge clk); #3;
enable = 0; (10)
ain = 8'hzz;
bin = 8'hzz;
end
endtask
endmodule
- 乘數(shù)ain從0到255遞增。
- 被乘數(shù)bin從0到255遞增,以此完成全便利測試。
- 調(diào)用乘法運(yùn)算任務(wù),輸入?yún)?shù)i和j分別會賦值給ain和bin用于運(yùn)算。
- 所有測試成功完成,則最終打印“mux example simulation is over.All right.”的信息,如果測試中出現(xiàn)任何一個錯誤,則測試腳本會停止運(yùn)行,也就意味著見不到這條語句。
- 產(chǎn)生一次乘法運(yùn)算任務(wù)的激勵。輸入?yún)?shù)a和b分別為運(yùn)算的輸出乘數(shù)和被乘數(shù)。
- 使能信號拉高,發(fā)起一次乘法運(yùn)算。
- 等待ready信號拉高,表示乘法運(yùn)算完成,輸出結(jié)果有效。
- 測試模塊輸出的乘法運(yùn)算結(jié)果正確,打印相關(guān)信息。
- 測試模塊輸出的乘法運(yùn)算結(jié)果錯誤,打印錯誤提示并停止測試腳本的運(yùn)行。
- 拉低enable信號完成當(dāng)前運(yùn)算。
如圖2所示,為當(dāng)前測試結(jié)果,我們看到了最后的“mux example simulation is over.All right.”提示信息,表示測試通過。
圖2 mux工程測試結(jié)果
評論