首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

怎样在FPGA上验证自己做的电路是正确的?

怎样在FPGA上验证自己做的电路是正确的?

举个最简单的例子,我要测试下面这个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中?比较困惑.请指教



天哪,高手哪里去了?帮忙救命呀
返回列表