Memory型数据、多维数组以及合并数组的辨析

在学习数字电路和Verilog HDL的过程中,相信大家一定遇到过Memory型数据、多维数组以及合并数组,有时候就会傻傻分不清三者的区别,我也碰到过,所以就简单记录一下自己的认识,如果大家有好的更好的见解,欢迎交流。

1、bit(比特/位)、byte(字节)、word(字)

这三者是大家常见的概念。因为计算机cpu无法直接处理模拟信号,一般采集的模拟信号都是先经过AD转换成二进制数据,然后再由cpu处理。二进制数据的表现形式就是0、1序列,比如1001。到这儿你可能会问,1001与分析上面三者有什么关系?答案是,有的。

具体来看,1001有4bit,从最高位第3位到最低位第0位分别为1、0、0、1,即1001位宽为4。而在计算机中,有如下的关系:

字(word):1字 = 2 字节,即1word = 2byte

字节(byte):1字节 = 8 位,即1byte = 8bit;

1个字的字长(字的长度)为16,1个字节的长度为8。字节是通过网络传输信息(或在硬盘或内存中存储信息),计算机数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特(1Byte=8bit)。八位二进制数最小为00000000,最大为11111111;通常1个字节可以存入一个ASCII码,2个字节可以存放一个汉字国标码。一个ASCII码就是一个字节, 因为ASCII码的二进制范围是00000000到11111111, 十进制范围是0到255,具体的ASCII码与二进制数、十进制数的对应关系,感兴趣的可以问度娘。

值得赘述的是,一般来讲,一个英文字母占一个字节,一个汉字国标码占两个字节。

2、Memory型数据

在数字ICer的学习和工作的过程中,除了常见的reg,wire类型的数据,memory类型的数据也时常伴随我们。相信大家在学习或者工作中或多或少接触过RAM,RAM的数据不仅有宽度(Width),还有深度(Depth),但Verilog之前没有多维数组的概念,怎么办呢?总不能破罐子破摔,放弃治疗吧,毕竟Verilog为数字电路设计这个家付出了太多,治治还是能处的。所以,在Verilog中寄存器类型变量reg建立数组来对RAM建模,具体的,memory型数据是通过扩展reg型数据的地址范围来生成的。下面我们就展开来看看。

图1 RAM模型

 图1表示我们常见的一个8*8的RAM的模型,它的深度为8,宽度也为8,可以存储64bit的数据。我们平时定义reg数据形式为:

reg [n-1:0] data

它的地址是唯一的,所以缺省。但是RAM的数据有两个维度即宽度和深度,我们如果依旧想用Verilog,自然可以利用地址项来扩展维度,从而表示RAM:

reg [n-1:0] mema [m-1:0]

这就可以完美表示RAM了。上式中reg [n-1:0]表示RAM中每个存储单元的大小,即该存储单元是一个n位的寄存器,[m-1:0]则定义了该存储器中有多少个这样的寄存器。图1中的RAM可以表示为reg [7:0] data [2:0]

3、多维数组

为了更加高效快捷的验证电路设计,在Verilog HDL的基础上引入C++面向对象的特性,形成一门更具有抽象能力的语言——System Verilog(以下简称SV),其中一点就是SV添加了多维数组的概念。具体来看,int\quad array1\quad [1:0]\[3:0],第1个维度为2,第二个维度为4,也可以理解为一个2行4列共8个元素的数组,如下图所示。

  图2 多维数组

 4、合并数组

某些时候,我们既想将该数据看作整体进行访问,也可以将他分解为更小的单元。比如一个32bit的寄存器,有时候需要将其看作4个8bit的数据,有时候又需要将其看成更小的单个无符号数据,SV中的合并数组就可以实现这个功能。如

bit\quad [3:0]\[7:0]\quad bytes;\\ \quad bytes\ =\ 32`hCafeDada;

其中每2个字母组成1个字节,4个字节组成32bit。bytes[3]取第3个字节Ca,bytes[3][7]则取第3个字节的第7位1,为什么是1呢?实际上是"C"展开1100的最高位。

此处大家可能还有一个疑惑,不是说一个英文字母占1个字节?为什么这儿2个字母组成1个字节?

因为A-F分别对应4位二进制数1010、1011到1111,所以说它们可以用4bit就可以表示啦。

至此,我们已经讲完了Memory、多维数组、合并数组的概念,回头再看,发现Memory是因为Verilog中基于reg扩展得到的数据类型,而多维数组和合并数组则是SV中的数据类型,合并数组是为了灵活的看待某些数据,可以将其看作一个整体,又可以将其看作更小的单元。多维数组包括合并和非合并数组,我们只分析了合并数组,二者的具体关系此处不做具体展开,有兴趣可以看合并数组和非合并数组

最后,如果有不正确的地方,欢迎大家指正。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值