?? div_tb.v
字號:
module div_tb; parameter samples = 128; //total data samples parameter n = 32; //bit length, should be 32 parameter m = 16; //dot position parameter seed = 200; //random seed wire [n+m-1:0] quo; wire [n-1:0] rem; reg clk,reset,start; wire err,ok; reg [n-1:0] dividend; reg [n-1:0] divisor; reg [n+m-1:0] quotient; reg [n-1:0] remainder; integer i; div2 #(n,m) t(.clk(clk),.reset(reset),.start(start), .dividend(dividend),.divisor(divisor), .quo(quo),.rem(rem),.err(err),.ok(ok)); //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 #5 clk = ~clk; initial begin clk = 0; reset = 0; start = 0; 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 $display("i=%4d, dividend=%b, divisor = %b, quotient=%b, remainder=%b", i, dividend, divisor, quotient, remainder); end #20 reset = 0; #20 reset = 1; start = 1; #1000 if(quotient!=quo || remainder!=rem) begin $display("BAD RESULT!!!"); $display("result: quotient=48'b%b, remainder=32'b%b",quo,rem); end else begin $display("good!"); $display("result: quotient=48'b%b, remainder=32'b%b",quo,rem); $stop; end $stop; end endmodule
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -