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
    +关注

    关注

    31

    文章

    1374

    浏览量

    114712
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27459

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    瑞芯微(EASY EAI)RV1126B 二维码生成

    1.二维码简介二维码又称二维条码,常见的二维码为QRCode,QR全称QuickResponse,是一个近几年来移动设备上超流行的一种编码方式,它比传统的BarCode条形码能存更多的
    的头像 发表于 04-08 10:48 136次阅读
    瑞芯微(EASY EAI)RV1126B <b class='flag-5'>二维</b>码生成

    [VirtualLab] 二维叉形光栅产生涡旋光阵列

    VirtualLab Fusion的光栅套装工具,可便捷地分析光栅各衍射级次的强度、相位及复振幅分布,极大提升了设计效率与仿真精度。 本案例不仅验证了二维叉形光栅在涡旋光束生成的高效性与灵活性,也为光通信
    发表于 04-01 09:15

    有哪些常见的二维码模组类型?

    二维码模组是集成了扫描引擎、解码芯片、光学组件的核心模块(也叫二维码模块),可直接嵌入自助终端、工业PDA、智能闸机等设备,实现二维码的快速识别与数据传输。其常见类型可按安装方式、扫描原理、通信接口
    的头像 发表于 01-24 00:00 927次阅读
    有哪些常见的<b class='flag-5'>二维</b>码模组类型?

    二维影像扫描引擎在门禁二维码刷卡梯控行业的应用

    在当今科技日新月异的时代,二维影像扫描引擎以其卓越的识别性能和广泛的应用领域,成为了门禁系统不可或缺的重要组成部分,尤其在二维码刷卡梯控行业展现出了非凡的价值。本文将深入探讨
    的头像 发表于 12-17 15:42 483次阅读
    <b class='flag-5'>二维</b>影像扫描引擎在门禁<b class='flag-5'>二维</b>码刷卡梯控行业<b class='flag-5'>中</b>的应用

    二维数组介绍

    ] = { {1, 2,3}, {4, 5,6},{7, 8, 9}};array[1][1] = 5; 或许你以为在内存 array 数组会像一个二维矩阵: 123456789 可实际上它是这样
    发表于 11-25 07:42

    门禁二维码扫描模块使用哪个产品合适?

    在现代门禁系统二维码扫描模块的选择至关重要。它不仅关系到门禁管理的效率,还影响着用户的使用体验。那么,究竟哪款产品更适合作为门禁二维码扫描模块呢?答案是新大陆FM25-Std二维
    的头像 发表于 09-16 15:30 858次阅读
    门禁<b class='flag-5'>二维</b>码扫描模块使用哪个产品合适?

    中航光电推出二维FA光纤阵列组件

    中航光电研制的二维FA光纤阵列组件作为OCS光交换设备的关键组件,用于实现阵列光信号的输入和输出功能;该组件集成了二维光纤阵列和二维透镜阵列,通过者的精确耦合对准,实现准直光束的稳定
    的头像 发表于 09-10 18:19 2844次阅读

    哪款二维码模组适合嵌入户外取餐柜,用于扫二维

    在智能取餐柜普及的当下,二维码模组作为核心交互组件,其性能直接影响用户体验与设备稳定性。针对户外场景的特殊需求,深圳远景达物联网推出的LV4300Pro系列二维码模组,凭借工业级设计与场景化技术优化
    的头像 发表于 09-10 15:00 732次阅读
    哪款<b class='flag-5'>二维</b>码模组适合嵌入户外取餐柜,用于扫<b class='flag-5'>二维</b>码

    【嘉楠堪智K230开发板试用体验】+二维码识别

    二维码识别 二维码识别本质上是一个通过图像处理技术定位并矫正图像二维码区域,然后根据其特定编码规则读取黑白模块的进制数据,并利用内置的
    发表于 08-22 20:16

    世界首台非硅二维材料计算机问世 二维材料是什么?二维材料的核心特征解读

    据外媒报道;美国宾夕法尼亚州立大学团队在《自然》杂志发表研究成果,首次利用原子级厚度的二维材料(非硅)成功研制出功能完整的计算机,标志着新型电子设备开发的重要进展。这是一项突破性成果;首次利用二维
    的头像 发表于 06-12 15:25 2021次阅读

    基于STM32的二维码识别源码+二维码解码库lib

    基于STM32的二维码识别源码+二维码解码库lib,推荐下载!
    发表于 05-28 22:04

    基于LockAI视觉识别模块:C++二维码识别

    。 1.2 二维码识别步骤 二维码识别主要通过两个步骤完成:图像捕捉和解码。 图像捕捉:使用设备摄像头拍摄包含二维码的图像。 解码:软件处理图像,定位并读取二维
    发表于 05-26 09:57

    基于STM32的二维码识别源码+二维码解码库lib

    基于STM32的二维码识别源码+二维码解码库lib项目实例下载! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-23 20:45

    JCMsuite二维光栅的定义和仿真

    光栅是光衍射的周期性结构。它能把入射的光束衍射成几束向不同方向发散的光束。 二维光栅 二维光栅在两个水平方向上都具有周期性。存在两个晶格矢量因此当几何结构移位一个晶格矢量时, 下图显示了一个正方形
    发表于 05-19 08:53

    基于RK3576开发板的二维码生成

    档介绍了如何快速上手二维码生成,包括源码工程下载、开发环境搭建、例程编译与运行。通过EASY-EAI API,用户可轻松生成二维码图片,API封装了二维码生成工具,提供了详细的调用说明
    的头像 发表于 05-10 15:19 1224次阅读
    基于RK3576开发板的<b class='flag-5'>二维</b>码生成