Verilog中的文件的读取和写入

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Verilog中的⽂件的读取和写⼊
在仿真验证的时候,需要⼀个合适的数据激励,在testbech⼀个⼀个的写很⿇烦,如果能直接从数据⽂本⾥读取,然后输⼊到已经编写好功能程序中,就很⽅便。

还有的时候,我们需要将程序输出的内容写到⽂本⾥⾯,然后⽤其他⼯具(例如matlab、python等)进⾏处理。

代码和解释说明如下:
1 `timescale 1ns/1ns
2
3module file_ctrl;
4
5reg clk;
6reg rst_n;
7
8reg [7:0] data_in; //定义的数据输⼊寄存器
9reg [7:0] data_out;
10reg [7:0] cnt;
11
12integer file_rd; //定义数据读指针
13integer file_wr; //定义数据写指针
14
15initial begin//定义时钟
16 clk = 1'b1;
17forever
18 #10
19 clk = ~clk;
20end
21
22initial begin//定义复位
23 rst_n = 1'b0;
24 #21
25 rst_n = 1'b1;
26end
27
28initial begin//打开读取和写⼊的⽂件,这⾥的路径要对
29 file_rd = $fopen("E:/Project/file_ctrl/sim/tb/data_in.txt","r");
30 file_wr = $fopen("E:/Project/file_ctrl/sim/tb/data_out.txt","w");
31end
32
33always@(posedge clk or negedge rst_n)
34begin
35if(rst_n == 1'b0)begin
36 data_in <= 8'd0;
37 cnt <= 8'd0;
38end
39else if(cnt < 10)begin
40 $fscanf(file_rd,"%h",data_in); //读取每⾏
41 cnt <= cnt +1;
42 $fwrite(file_wr,"%h\n", data_in); //换⾏写⼊
43end
44else begin
45 data_in <= 8'd0;
46 $fclose(file_rd); //关闭⽂件
47 $fclose(file_wr);
48 cnt <= 8'd11;
49end
50end
51
52
53
54endmodule。

相关文档
最新文档