转自:http://www.eetop.cn/blog/html/17/743817-24486.html
一、Verilog中文件输入任务
在verilog中有$reahttp://www.eetop.cn/blog/html/17/743817-24486.htmldmemh(“filename”, mem_name)命令,
在使用这个命令时,”filename”中的路径要用反斜杠'/',而不是斜杠'\',切记!
如$readmemh("F:/mydesigen/re_input.txt",re_input);上面的语句是正确的,而如果用斜杠
就有问题,如$readmemh("G:\data.txt",re_input)。
对文件进行数据输出用OUTFILE=$fopen("dispairity.txt")
$fdisplay(OUTFILE,"The dispairity of the pixel%d is: %d",j-434,DISP);
用$readmemh或$readmemb读取的数据文件data.txt和仿真数据写入文件在没有指定的情况下一定是在工程本身的文件夹下,仅仅是在工程所在文件夹中,与工程属于并列关系是不行的,要从属进工程才可以。
对于需要的txt文件,其格式为每行一个数据,例如用matlab产生文件则可以这样写
fid0 = fopen('G:\data.txt','wt');
fprintf(fid0,'%x \n',real(info));
其中的换行符是必须的。同时,在matlab中,路径语句的斜杠’\’或是反斜杠’/’都没有问题
我常用的是:
a0=funcCensusOneImage('im0.pgm',3);
fid0=fopen('G:\data.txt','wt');
fprintf(fid0,'%x\n',a0);
fclose(fid0);
向G:\data.txt文件写入经过ct变换的8位16进制数据,且每一个数据占一行,符合modelsim仿真时将data.txt数据读入存储器寄存器的规范。
具体实例:
注意:外部.txt文档中的数据之间没有逗号,要不然仿真的时候一片红
reg [15:0] Pattern = 0;
reg [0:0] stimulus[1:3200];
reg [3:0] count= 0;
always @(posedge clk)
begin
if(din_en_temp)
begin
$readmemb("C:/Users/admin/Desktop/b.txt",stimulus);
count = count + 1;
begin
Pattern=Pattern+1;
din=stimulus[Pattern];
#5;
end
end
else
begin
din=0;
Pattern = 0;
end
end
二、Verilog中文件输出任务
系统函数$fopen用于打开一个文件,并还回一个整数指针.
然后,$fdisplay就可以使用这个文件指针在文件中写入信息。
如果要输出十进制有符号数,则程序代码如下:
貌似下面这种方法好用些,不过要写在程序中,而不是testbench。
reg [12:0] k = 0;
always @(posedge Clk)
begin
if(!Rst_n)
k <= 0;
else if(k<8191)
k <= k + 1;
else
k <= 8191;
end
integer a_file;
initial a_file = $fopen("M1.txt");
always @(k)
begin
$fdisplay(a_file,"%d",SumMagnituder);
if(k == 13'd8191)
$stop;
end