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 给数组集体赋值_Verilog中如何对数组赋值(存储器memory详解)相关推荐

  1. js 浅拷贝直接赋值_JS中实现浅拷贝和深拷贝的代码详解

    (一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中的表现形式在于:前者是存储在栈中的一些简单的数据段,后者则是保存在堆内存中的一个对象. ...

  2. pythonbool类型数组生成_对numpy中布尔型数组的处理方法详解

    布尔数组的操作方式主要有两种,any用于查看数组中是否有True的值,而all则用于查看数组是否全都是True. 如果用于计算的时候,布尔量会被转换成1和0,True转换成1,False转换成0.通过 ...

  3. springMVC注解中@RequestMapping中常用参数value params 以及@RequestParam 详解

    转载自 https://blog.csdn.net/qq_35067322/article/details/52811300?locationNum=9&fps=1 https://www.c ...

  4. python中的class怎么用_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  5. python中class变量_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  6. python复制列表元素_Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解...

    Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅 ...

  7. python中append函数解析_对python中的pop函数和append函数详解

    对python中的pop函数和append函数详解 pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list. ...

  8. Matlab中的FCM算法代码及中文详解

    Matlab中的FCM算法代码及中文详解 转自:http://xiaozu.renren.com/xiaozu/106512/336681453 function [center, U, obj_fc ...

  9. props传递对象_vue组件中使用props传递数据的实例详解

    在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递.父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息.看看它们是怎么工作的. 一.基本用法 组件不仅仅是 ...

最新文章

  1. 中国人工智能AI框架自主研发
  2. 如何从字符串中删除文本?
  3. 设计模式C++实现(4)——单例模式
  4. System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”...
  5. 笔记2深度学习 梯度和梯度法
  6. 【自适应盲均衡3】多模算法(MMA)——复数改进常模算法(MCMA)的理论推导与MATLAB仿真
  7. 莱斯大学找到了多被提升3G/4G网络性能的方法
  8. Web-HTML特殊符号的表示
  9. Python如何在循环语句中加入两个变量_Python基础知识
  10. php将开始日期与结束日期组成数组,php根据开始日期和结束日期得到时间数组
  11. 我的压缩软件选择:7zip软件+Zip格式
  12. xlsx文件打开乱码_excel打不开xlsx文件怎么办 excel打开xlsx文件乱码怎么解决
  13. java初中级程序员面试宝典-蚂蚁课堂
  14. python随机密码生成代码大全_Python实现随机密码生成器
  15. 解决thinkpad sl410 evc windows7硬盘安装ubuntu12.04以后,windows 无线出现断开网速慢等问题
  16. U大师U盘装系统——启动U盘制作(V1.2.0版)
  17. C/C++ | 23-12 用指针的方法,将字符串“ABCD1234efgh”前后对调显示
  18. 【技术邻】CAE工程师崩溃的10个瞬间
  19. Rust简短笔记:原始指针(Raw Pointer)
  20. MySQL(入门篇18)SQLyog 的用户权限管理 ; SQL语句的用户权限管理。

热门文章

  1. 即构科技:解决行业痛点,以MSDN为基础构建全球实时音视频通信云
  2. 从编解码、传输到基础架构 详解Bigo多媒体技术栈
  3. x265与SVT-HEVC现已合二为一
  4. LiveVideoStackCon讲师热身分享 ( 三 ) —— Facebook的工具文化与多媒体QoE
  5. 腾讯运维技术专家集结,揭秘高效智能运维 | 沙龙报名中
  6. linux ngx listen的解析
  7. 面试官:看你简历写了熟悉Kafka,它为什么速度会这么快?
  8. ubuntu 16.04 usb转串口
  9. Vue中的 computed 和 watch的区别
  10. Spark _23 _读取parquet文件创建DataFrame(二)