cnn_AVS_proj中的文件数据读写

来源:互联网 发布:西班牙4g手机网络制式 编辑:程序博客网 时间:2024/06/08 03:09

简述

在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。



后续待补充。

0 0
原创粉丝点击