概述
在完成Verilog代码后往往需要先进行功能仿真,而最直观观察对错的方案便是将FPGA生成的数据与MATLAB生成的数据进行对比,若定点合理且代码正确,误差往往会在预期范围内,譬如,数据定点为(1,16,10),那么转换后的小数后三位应该是与MATLAB一致的(1/(2^10)=0.0009)。关于定点化后续会谈,下文会写一些FPGA读取,写入数据的方式。
- FPGA生成数据的写入与读取
此处的写入或者读取往往是在tb文件中的,主程序中不推荐使用。
读取:其中readmemb表示读取的是二进制文件,可以将b修改成h,读取十六进制文件。
data_num是数据个数(深度),[15:0]表示读取的数据的位宽。
reg [15:0] Data_in [data_num-1:0];
initial begin
$readmemb ("PATH",Data_in);
end
写入:
handle_i为文件的句柄,在每次时钟上升沿且使能有效的情况下,写入数据
integer handle_i;
initial begin
handle_i = $fopen("PATH");
end
always@(posedge clk)begin
if(Dout_Hard_Valid)begin
$fdisplay(handle_i,"%d" _Dout);
end
end
- MATLAB仿真数据的写入与读取
MATLAB中读取数据可以使用importdata()和load()函数,具体参数可以使用help查询官方文档。
比较可以使用biterr()或者isequal()函数。
- 排错
- 如果是大面积错误的话,往往是算法和FPGA硬件实现有一定的偏差,需要查看各模块输入输出数据,方可定位。
- 如果是概率性错误,即偶尔出现,可以逐个分析找出规律,重点排查截位、各帧开始和结束的符号以及时序问题。
最后
以上就是认真小伙为你收集整理的Verilog读写文件以及验证数据准确性的全部内容,希望文章能够帮你解决Verilog读写文件以及验证数据准确性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复