Verilog初级教程(5)Verilog中的多维数组和存储器 您所在的位置:网站首页 fpga中rtl Verilog初级教程(5)Verilog中的多维数组和存储器

Verilog初级教程(5)Verilog中的多维数组和存储器

#Verilog初级教程(5)Verilog中的多维数组和存储器| 来源: 网络整理| 查看: 265

博文目录 写在前面正文多维数组多维数组赋值内存寄存器变量应用实例寄存器阵列应用实例 参考资料交个朋友

写在前面

上篇博客讲了单比特的变量称为标量,多比特的变量称为向量。其实向量就类似于C或者其他语言中的一维数组,如果是reg类型的变量,对应的硬件逻辑是寄存器。 本篇博文进一步延伸,Verilog中也存在多维数组,它对应的硬件逻辑可以是存储器,诸如RAM,ROM,以及FIFO等。 存储器

个人微信公众号: FPGA LAB 正文 多维数组

还是简单一些说吧,多维数组在Verilog中对应的硬件元素可以是存储器,向量,也即一维数组,可以认为是深度为0的二维数组。 由于能对应于硬件的数组,例如RAM,通常有这么几个参数,深度,宽度,因此我们一般做到二维数组,当然更多维的不是不可以,不违背语法,但用途极为有限。

例如:

reg y1 [11:0]; // y is an scalar reg array of depth=12, each 1-bit wide wire [0:7] y2 [3:0] // y is an 8-bit vector net with a depth of 4 reg [7:0] y3 [0:1][0:3]; // y is a 2D array rows=2,cols=4 each 8-bit wide

y1是一个reg类型的数组,其深度为12,宽度为1; y2是一个wire类型的数组,其深度为4,宽度为8; y3是一个多维(三维)数组,其意义不在多说。

上面的第二位定义,我们需要强调一下,还是统一规则为好,也就是宽度最好是高位在左,低位在右。 例如:

reg [0:0] y1 [11:0]; // y is an scalar reg array of depth=12, each 1-bit wide wire [7:0] y2 [3:0] // y is an 8-bit vector net with a depth of 4 多维数组赋值

对于多维数组赋值,也就是对存储器赋值,我们不能像如下方式:

reg [7:0] a [15:0] = 0;

这种方式是错误的,我们需要选中对应的元素进行赋值,例如:

reg [7:0] a [15:0]; initial begin a[0] = 16'h0000; a[1] = 16'h0101; //.......or a[0][0] = 1'b0; a[0][1] = 1'b1; //......or for(integer i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有