0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog中的二维数组说明

电子工程师 来源:FPGA设计论坛 作者:FPGA设计论坛 2020-09-28 11:35 次阅读

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和readmemb和readmemh系统任务来将保存在文件中的数据填充到内存单元中去。readmemb和readmemb和readmemh是类似的,只不过readmemb用于内存的二进制表示,而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
    +关注

    关注

    28

    文章

    1351

    浏览量

    110124
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25960

原文标题:Verilog中的二维数组及其初始化

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RS232接口的二维影像扫描引擎,广泛用在医疗设备上扫一二维

    在医疗设备领域,二维码的应用日益广泛,它作为信息的快速传递和识别手段,为医疗管理、患者追踪、设备维护等环节带来了极大的便利。而在这背后,RS232接口的二维影像扫描引擎扮演着至关重要的角色,它以
    的头像 发表于 12-23 16:02 105次阅读
    RS232接口的<b class='flag-5'>二维</b>影像扫描引擎,广泛用在医疗设备上扫一<b class='flag-5'>维</b><b class='flag-5'>二维</b>码

    二维内嵌扫码模组用于自助储物柜,快速扫描各种一二维条码

    随着科技的飞速发展,自助储物柜已成为我们日常生活不可或缺的一部分,为公众提供了极大的便利。而这一切的背后,离不开二维内嵌扫码模组的强大支持。本文将深入探讨二维内嵌扫码模组在自助储物柜
    的头像 发表于 12-04 15:56 119次阅读
    <b class='flag-5'>二维</b>内嵌扫码模组用于自助储物柜,快速扫描各种一<b class='flag-5'>维</b><b class='flag-5'>二维</b>条码

    指针数组二维数组有没有区别

    指针数组二维数组有没有区别?比如这样的两个代码。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的头像 发表于 11-24 11:12 158次阅读

    工业二维码读码器在电子制造业的应用

    工业二维码读码器在电子制造业的应用主要体现在以下几个方面:▲生产追溯管理工业二维码读码器通过对电子产品上的二维码进行快速扫描,实现了高效、准确的生产追溯管理。每件电子产品上都会有一个
    的头像 发表于 11-13 16:19 199次阅读
    工业<b class='flag-5'>二维</b>码读码器在电子制造业<b class='flag-5'>中</b>的应用

    二维码识读设备有哪些类型

    随着二维码应用的日益普及,各类二维码识读设备也应运而生。这些设备不仅极大地方便了我们的日常生活,也为企业提供了更加高效便捷的服务。那么,你知道二维码识读设备都有哪些类型吗?让我们一起来了解一下。据
    的头像 发表于 11-05 16:10 207次阅读
    <b class='flag-5'>二维</b>码识读设备有哪些类型

    labview按行读取二维数组之后再按读取顺序重新组成二维数组如何实现?

    labview用了index Array按索引一行行读取二维数组之后想再按读取顺序重新组成一个二维数组如何实现,即第一次读取的作为第一行,第
    发表于 10-25 21:06

    请问labview是否无法向matlab传递3数组

    经过一些测试,发现在matlab script只能传二维数组,利用打包.net库,好像还是只能传递二维数组。 是不是从底层就不支持,这两种
    发表于 10-22 20:14

    二维扫描PDA用于仓库管理

    在现代物流与仓储行业的快速发展二维扫描PDA作为一项革命性威廉希尔官方网站 ,正逐步成为仓库管理的核心工具。其卓越的信息化与自动化能力,不仅重塑了仓库作业流程,更在提升工作效率、确保管理精度方面展现出无可比拟
    的头像 发表于 09-10 14:22 241次阅读
    <b class='flag-5'>二维</b>扫描PDA用于仓库管理

    FPC软板二维码标识功能?简直是黑科技!

    现在的黑科技是越来越多了,板子上印个二维码用手机扫一下就能将 将二维码变成你的电子产品说明书,用来介绍产品功能;呈现教学视频, 个人觉得图文二维码的功能十分丰富,不仅拥有产品溯源与出入
    发表于 08-07 17:46

    Labview生成二维

     Labview 的一个Demo,生成二维码。
    发表于 08-01 17:12 7次下载

    二维码扫码器/二维码读取设备嵌入园区闸机系统的应用

    二维码阅读设备集成至闸机系统,主要功能是通过扫描用户的二维码通行证来实施园区出入口的自动收费。此威廉希尔官方网站 凭借二维码的便利性及扫描设备的高效性,极大地提高了收费效率和精确度,减少了由于人
    的头像 发表于 06-05 14:46 369次阅读
    <b class='flag-5'>二维</b>码扫码器/<b class='flag-5'>二维</b>码读取设备嵌入园区闸机系统<b class='flag-5'>中</b>的应用

    威廉希尔官方网站 |二维PDOA平面定位方案

    一、方案概述二维平面定位系统,采用UWB定位威廉希尔官方网站 ,精度可到30cm。通过PDOA算法,可实现单基站二维平面的实时人员定位,增强对危险区域的管控,有效预防安全事故发生。面对突发情况,能做到及时报警响应
    的头像 发表于 06-04 14:53 951次阅读
    威廉希尔官方网站
|<b class='flag-5'>二维</b>PDOA平面定位方案

    二维PDMA可以使用描述符链吗?

    我正在尝试使用二维描述符连锁。 编写了一些二维描述符链的代码。 但我有一些疑问,比如 1.二维 PDMA 可以使用描述符链吗? 2.如果 1 是,请附上一些代码 我们是否可以使用 2 个结构或只使用 1 个结构即可。
    发表于 05-31 08:16

    数组的转换到二维数组后的行列增减问题

    请大佬指点,如VI,两个求助点: 1、一数组大小,在停止Vi前把数组大小增加到4,在循环外设置了一数组的行数为0了,为啥再次运行VI后,
    发表于 05-11 00:25

    远距离二维码扫描器如何选择?看看以下三款远距离二维码扫码模块

    随着二维码相关威廉希尔官方网站 及硬件的普及与低成本化,二维条码扫描设备的应用被人们广为熟知,应用的行业也众多。然而,在某些场景,由于需要远距离扫描二维码(条码远距离识别),传统的扫码设备已经无法
    的头像 发表于 03-21 15:41 709次阅读
    远距离<b class='flag-5'>二维</b>码扫描器如何选择?看看以下三款远距离<b class='flag-5'>二维</b>码扫码模块