Verilog读取文本中的数据和输出数据到文本

本文详细介绍了使用Verilog进行文本数据读取和输出的方法,包括如何利用$readmemh和$readmemb指令读取十六进制或二进制数据到内存,以及如何通过$fopen和$fwrite或$fdisplay函数将寄存器数据输出到文本文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于经常要用到,但是每次都要东拼西凑的去回忆如何写代码。所以还是整理下,以后用的时候就直接看这篇文章了;

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))​​;

……

 $fwrite和$fdisplay的区别,$fwrite写下一个数不会自动转行,可以加\n来转行,$fdisplay则会自动转行;

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值