网站大量收购闲置独家精品文档,联系QQ:2885784924

verilog内存建模..doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
verilog内存建模.

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不允许读/写一个位。这时,就需要使用一个变量转换一下: 例如: 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 CC // This is first address i.e 8h00 AA // This is second address i.e 8h01 @55 // Jump to new address 8h55 5A // This is address 8h55 69 // This is address 8h56 对于内存文件,要注意的是下列几点: (1) 注释标记//在内存文件中是被允许的; (2) 使用@符号将跳到新的目标地址,没有@符号就表示地址将顺序递增。 关于这个系统任务,有下列常见的用法: (1) 顺序初始化所有的数组单元; 这种情况下,可以使用@符号来指示地址,也可以不使用它,而只在每一行存放要存放的数据。 这样数据将顺序按地址递增存放,从0地址开始。 (2) 只初始化部分的数组单元; 这种情况下,可以使用@符号来指示下一个要初始化的地址,然后对该地址单元进行初始化。例 如下列的内存文件就只初始化8h00,8h01,8h55和8h564个内存地址单元。 // Comments are allowed CC // This is first address i.e 8h00 AA // This is second address i.e 8h01 @55 // Jump to new address 8h55 5A // This is address 8h55 69 // This is address 8h56 (3) 只初始化数组的地址区间的一部分单元。 这个

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档