📄 tb_div2.v.bak
字号:
`timescale 100ps/100psmodule tb_div_rand; parameter n = 32; //bit length, should be 32 parameter m = 16; //dot position parameter seed = 200; //random seed parameter clock_cycle=10; reg [n-1:0] dividend; reg [n-1:0] divisor; reg [n+m-1:0] quotient; reg [n-1:0] remainder; reg clock; reg start; wire finish; wire error; wire [n+m-1:0] q; wire [n-1:0] r; integer i; //generate random dividend&divisor and calculate quotient&remainder function [n+n+(n+m)+(n)-1:0] gen_rand_data; input integer i; reg [n+m-1:0] dividend; reg [n+m-1:0] divisor; reg [n+m-1:0] quotient; reg [n+m-1:0] remainder; integer k; integer flag; begin k = (i/4) % 32 + 1; flag = 1; while(flag) begin dividend = {{$random}, {m{1'b0}}}; divisor = {{m{1'b0}}, {$random}}; //quotient = {$random}; //remainder = {$random}; divisor = divisor % ( 2 << k); if(divisor == {(n+m){1'b0}}) begin $display("Divisor is zero!!!"); end else begin flag = 0; end quotient = dividend / divisor; remainder = dividend % divisor; if(remainder > divisor) begin $display("Bad remainder!!!"); $stop; end if(quotient * divisor + remainder != dividend) begin $display("bad values!!!"); $stop; end end gen_rand_data = {dividend[n+m-1:m], divisor[n-1:0], quotient, remainder[n-1:0]}; end endfunction always #clock_cycle clock=~clock; initial begin clock = 0; start = 0; i = $random(seed); for(i=1; i<=1010; i=i+1) begin //{dividend, divisor, quotient, remainder} = gen_rand_data(i); dividend = 32'b01111101011011011111010111111010; divisor = 32'b11111001001001111001010011110010; quotient = 48'b000000000000000000000000000000001000000011100000; remainder= 32'b00101000110111101010110001000000; $display("i=%4d, dividend=32'b%b, divisor=32'b%b;\n quotient=48'b%b, remainder=32'b%b", i, dividend, divisor, quotient, remainder); #20 start = 1; #1010 if(quotient!=q || remainder!=r) begin $display("BAD RESULT!!!"); $display("result: quotient=48'b%b, remainder=32'b%b", q, r); $stop; end end $stop; end div2 m1( .dividend(dividend), .divisor(divisor), .quotient(q), .remainder(r), .start(start), .clock(clock), .finish(finish), .error(error)); endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -