请选择 进入手机版 | 继续访问电脑版

明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 251406|回复: 0

Verilog中数组的表示

[复制链接]
发表于 2020-4-9 10:36:57 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

FPGA中的二维数组其实不是真正意义上的数组,而是由多个寄存器组成的ROM或RAM。


具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问。

这样的数组定义方式如下:
reg [wordsize : 0]  memory_name [0 : memorysize];
其中[wordsize : 0]是内存的宽度,而 [0 : memorysize]则是内存的深度(也就是有多少存储单元)。


如果要存储一个值到某个单元中去,可以这样做:
memory_name [address] = data_in;


如果要读取每个单元的值,可以这么做:
data_out = memory_name [address];


由于Verilog不允许读/写一个位,所以需要读写一位或者多个位时的操作要麻烦点:
data_out = memory_name [address];
data_out_0 = data_out [0];
这里首先从一个单元读出数据,然后再取出数据的某一位的值。

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

语法:

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

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

如果对寄存器组进行在复位得时候进行置0,可以参考如何往寄存器组中写入数据



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-3-28 20:44 , Processed in 0.046926 second(s), 20 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表