📄 tb_div_rand.v
字号:
`timescale 100ps/100psmodule tb_div_rand; parameter samples = 128; //total data samples 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; 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;initialbeginclock=0;start=0;#1 {dividend, divisor, quotient, remainder} = gen_rand_data(i);#10 start=1;#1100 $stop;end initial begin i = $random(seed); for(i=1; i<=samples; i=i+1) begin {dividend, divisor, quotient, remainder} = gen_rand_data(i); //you can print this values to a file instead of to the console end $stop; end div2 m1( .dividend(dividend), .divisor(divisor), .quotient(quotient), .remainder(remainder), .start(start), .clock(clock), .finish(finish), .error(error)); endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -