精华内容
下载资源
问答
  • 寄存器数组
    万次阅读 多人点赞
    2018-10-30 17:10:08

    [转载]http://blog.sina.com.cn/s/blog_9424755f0101rhrh.html

    存储器是一个寄存器数组。存储器使用如下方式说明:

    reg [ msb: 1sb] memory1 [ upper1: lower1],
    memory2 [upper2: lower2],. . . ;

    例如:
    reg [0:3 ] MyMem [0:63]
    //MyMem为64个4位寄存器的数组。
    reg Bog [1:5]
    //Bog为5个1位寄存器的数组。

    MyMem和Bog都是存储器。数组的维数不能大于2。注意存储器属于寄存器数组类型。线网数据类型没有相应的存储器类型。

      单个寄存器说明既能够用于说明寄存器类型,也可以用于说明存储器类型。

    parameter ADDR_SIZE = 16 , WORD_SIZE = 8;
    reg [1: WORD_SIZE] RamPar [ ADDR_SIZE-1 : 0], DataReg;

    RamPar是存储器,是16个8位寄存器数组,而DataReg是8位寄存器。
      在赋值语句中需要注意如下区别:存储器赋值不能在一条赋值语句中完成,但是寄存器可以。因此在存储器被赋值时,需要定义一个索引。下例说明它们之间的不同。

    reg [1:5] Dig; //Dig为5位寄存器。
    . . .
    Dig = 5'b11011;

      上述赋值都是正确的, 但下述赋值不正确:

    reg BOg[1:5]; //Bog为5个1位寄存器的存储器。
    . . .
    Bog = 5'b11011;

      有一种存储器赋值的方法是分别对存储器中的每个字赋值。例如:

    reg [0:3] Xrom [1:4]
    . . .
    Xrom[1] = 4'hA;
    Xrom[2] = 4'h8;
    Xrom[3] = 4'hF;
    Xrom[4] = 4'h2;

      为存储器赋值的另一种方法是使用系统任务:
      1) $readmemb (加载二进制值)
      2) $readmemb (加载十六进制值)
      这些系统任务从指定的文本文件中读取数据并加载到存储器。文本文件必须包含相应的二进制或者十六进制数。例如:

    reg [1:4] RomB [7:1] ;
    $ readmemb ("ram.patt", RomB);

    Romb是存储器。文件“ram.patt”必须包含二进制值。文件也可以包含空白空间和注释。下面是文件中可能内容的实例。

    1101
    1110
    1000
    0111
    0000
    1001
    0011

      系统任务$readmemb促使从索引7即Romb最左边的字索引,开始读取值。如果只加载存储器的一部分,值域可以在$readmemb方法中显式定义。例如:

    $readmemb ("ram.patt", RomB, 5, 3);

    在这种情况下只有Romb[5],Romb[4]和Romb[3]这些字从文件头开始被读取。被读取的值为1101、1100和1000。
    文件可以包含显式的地址形式。

    @hex_address value
    如下实例:
    @5 11001
    @2 11010

    在这种情况下,值被读入存储器指定的地址。
      当只定义开始值时,连续读取直至到达存储器右端索引边界。例如:

    $readmemb ("rom.patt", RomB, 6);
    //从地址6开始,并且持续到1。
    $readmemb ( "rom.patt", RomB, 6, 4);
    //从地址6读到地址4。

    更多相关内容
  • Verilog寄存器数组的定义与赋初值

    千次阅读 2021-04-16 09:34:38
    今天碰到了这个问题:Verilog寄存器数组的定义与赋初值 结果是:代码右边拼接的矩阵数超过了左边定义的边界 分配了未封装的矩阵,必须要聚合表达式,违反了verilog的语法标准。 这种定义方法需要先定义后赋值。 ....

    参考 http://blog.sina.com.cn/s/blog_9424755f0101rhrh.html

    今天碰到了这个问题:Verilog寄存器数组的定义与赋初值

    结果是:代码右边拼接的矩阵数超过了左边定义的边界 分配了未封装的矩阵,必须要聚合表达式,违反了verilog的语法标准。
    这种定义方法需要先定义后赋值。

    在这里插入图片描述

    展开全文
  • 可以通过代码告诉综合工具(只对寄存器数组有效,其他类型的寄存器综合工具会忽略掉)。 具体方法是这样的: For example, in the following code, the ramstyle synthesis attribute specifies that the inferred ...

    有的时候我们自己用Verilog代码写的rom或ram会被quartus ii综合成查找表,并没有使用到block memory资源。
    以下是在网上查到的一段说明:(没找到原创链接,都是转载,,,)

    To use the ramstyle attribute in a Verilog Design File (.v), specify the synthesis attribute delimited by (* and *) preceding the Variable Declaration of an inferred RAM whose implementation you want to control. Specify the synthesis attribute value as “logic”, “M512”, “M4K”, “M9K”, “M20K”, “M144K”, “MLAB”, or “M-RAM” depending on the type of memory block you want the Quartus II software to use when implementing the inferred RAM. If you use the synthesis attribute on anything but a variable that represents a RAM, or if you specify an illegal value, the Quartus II software ignores that synthesis attribute.
    By setting the value to “M512”, “M4K”, “M9K”, “M20K”, “M144K”, “MLAB”, or “M-RAM”, you can choose the type of memory block that the Quartus II software uses when implementing the inferred RAM. If the attribute is set to “logic”, then the RAM is implemented in logic cells.

    大致意思是说如果我们想要quartus指定一个寄存器数组在布局布线时使用block memory资源。可以通过代码告诉综合工具(只对寄存器数组有效,其他类型的寄存器综合工具会忽略掉)。
    具体方法是这样的:

    For example, in the following code, the ramstyle synthesis attribute specifies that the inferred RAM my_ram should be implemented using an M512 memory block:

    (* ramstyle = "M512" *) reg [0:7] my_ram[0:63];
    

    那现在来实践一下。
    我使用的是Arria 10系列的芯片,先来看看该系列芯片的block memory资源都有什么类型,如下图:
    (不同系列的芯片其block memory类型是不一样的,写之前要先查看手册,不要照搬我的)
    请添加图片描述
    可以看到有MLABM20K,那根据上面的例子我就可以把自己写的rom综合到memory block中了。这里我指定到M20K。代码如下图:
    在这里插入图片描述

    这样就会布局到block memory中了
    在这里插入图片描述
    如果不加那个条件
    在这里插入图片描述
    布局的时候就会用寄存器和查找表搭建。
    在这里插入图片描述

    展开全文
  • Verilog中寄存器数组

    千次阅读 2020-08-31 08:47:27
    存储器是一个寄存器数组,存储器使用如下方式说明: 定义6个4位宽的寄存器的数组Xrom,Verilog表示如下: reg [0:3] Xrom [0:5] 对寄存器的数组Xrom赋值,Verilog表示如下: Xrom[0] = 4'hA; Xrom[1] = 4'hA...

    Verilog寄存器数组语法:

    定义6个4位宽的寄存器的数组Xrom,Verilog表示如下:
    
       reg [0:3] Xrom [0:5]
    
    对寄存器的数组Xrom赋值,Verilog表示如下:
    
         Xrom[0] = 4'hA;
         Xrom[1] = 4'hA;
         Xrom[2] = 4'h8;
         Xrom[3] = 4'hF;
         Xrom[4] = 4'h2;
         Xrom[5] = 4'h6;
    
    
    又或者定义7个32位宽的寄存器数组ip_header
        reg [31:0] ip_header [6:0];
    
    Verilog赋值表示如下:
    
    
        ip_header[0]       <={16'h4500,tx_total_length} ; 
        ip_header[1][31:16]<=ip_header[1][31:16]+1'b1   ; 
        ip_header[1][15:0] <=16'h4000                   ; 
        ip_header[2]       <=32'h80110000               ; 
        ip_header[3]       <=32'hc0a80002               ; 
        ip_header[4]       <=32'hc0a80003               ; 
        ip_header[5]       <=32'h80008000               ; 
        ip_header[6]       <={tx_data_length,16'h0000}  ; 
    

     

    展开全文
  • cuda 寄存器数组使用解析

    千次阅读 2015-02-01 11:20:35
    在基于cuda对一些算法做并行优化时,为了尽可能的提高算法的运行速度,有时我们会想要用寄存器数组使得算法飞一般的快,然而,效果却总是差强人意。用了竟然比没用快,这是为什么呢?
  • 数组和链表的对比数组的代码实现以数组下标引出“寄存器”文章更新记录 什么是数组数组是 有限个同类型变量的有序排列集合 ,其数据 按顺序存储在内存的连续空间内。数组内部的每一个数据都有相对应的数组下标,...
  • 寄存器数组reg[127:0]arry[0:150], 计数变量reg[6:0]cnt; 要给arry赋值有两种方法 1. arry[cnt] = xxx; 2. case(cnt) 0: arry[0] = xxx; 1: arry[1] = xxx; 2: arry[2] = xxx; ... endcase 显然第一...
  • 寄存器 GPU片上高速缓存器,基本单元时寄存器文件,每个寄存器文件大小为32...如果每个线程使用了过多的寄存器,或声明了大型结构体或数组,或者编译器无法确定数组的大小,线程的私有数据就有可能会被分配到local me
  • LabView-数据移位保存数组操作

    千次阅读 2019-08-04 20:50:22
    步骤:数据移位在数组IRPPG中保存 1.替换数组子集 从索引0开始替换 新数据 2.一维数组循环移位 为负表示最新的数据在数组末尾,旧数据在数组首部,也即是从右往左移位,反之亦然 输出:数据移位保存的...
  • 在练习HDLbits的时候,最常见的几种移位寄存器进行了总结,供大家参考,希望可以帮助到大家。
  • Verilog中的多维数组和存储器

    千次阅读 2021-08-01 14:24:47
    写在前面正文多维数组多维数组赋值内存寄存器变量应用实例寄存器阵列应用实例 参考资料交个朋友 写在前面 上篇博客讲了单比特的变量称为标量,多比特的变量称为向量。其实向量就类似于C或者其他语言中的一...
  • Verilog 数组的访问

    2020-11-09 22:09:51
    each port_id is 5 bits wide 一维数组,数据长度数5bit port_id[3] = 0; // Reset 3rd element (a 5-bit value) of port_id array reg [63:0] array_4d [15:0][7:0][7:0][255:0]; //Four dimensional array ...
  • 通用寄存器

    2012-10-09 22:21:18
    寄存器组由8个16位寄存器以及一个3——8线译码器构成
  • Verilog数组声明和使用时很可能会遭遇的陷阱
  • verilog REG 寄存器、向量、整数、实数、时间寄存器
  • VHDl 寄存器

    2010-11-06 21:41:40
    开放式实验CPU设计中的寄存器组实验代码
  • 存储器是一个寄存器数组。存储器使用如下方式说明: reg [ msb: 1sb] memory1 [ upper1: lower1], memory2 [upper2: lower2],. . . ; 例如: reg [0:3 ] MyMem [0:63] //MyMem为64个4位寄存器的数组。 reg Bog [1:5...
  • 今天程序在调试的时候,发现占用内存不断增大,然后跑了...反复执行该程序,可以发现,移位寄存器未初始化的数组大小在不断增大原因是移位寄存器在执行一次之后会保存上一次的值.当该vi作为子vi在循环中被反复调用时,将...
  • modbusRTU03功能码经常会用到从开始地址读取一个寄存器的值,涉及到把2个字节转换成一个数据,因为每个数据占2个字节,此处是用的16位的无符号整形数据。 for (int i=0;i<len/2;i++) //每个数据占两个字节 因此...
  • 数组清零的几种方法

    千次阅读 2016-11-09 20:00:49
    http://note.youdao.com/noteshare?id=f5593e473f8bb6c8678afd8b81ba4825
  • 方法区,本地方法区,寄存器 数组操作常见问题  数组脚标越界异常(ArrayIndexOutOfBoundsException) int[] arr = new int[2]; System.out.println(arr[3]); 访问到了数组中的不存在的脚标时发生。 ...
  • 自制数据存储部分,路径创建 说明字符串(比如日期时间)写入;for循环+移位寄存器创建随机数组,并输出图表。适合新手参考
  • 摘要:因高级语言不需要熟悉低层软件和硬件知识,所以学生有很大的学习兴趣,数组指针是C语言中的重点内容,学生们都能熟练掌握。而汇编语言因与硬件紧密相连,所以学生学习兴趣不大。为了更好的培养学生的学习兴趣...
  • 一存取周期 二:双端口RAM 多模块存储器 多体并行存储器 流水线
  • 存储器

    2020-12-09 13:47:19
    存储器是一个寄存器数组。存储器使用如下方式说明:reg [ msb: 1sb] memory1 [ upper1: lower1],memory2 [upper2: lower2],. . . ;例如:reg [0:3 ] MyMem [0:63]//MyMem为64个4位寄存器的数组。reg Bog [1:5]//Bog...
  • Integer寄存器类型

    2020-12-09 13:47:02
    msb和lsb是定义整数数组界限的常量表达式,数组界限的定义是可选的。注意容许无位界限的情况。一个整数最少容纳32位。但是具体实现可提供更多的位。下面是整数说明的实例。integer A, B, C; //三个整数型寄存器。...
  • JavaSE–内存与数组

    2020-12-21 20:34:49
    文章目录1.Java的内存:①栈内存(Stack):②堆内存(Heap):③方法区(Method Area):④本地方法栈(Native Method Stack):⑤寄存器(pc Register):2.数组1)数组是什么:2)数组的特点:3)数组的创建:I.动态初始化...
  • 数组简介如果各位猿友是一路跟着LZ看到这里的,那么数组的定义就非常简单了,它就是一个相同数据类型的数据集合。数组存储在一系列逻辑上连续的内存块当中,之所以说是逻辑上连续,是因为整个内存或者说存储器本身...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 129,690
精华内容 51,876
关键字:

寄存器数组