寄存器

寄存器是数据储存单元的抽象。寄存器数据类型的关键字是reg。通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。reg类型数据的缺省初始值为不定值:x。寄存器型变量只能在initialalways内部被赋值。

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中寄存器和储存器的建模相关推荐

  1. FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?

    前言 Verilog中的二维数组很有用,可以使用for以及generate for配合二维数组进行使用,可以代替大量寄存器的场合,其实大量同类寄存器可以使用存储器进行代替,Verilog中可以使用二维 ...

  2. Verilog中基本的数据类型

    Verilog中共有19种数据类型. 基本的四种类型: reg型.wire型.integer型.parameter型. 其他类型:large型.medium型.small型.scalared型.tim ...

  3. Verilog 中 wire 和 reg 数据类型区别

    两者差别很大,完全不能取消. 在Verilog中,wire永远是wire,就是相当于一条连线,用来连接电路,不能存储数据,无驱动能力,是组合逻辑,只能在assign左侧赋值,不能在always @ 中 ...

  4. Verilog中wire与reg类型的区别

    这是事转载的一篇文章,觉得不错,虽然中间有点小错误. wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号.模块的输入输出端口类型都默认为wire型.默认初始值 ...

  5. Verilog中wire与reg类型的区别(转载自http://www.cnblogs.com/farbeyond/p/5204586.html)

    wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号.模块的输入输出端口类型都默认为wire型.默认初始值是z. reg型表示的寄存器类型.always模块内被 ...

  6. verilog 中的可综合与不可综合

    一.什么是综合? Verilog HDL或VHDL都只是一种硬件的描述语言,并且允许在不同的抽象层次上对电路进行建模.VerilogHDL侧重于电路级,可以在门级和寄存器传输级(RTL)描述硬件,也可 ...

  7. Verilog中 reg和wire 用法 以及always和assign的区别

    1.从仿真角度来说,HDL语言面对的是编译器,相当于使用软件思路,此时: wire对应于连续赋值,如assign: reg对应于过程赋值,如always,initial: 2.从综合角度,HDL语言面 ...

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

    博文目录 写在前面 正文 多维数组 多维数组赋值 内存 寄存器变量应用实例 寄存器阵列应用实例 参考资料 交个朋友 写在前面 上篇博客讲了单比特的变量称为标量,多比特的变量称为向量.其实向量就类似于C ...

  9. Verilog中reg和SystemVerilog中logic的区别

    关于reg和logic的区别,在SystemVerilog验证测试平台编写指南中有所提出,如下所示: SystemVerilog对经典的reg数据类型进行了改进,使得他除了作为一个变量以外,还可以被连 ...

最新文章

  1. WaitForMultipleObjects用法详解,一看就懂
  2. 三个彩灯循环点亮程序_近百组彩灯点亮江畔,义渡灯会正式亮灯啦
  3. AR-关于几种特殊的收款方式说明
  4. 2018 年最受欢迎的15个顶级 Python 库
  5. ORACLE中关于外键缺少索引的探讨和总结
  6. 国家邮政局:9月份全国快递服务企业业务收入完成921.4亿元,同比增长11.8%
  7. POJ - 3046 多重集组合数问题的线性DP(四种方法)
  8. 全靠阿里十年软测工程师的软测面试笔记,成功拿下12家大厂offer
  9. Determining if ip address is already in use for device eth0
  10. 科睿唯安官网更新SCI期刊列表,慎投2月已被剔除期刊
  11. windows下svn server的安装和配置
  12. 初中动画flash作品_初中Flash动画设计基础知识试题及答案.doc
  13. 简约大气毕业论文答辩PPT模板
  14. 05 mapABC示例 leo
  15. 安徽自招计算机基础考试试题,点划自招|东南大学、中国药大2017年自主招生考情揭秘,附真题。...
  16. 一次性加载数据,前端分页
  17. C语言编程练习:打印九九口诀表
  18. 微信小程序:设置字体跟随手机系统
  19. Django 使用不同配置文件的三种方式
  20. 由《对应届和即将应届毕业生的忠告》想到的

热门文章

  1. Unity粒子系统基本
  2. linux 软件安装笔记
  3. STM32下载中出现Flash Download failed - Target DLL has been cancelled报错
  4. 弘辽科技:淘宝商家群是怎么划分层级的?
  5. 怎么看cf的服务器在哪个文件夹,cf录像在哪个文件夹
  6. iOS中根据网络环境显示不同图片
  7. 2020年技术领导者需要关注的5个关键领域
  8. python海龟绘图教程自学网_通过海龟绘图学习Python-01
  9. uniapp 蓝牙连接测温仪
  10. [菜鸟训练]347. 前 K 个高频元素