Verilog读取文本中的数据和输出数据到文本
由于经常要用到,但是每次都要东拼西凑的去回忆如何写代码。所以还是整理下,以后用的时候就直接看这篇文章了。
1、读取文本数据
读取文本数据都是先将数据写到mem中,然后在通过控制men的地址来一个一个的取数。示例代码如下:
reg [11:0] data_src_mem [0:1023] ;//定义一个位宽为12bit,深度为1024的mem
reg [9:0] mem_addr ;//定义mem的地址
wire [11:0] data ;
initial
begin
$readmemh("path/data.txt",data_src_mem);//将path路径下得data.txt的数据以十六 //进制的形式写入到data_src_mem中
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
mem_addr <= 10'd0 ;
else
mem_addr <= mem_addr + 10'd1 ;
end
assign data = data_src_mem[mem_addr];
$readmemh是以十六进制的形式写入,还可以用$readmemb表示以二进制的形式写入。但是如何以十进制的形式写入我现在还没找到。
2、输出数据到文本
integer out_file;//定义文件句柄
initial
begin
out_file = $fopen("path/out_put_file.txt","w");//获取文件句柄
end
always @(条件)
……
$fwrite(out_file,"%d",$signed(reg_data));
……
之前一直想输出十进制,没找到,后来才发现读取文本数据$signed这个系统函数。看来还是要好好熟悉一下众多的系统函数,以后再把这些有用的系统函数补充到文章中。