vivado仿真 文件讀取和寫入
讀取文件
首先創(chuàng)建一個(gè)TXT文件。
$readmemb和$readmemh用來(lái)從文件中讀取數(shù)據(jù)到存儲(chǔ)器中。其中readmemb要求每個(gè)數(shù)字是二進(jìn)制數(shù),readmemh要求每個(gè)數(shù)字必須是十六進(jìn)制數(shù)字。數(shù)字不能包含位寬說(shuō)明,數(shù)字中可以有不定值x或X,高阻值z(mì)或Z,和下劃線(_),和Verilog語(yǔ)法中的用法是一樣的。
一共有下邊6種用法:
(1)$readmemb("<數(shù)據(jù)文件名>",<存儲(chǔ)器名>);
(2)$readmemb("<數(shù)據(jù)文件名>",<存儲(chǔ)器名>,<起始地址>);
(3)$readmemb("<數(shù)據(jù)文件名>",<存儲(chǔ)器名>,<起始地址>,<終止地址>);
(4)$readmemh("<數(shù)據(jù)文件名>",<存儲(chǔ)器名>);
(5)$readmemh("<數(shù)據(jù)文件名>",<存儲(chǔ)器名>,<起始地址>);
(6)$readmemh("<數(shù)據(jù)文件名>",<存儲(chǔ)器名>,<起始地址>,<終止地址>);
寫入文件
寫入文件的操作與C語(yǔ)言類似,首先打開(kāi)文件,寫入數(shù)據(jù)之后關(guān)閉文件。
outputfile = $fopen("file2.txt","w");
打開(kāi)文件
$fwrite(outputfile,"%b\n",memory);
寫入數(shù)據(jù)
$fclose(outputfile);
關(guān)閉文件
注意:
在寫入數(shù)據(jù)的時(shí)候,寫入的數(shù)據(jù)不能是一個(gè)數(shù)組,必須是單個(gè)的數(shù)字,因此想寫入數(shù)組的時(shí)候必須要循環(huán)單個(gè)寫入數(shù)據(jù),寫入數(shù)據(jù)的數(shù)據(jù)格式可以是2進(jìn)制10進(jìn)制16進(jìn)制,方式與C語(yǔ)言類似,%控制寫入的類型。
仿真
`timescale 1ns / 1ps
module tb_file (
);
reg[3:0] memory[0:7];//申請(qǐng)八個(gè)四位的存儲(chǔ)單元
reg[4:0] n;
integer outputfile;
initial
begin
$readmemb("E:/file1.txt",memory); //讀取file1.txt中的數(shù)字到memory
for(n=0;n<=7;n=n+1) //把八個(gè)存儲(chǔ)單元的數(shù)字都讀取出來(lái),
$display("%b",memory[n]);
outputfile = $fopen("file2.txt","w");
for(n=0;n<=7;n=n+1)
$fwrite(outputfile,"%b\n",memory[n]);
$fclose(outputfile);
end
endmodule
運(yùn)行結(jié)果如下:
在tcl窗口中會(huì)打印出數(shù)據(jù)。
在仿真的文件夾中會(huì)出現(xiàn)剛剛寫入數(shù)據(jù)的文件,文件不需要提前創(chuàng)建,如果程序發(fā)現(xiàn)沒(méi)有用到的文件,會(huì)自動(dòng)創(chuàng)建。
可以看到數(shù)據(jù)已經(jīng)成功寫入到文件中。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-513605.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-513605.html
到了這里,關(guān)于vivado仿真 文件讀取和寫入的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!