举个最简单的例子,我要测试下面这个module: module sum_a2b(result, ready, start, clock, a, b););//累加无符号整数a到b:result=a+(a+1)+...+(b-1)+b,完成后ready高电平,启动时start为高电平 output [7:0] result; output ready; input start; input clock; input [3:0] a; input [3:0] b; reg [7:0]result; reg ready; reg [7:0]result_in; reg [3:0]k; always @(posedge clock) if(start) begin k<=a; result_in<=8'b0;//初始累加值为0 ready<=1'b0;//置未完成标记 end else if (k<=b) begin result_in<=result_in+k;//累加一次 k<=k+1;//计数一次 end else begin result<=result_in;//输出累加和 ready<=1'b1;//置完成标记 end endmodule 现在想用一批数据来测试一下,我可以编写一个测试模块,从文件中读入一批a和b以及result(共计N个),存储到测试模块的三个内部数组中(分别为a_array,b_array,result_array),执行一个循环,依次从这3个数组中取a,b,送sum,等sum_a2b计算完后再比较result: module test_sum_a2b_v; parameter N=4; reg [3:0]a_array[N-1:0]; reg [3:0]b_array[N-1:0]; reg [7:0]result_array[N-1:0]; integer i; // Inputs reg start; reg clock; reg [3:0] a; reg [3:0] b; // Outputs wire [7:0] result; wire ready; // Instantiate the Unit Under Test (UUT) sum_a2b uut ( .result(result), .ready(ready), .start(start), .clock(clock), .a(a), .b(b) ); always #100 clock=!clock; initial begin
$readmemb("a.txt",a_array); $readmemb("b.txt",b_array); $readmemb("result.txt",result_array); // Initialize Inputs start = 0; clock = 0; a = 0; b = 0; // Wait 100 ns for global reset to finish #100;
// Add stimulus here $display("Test begin!"); for(i=0;i<N;i=i+1) begin start=1; a=a_array; b=b_array;
#200; start=0; wait (ready); $display("Time:%d,Test %d:a=%b,b=%b,sum=%b,result=%b",$time,i,a,b,result_array,result); #200; end $display("Test end!"); end
endmodule 其中: a.txt中内容: @00 0000 1110 1010 0011 b.txt中内容: @00 0000 1110 1101 1100 result.txt中内容: @00 00000000 00001110 00101110 01001011 我在Xilinx ISE9.2i中进行仿真,结果无问题.经过综合,也正确.现在我把这个module生成了bit文件,下载到FPGA中,可是,我怎样才能给它喂数据a和b呢?通过FPGA开发板上的开关吗?也太慢了,而且开发板上的开关也太少了.有没有其他方法可以给要测试的module喂数据,而且可以取出结果的的方法.比如我在C语言里要测试一个函数,我可以生成一个数据文件,从这个数据文件中取要运算的数据,然后调用要测试的函数,返回结果存储到另一个文件中,这样,我就可以比较一批数据结果和期望结果,从而验证被测的函数功能正确与否. 现在我综合出netlist,想生成sum_a2b这个module的bit文件并下载到FPGA中,怎样做一个测试模块,能从我的3个文件中读入数据,并派送给sum_a2b来测试呢?还有这个测试模块也能综合吗?也能生成bit文件吗?如何把它配置到FPGA中?如何把数据放入ROM中?比较困惑.请指教
|