cnn_AVS_proj中的文件数据读写

本文详细介绍了在Verilog语言中使用$fread和$fwrite函数进行二进制文件读写时,数据存储顺序的重要性。重点讲解了bigendian与littleendian的区别,并通过实例说明了如何正确处理数据的高低位。
摘要由CSDN通过智能技术生成

简述

在verilog中读写数据是,数据存储的顺序非常重要,即,对于单个数据,high significant的byte是放在存储器的高地址还是低地址上,就是通常所说的big endianlittle endian的问题。
不论是在硬件设计还是硬件验证中,只要设计读写文件的操作,都应该考虑这个问题。


系统函数数据读写顺序

  • $fread函数
    这里只描述$fread函数读取二进制文件的情形,在读取二进制文件的时候,数据存储的顺序非常重要,在读取二进制的数据时,fread函数一次性读取一次性读取32-bit的数据,fread函数要把读取的数据放到程序的某个寄存器或者寄存器组中,如果寄存器的数据长度大于32-bit,那么fread函数会把首先读取到的数据放到寄存器的高位上,如下如所示:
    图1
    在把寄存器的值移入到别的寄存器组中就要注意,寄存器的high significant的值要对应到寄存器组中的地位地址中。对于如果在某一个时钟读入的数据没有把寄存器填满,要记得寄存器中high significant位置的数据才是有效数据。


  • $fwrite
    fwrite写入二进制的数据的顺序正好和fread过程相反,fwrite是程序中寄存器中的值写入到二进制文件当中,寄存器的high significant的值会首先被写入到二进制文件的低地址中。


  • $fseek
    fseek是对文件进行重新定位,对于fseek有两点要注意:

    • fseek一定要带返回值,这一点我也是摸索了很长时间才发现,在vcs编译器下,如果fseek不带返回值,会一直编译不过去。

    • fseek定位以byte为单位,重定位中的偏移值都是表示偏移了多少多少byte。



后续待补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值