Verilog中寄存器和储存器的建模
寄存器
寄存器是数据储存单元的抽象。寄存器数据类型的关键字是reg。通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。reg类型数据的缺省初始值为不定值:x。寄存器型变量只能在initial或always内部被赋值。
reg型数据常用来表示用于“always”模块内的指定信号,常代表触发器。通常,在设计中要由“always”块通过使用行为描述语句来表达逻辑关系。在“always”块内被赋值的每一个信号都必须定义成reg型。
reg型数据的格式如下:
reg [n-1:0] 数据名1,数据名2,… 数据名i;
reg [n:1] 数据名1,数据名2,… 数据名i;
reg是reg型数据的确认标识符,[n-1:0]和[n:1]代表该数据的位宽,即该数据有几位(bit)。最后跟着的是数据的名字。如果一次定义多个数据,数据名之间用逗号隔开。声明语句的最后要用分号表示语句结束。如下:
reg rega; //定义了一个一位的名为rega的reg型数据
reg [3:0] regb; //定义了一个四位的名为regb的reg型数据
reg [4:1] regc, regd; //定义了两个四位的名为regc和regd的reg型数据
储存器
Verilog HDL通过对reg型变量建立数组来对存储器建模,可以描述RAM型存储器,ROM存储器和reg文件。数组中的每一个单元通过一个数组索引进行寻址。在Verilog语言中没有多维数组存在。 memory型数据是通过扩展reg型数据的地址范围来生成的。其格式如下:
reg [n-1:0] 存储器名[m-1:0];
或 reg [n-1:0] 存储器名[m:1];
其中reg[n-1:0]定义了存储器中每一个存储单元的大小,即该存储单元是一个n位的寄存器。存储器名后的[m-1:0]或[m:1]则定义了该存储器中有多少个这样的寄存器。最后用分号结束定义语句。下面举例说明:
reg [7:0] mema[255:0];
这个例子定义了一个名为mema的存储器,该存储器有256个8位的存储器。该存储器的地址范围是0到255。注意:对存储器进行地址索引的表达式必须是常数表达式。
另外,在同一个数据类型声明语句里,可以同时定义存储器型数据和reg型数据。见下例:
parameter wordsize=16, //定义二个参数
memsize=256;
reg [wordsize-1:0] mem[memsize-1:0], writereg, readreg;
尽管memory型数据和reg型数据的定义格式很相似,但要注意其不同之处。如一个由n个1位寄存器构成的存储器组是不同于一个n位的寄存器的。见下例:
reg [n-1:0] rega; //一个n位的寄存器
reg mema [n-1:0]; //一个由n个1位寄存器构成的存储器组
一个n位的寄存器可以在一条赋值语句里进行赋值,而一个完整的存储器则不行。见下例:
rega =0; //合法赋值语句
mema =0; //非法赋值语句
如果想对memory中的存储单元进行读写操作,必须指定该单元在存储器中的地址。下面的写法是正确的。
mema[3]=0; //给memory中的第3个存储单元赋值为0。
进行寻址的地址索引可以是表达式,这样就可以对存储器中的不同单元进行操作。表达式的值可以取决于电路中其它的寄存器的值。例如可以用一个加法计数器来做RAM的地址索引。
Verilog中寄存器和储存器的建模相关推荐
- FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?
前言 Verilog中的二维数组很有用,可以使用for以及generate for配合二维数组进行使用,可以代替大量寄存器的场合,其实大量同类寄存器可以使用存储器进行代替,Verilog中可以使用二维 ...
- Verilog中基本的数据类型
Verilog中共有19种数据类型. 基本的四种类型: reg型.wire型.integer型.parameter型. 其他类型:large型.medium型.small型.scalared型.tim ...
- Verilog 中 wire 和 reg 数据类型区别
两者差别很大,完全不能取消. 在Verilog中,wire永远是wire,就是相当于一条连线,用来连接电路,不能存储数据,无驱动能力,是组合逻辑,只能在assign左侧赋值,不能在always @ 中 ...
- Verilog中wire与reg类型的区别
这是事转载的一篇文章,觉得不错,虽然中间有点小错误. wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号.模块的输入输出端口类型都默认为wire型.默认初始值 ...
- Verilog中wire与reg类型的区别(转载自http://www.cnblogs.com/farbeyond/p/5204586.html)
wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号.模块的输入输出端口类型都默认为wire型.默认初始值是z. reg型表示的寄存器类型.always模块内被 ...
- verilog 中的可综合与不可综合
一.什么是综合? Verilog HDL或VHDL都只是一种硬件的描述语言,并且允许在不同的抽象层次上对电路进行建模.VerilogHDL侧重于电路级,可以在门级和寄存器传输级(RTL)描述硬件,也可 ...
- Verilog中 reg和wire 用法 以及always和assign的区别
1.从仿真角度来说,HDL语言面对的是编译器,相当于使用软件思路,此时: wire对应于连续赋值,如assign: reg对应于过程赋值,如always,initial: 2.从综合角度,HDL语言面 ...
- Verilog初级教程(5)Verilog中的多维数组和存储器
博文目录 写在前面 正文 多维数组 多维数组赋值 内存 寄存器变量应用实例 寄存器阵列应用实例 参考资料 交个朋友 写在前面 上篇博客讲了单比特的变量称为标量,多比特的变量称为向量.其实向量就类似于C ...
- Verilog中reg和SystemVerilog中logic的区别
关于reg和logic的区别,在SystemVerilog验证测试平台编写指南中有所提出,如下所示: SystemVerilog对经典的reg数据类型进行了改进,使得他除了作为一个变量以外,还可以被连 ...
最新文章
- WaitForMultipleObjects用法详解,一看就懂
- 三个彩灯循环点亮程序_近百组彩灯点亮江畔,义渡灯会正式亮灯啦
- AR-关于几种特殊的收款方式说明
- 2018 年最受欢迎的15个顶级 Python 库
- ORACLE中关于外键缺少索引的探讨和总结
- 国家邮政局:9月份全国快递服务企业业务收入完成921.4亿元,同比增长11.8%
- POJ - 3046 多重集组合数问题的线性DP(四种方法)
- 全靠阿里十年软测工程师的软测面试笔记,成功拿下12家大厂offer
- Determining if ip address is already in use for device eth0
- 科睿唯安官网更新SCI期刊列表,慎投2月已被剔除期刊
- windows下svn server的安装和配置
- 初中动画flash作品_初中Flash动画设计基础知识试题及答案.doc
- 简约大气毕业论文答辩PPT模板
- 05 mapABC示例 leo
- 安徽自招计算机基础考试试题,点划自招|东南大学、中国药大2017年自主招生考情揭秘,附真题。...
- 一次性加载数据,前端分页
- C语言编程练习:打印九九口诀表
- 微信小程序:设置字体跟随手机系统
- Django 使用不同配置文件的三种方式
- 由《对应届和即将应届毕业生的忠告》想到的