zoukankan      html  css  js  c++  java
  • 用读取文件$readmemh,$readmemb的方法初始化memory

    ###1、环境变量PATH 程序是由操作系统执行 是吧!要执行程序,你的找到它吧,这就是 PATH 环境变量做的事。 比如 win下PATH中的路径,是指在DOS下,你可以直接输入一个可执行文件的名字,它就能就行了。否则,就要先 cd 到那个可执行文件所在的目录下,之后才能在DOS直接输入名字运行。 ####2、$readmemh readmemb

    $readmemb ("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>) $readmemb("<数据文件名>",<存贮器名> 下面举例说明: 先定义一个有256个地址的字节存贮器 mem: reg[7:0] mem[1:256];
    下面给出的系统任务以各自不同的方式装载数据到存贮器mem中。
    initial $readmemh("mem.data",mem); initial $readmemh("mem.data",mem,16);
    initial $readmemh("mem.data",mem,128,1);
    第一条语句在仿真时刻为0时,将装载数据到以地址是1的存贮器单元为起始存放单元的存贮器中去。 第二条语句将装载数据到以单元地址是16的存贮器单元为起始存放单元的存贮器中去,一直到地址是256的单元为止。 第三条语句将从地址是128的单元开始装载数据,一直到地址为1的单元。在第三种情况中,当装载完毕,系统要检查在数据文件里是否有128个数据,如果没有,系统将提示错误信息。 文件可以包含显式的地址形式。 形式一

    11001
    11010
    

    形式二:对指定地址进行赋值(地址是十六进制的数)
    @hex_address value

    @5 11001000 // 将11001存入mem[5]
    @2 11010000 //将11010存入mem[2]
    

    @5   //以直至5开始
     11001000
     00000000
     111111111
    

    在这种情况下,值被读入存储器指定的地址。 命名规则:reg[n-1:0] 存储器名[m-1:0]

    说明:这是m个n位的存储器,该存储器的地址范围是0-(m-1)

    举例:reg[3:0] memo[255:0]

    说明:这是256个4位存储器,该存储器地址范围是0-255

    赋值:memo[200] = 4'b1010;

    说明:给第200地址单元赋值4'b1010;

    精确到位:memo[56][2]

    说明:第56地址的第2位数据

    赋值:wire data=memo[56][1];

    说明:把memo中第56地址的第1位数据赋值给data; integer类型也是一种寄存器数据类型,integer类型的变量为有符号数,而reg类型的变量则为无符号数,除非特别声明为有符号数,还有就是integer的位宽为宿主机的字的位数,但最小为32位,用integer的变量都可以用reg定义,只是对于用于计数更方便而已。reg,integer,real,time都是寄存器数据类型,定义在Verilog中用来保存数值的变量,和实际的硬件电路中的寄存器有区别

    今天看代码时遇到了integer,只知道这是个整数类型,可详细的内容却一窍不通,查看了资料---《verilog数字VLSI设计教程》。其中是这么写到的: 大多数的矢量类型(reg或者net)都被默认当做无符号数。integer和real是个例外,它们被默认为当做有符号数。通常,real类型是不可综合的。 假设在没有溢出的情况下,不管是无符号数还是有符号数,它们都是二进制的一串数值而已;而当这个值被当做某种类型比较时:又符号数的MSB被用来表示这个数字的符号,而无符号数的MSB则是位权最高的那一位。无论采用什么样的二进制格式,一个无符号数永远也不能成为负值。采用integer配合FOR语句,行数比较少,但是integer不能综合,只能用来仿真。

    ####位拼接符号的使用时的注意事项

    问题一
    reg [7:0] reg2;
    reg2<={2'b11,reg2};//不能实现预定的功能;
    reg2<={reg2,2'b11,};//能实现预定的功能;
    reg2<={2'b11,reg2[7:2]};能实现预定的功能;
    

    在利用拼接符号时,一定要指定每一个元素的位宽;在位拼接表达式中不允许存在没有指明位数的信号

    在想允许综合的风格代码中,一般不对RAM复位 RAM一般会占用大量的面积,所以不是用综合出来的RAM

  • 相关阅读:
    数组有没有length()这个方法? String有没有length()这个方法?
    序列化接口的id有什么用?
    如何进行Hibernate的性能优化?
    构造器Constructor是否可被override?
    Collection框架中实现比较要实现什么接口?
    ArrayList如何实现插入的数据按自定义的方式有序存放?
    Java中会存在内存泄漏吗,请简单描述?
    List 和 Map 区别?
    面向对象的特征有哪些?
    垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
  • 原文地址:https://www.cnblogs.com/xuqing125/p/8884393.html
Copyright © 2011-2022 走看看