(转)Verilog数组表示及初始化

这里的内存模型指的是内存的行为模型。Verilog中提供了两维数组来帮助我们建立内存的行为模型。具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问。这样的数组的定义方式如下:

reg [wordsize : 0] array_name [0 : arraysize];

例如:

reg [7:0] my_memory [0:255];

其中 [7:0] 是内存的宽度,而[0:255]则是内存的深度(也就是有多少存储单元),其中宽度为8位,深度为256。地址0对应着数组中的0存储单元。

如果要存储一个值到某个单元中去,可以这样做:

my_memory [address] = data_in;

      而如果要从某个单元读出值,可以这么做:

data_out = my_memory [address];

但要是只需要读一位或者多个位,就要麻烦一点,因为Verilog不允许读/写一个位。这时,就需要使用一个变量转换一下:(wolf点评:菜鸟易犯的错误,注意!)

例如:

data_out = my_memory[address];

data_out_it_0 = data_out[0];

这里首先从一个单元里面读出数据,然后再取出读出的数据的某一位的值。

初始化内存

初 始化内存有多种方式,这里介绍的是使用$readmemb 和 $readmemh系统任务来将保存在文件中的数据填充到内存单元中去。$readmemb 和 $readmemh是类似的,只不过$readmemb用于内存的二进制表示,而$readmemh则用于内存内容的16进制表示。这里 以$readmemh系统任务来介绍。

语法

$readmemh("file_name", mem_array, start_addr, stop_addr);

注意的是:

file_name是包含数据的文本文件名,mem_array是要初始化的内存单元数组名,start_addr 和 stop_addr是可选的,指示要初始化单元的起始地址和结束地址。

下面是一个简单的例子:

module  memory ();

reg [7:0] my_memory [0:255];

initial begin

$readmemh("memory.list", my_memory);

end

endmodule

这里使用内存文件memory.list来初始化my_memory数组。

而下面就是一个内存文件的例子。

//  Comments are allowed (wolf点评:段注释也可以,空行空格不影响!)

CC         // This is first address i.e 8'h00

AA         // This is second address i.e 8'h01

@55     // Jump to new address 8'h55

5A         // This is address 8'h55

69         // This is address 8'h56

对于内存文件,要注意的是下列几点:

a、注释标记//在内存文件中是被允许的;

b、使用@符号将跳到新的目标地址,没有@符号就表示地址将顺序递增。

关于这个系统任务,有下列常见的用法:

1、顺序初始化所有的数组单元;

这种情况下,可以使用@符号来指示地址,也可以不使用它,而只在每一行存放要存放的数据。

这样数据将顺序按地址递增存放,从0地址开始。

2、只初始化部分的数组单元;

这种情况下,可以使用@符号来指示下一个要初始化的地址,然后对该地址单元进行初始化。例

如下列的内存文件就只初始化8'h00,8'h01,8'h55和8'h564个内存地址单元。

//  Comments are allowed

CC         // This is first address i.e 8'h00

AA         // This is second address i.e 8'h01

@55     // Jump to new address 8'h55

5A         // This is address 8'h55

69         // This is address 8'h56

3、只初始化数组的地址区间的一部分单元。

这个时候,还可以使用$readmemh任务的start_addr 和 stop_addr选项来指定初始化的范围。

例如,只初始化100到104这5个单元,就可以这么做:

内存文件memory.list定义为:

CC

AA

55

5A

69

Verilog数组表示及初始化的更多相关文章

  1. verilog数组定义及其初始化

    这里的内存模型指的是内存的行为模型.Verilog中提供了两维数组来帮助我们建立内存的行为模型.具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问.这 ...

  2. C语言数组空间的初始化详解

    数组空间的初始化就是为每一个标签地址赋值.按照标签逐一处理.如果我们需要为每一个内存赋值,假如有一个int a[100];我们就需要用下标为100个int类型的空间赋值.这样的工作量是非常大的,我们就 ...

  3. 关于C/C++中数组元素的初始化

      1.一维数组初始化 对于一维数组,其初始化有一个错误的观点是:一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1. 数组可 ...

  4. Java数组一定要初始化才能使用吗?

    数组是大多数编程语言提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组.Java语言的数组变量是引用类型的变量,因此具有Java独有的特性. 在正常的Java开发中,使用Ja ...

  5. C++中数组定义及初始化

    一.一维数组 静态 int array[100]; 定义了数组array,并未对数组进行初始化 静态 int array[100] = {1,2}: 定义并初始化了数组array 动态 int* ar ...

  6. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

  7. Java数组定义及初始化

    数组定义及初始化 数组这玩意是一种用于存放数据最常见数据结构. 数组的的概念及注意点 数组要求所有的数组元素具有相同的数据类型,且只能存在一种数据类型,要多专一有多专一. 数据类型既可以是基本类型也可 ...

  8. C# 、Java数组申明、初始化区别

    一.数组申明   int[] a1 int a2[] C# 支持 不支持 Java 支持 支持 二.数组申明且初始化    int[] a1 = new int[] { 2, 31 } int a1[ ...

  9. 079、Java数组之数组的静态初始化

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

随机推荐

  1. CSR1010 sdk蓝牙

    转:http://blog.csdn.net/lorain_lynies/article/details/52038640CSR1010 I/O开发须知:关于I/O操作的函数库被定义在头文件<p ...

  2. Plist文件与数据解析

    综述 初步阶段当我们做个需要点数据的练习时(比如购物商品展示),我们可能是将数据直接写在代码中,比如说定义一个字符串数组或存放字典的数组.但这其实并不是一种合理的做法.因为如果当数据修改的时候,就要经 ...

  3. Java远程执行Shell命令

    1. Jar包:ganymed-ssh2-build210.jar 2. 步骤: a) 连接: Connection conn = new Connection(ipAddr); conn.conne ...

  4. CentOS防火墙iptables-config的相关配置参数详解

    默认/etc/sysoncifg/iptables-config的配置内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 ...

  5. java中大数类的学习

    java中提供了大数类BigInteger和BigDecimal分别表示大整数类和大浮点数类,这两个类都在java.math.*包中,因此每次必须在开头处引用该包. 一.BigInteger构造函数: ...

  6. QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)

    http://blog.csdn.net/wangwei890702/article/details/8552482 QT:渐变 渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象.Qt提供了一 ...

  7. Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W ...

  8. Python 正则表达式匹配小数

    不废话,直接上表达式 (\d+(\.\d+)?) 如: import re find_float = lambda x: re.search("\d+(\.\d+)?",x) .g ...

  9. DataWarehouse- 从面试定位自己的水平

    1.讲一下什么是维度表和事实表.用户资料表算是什么类型表. 2. 维度建模属于第几范式,让你对维度建模改进,有什么思路吗. 3. 了解数据血缘分析吗,让你实现的话有什么技术方案,感觉难点在哪. 4. ...

  10. SSIS的控制流之Foreach循环容器和序列容器

    上一篇介绍了For循环容器的使用.本篇将介绍Foreach循环容器和序列容器的使用. Foreach循环容器 Foreach循环容器定义包中的控制流.其循环的实现类似于编程语言中的Foreach循环结 ...