赞
踩
文章转自:https://blog.csdn.net/FPGADesigner/article/details/80470972
示例代码如下:
integer i; //数组坐标
reg [9:0] stimulus[1:data_num]; //数组形式存储读出的数据
initial
begin
$readmemb("SinIn.txt", stimulus); //将txt文件中的数据存储在数组中
i = 0;
repeat(data_num) begin //重复读取数组中的数据
i = i + 1;
din = stimulus[i];
#clk_period; //每个时钟读取一次
end
end
用“数组”来表述Verilog HDL中的定义并不准确,但对大多数人来说应该更好理解。可以将stimulus视作一个存储器,[9:0]定义了数据的位宽,[1:data_num]定义了存储器的深度。stimulus的定义应该与txt文件中的数据相匹配。txt文件中每行存储一个数据,则上述定义对应的是txt中存储了data_num个数据,每个数据的最大位宽为10bit。
读取二进制格式的文件是用系统任务readmemb;读取十六进制格式文件使用readmemb;读取十六进制格式文件使用readmemh。其命令为$readmemb(“filename”, mem_name)
,将filename中的内容读取到mem_name中。
注意filename文件路径中应该用反斜杠“/”,与windows系统中的文件路径使用的“\”不同。如果不指定路径,向上面程序一样直接写文件名字,那么该文件必须和testbench文件在同一路径下。
repeat(n) begin … end
中的内容应该根据设计的需要编写。
示例代码如下:
integer file_out;
initial
begin
file_out = $fopen("mixer_out.txt");
if (!file_out) begin
$display("can't open file");
$finish;
end
end
wire signed [19:0] dout_s = dout;
wire rst_write = clk & rst_n; //复位期间不应写入数据
always @ (posedge rst_write)
$fdisplay(file_out, "%d", dout_s);
写入文件需要先用$fopen
系统任务打开文件,这个系统任务在打开文件的同时会清空文件,并返回一个句柄,如果句柄为0则表示打开文件失败。
如果原来不存在该文件,则会自动创建该文件。
打开文件之后便可以用得到的句柄和KaTeX parse error: Expected 'EOF', got '&' at position 55: …printf函数的用法很像。 &̲emsp; 上面的程…fdisplay`,都会在数据后插入一个换行符。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。