北大Verilog课件--16Verilog存储器设计

北大Verilog课件--16Verilog存储器设计

ID:37501542

大小:278.31 KB

页数:12页

时间:2019-05-12

北大Verilog课件--16Verilog存储器设计_第1页
北大Verilog课件--16Verilog存储器设计_第2页
北大Verilog课件--16Verilog存储器设计_第3页
北大Verilog课件--16Verilog存储器设计_第4页
北大Verilog课件--16Verilog存储器设计_第5页
资源描述:

《北大Verilog课件--16Verilog存储器设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、数字集成电路设计入门--从HDL到版图于敦山北大微电子学系第16章存储器建模学习内容:如何描述存储器如何描述双向端口存储器件建模描述存储器必须做两件事:说明一个适当容量的存储器。提供内容访问的级别,例如:只读读和写写同时读多个读操作,同时进行单个写操作同时有多个读和多个写操作,有保证一致性的方法简单ROM描述下面的ROM描述中使用二维寄存器组定义了一个存储器mem。ROM的数据单独保存在文件my_rom_data中,如右边所示。通常用这种方法使ROM数据独立于ROM描述。`timescale1ns/10psmodulemyrom(read_data,addr,read_en_);inputre

2、ad_en_;input[3:0]addr;output[3:0]read_data;reg[3:0]read_data;reg[3:0]mem[0:15];initial$readmemb("my_rom_data",mem);always@(addrorread_en_)if(!read_en_)read_data=mem[addr];endmodulemy_rom_data0000010111000011110100100011111110001001100000011101101000011101简单的RAM描述RAM描述比ROM略微复杂,因为必须既有读功能又有写功能,而读写通常使用同

3、一数据总线。这要求使用新的处理双向数据线的建模技术。在下面的例子中,若读端口未使能,则模型不驱动数据总线;此时若数据总线没有写数据驱动,则总线为高阻态Z。这避免了RAM写入时的冲突。`timescale1ns/1nsmodulemymem(data,addr,read,write);inout[3:0]data;input[3:0]addr;inputread,write;reg[3:0]memory[0:15];//16*4//读assigndata=read?memory[addr]:4'bz;//写always@(posedgewrite)memory[addr]=data;endmod

4、ule这个描述可综合,但许多工具仅仅产生一个寄存器堆,因此与一个真正的存储器相比耗费更多的面积。参数化存储器描述在下面的例子中,给出如何定义一个字长和地址均参数化的只读存储器件。modulescalable_ROM(mem_word,address);parameteraddr_bits=8;//地址总线宽度parameterwordsize=8;//字宽parameterwords=(1<

5、0:words-1];//mem声明//输出存储器的一个字wire[wordsize:1]mem_word=mem[address];endmodule例中存储器字范围从0而不是1开始,因为存储器直接用地址线确定地址。也可以用下面的方式声明存储器并寻址。reg[wordsize:1]mem[1:words];//从地址1开始的存储器//存储器寻址时地址必须加1wire[wordsize:1]mem_word=mem[address+1];存储器数据装入可以使用循环或系统任务给存储器装入初始化数据用循环给存储器的每个字赋值for(i=0;i

6、emorymema[i]={wordsize{1'b1}};调用系统任务$readmem$readmemb("mem_file.txt",mema);可以用系统任务$readmem给一个ROM或RAM加载数据。对于ROM,开始时写入的数据就是其实际内容。对于RAM,可以通过初始化,而不是用不同的写周期给每个字装入数据以减少仿真时间。使用双向端口用关键词inout声明一个双向端口inout[7:0]databus;双向端口声明遵循下列规则:inout端口不能声明为寄存器类型,只能是net类型。这样仿真器若有多个驱动时可以确定结果值。对inout端口可以从任意一个方向驱动数据。端口数据类型缺省为n

7、et类型。不能对net进行过程赋值,只能在过程块外部持续赋值,或将它连接到基本单元。在同一时间应只从一个方向驱动inout端口。例如:在RAM模型中,如果使用双向数据总线读取RAM数据,同时在数据总线上驱动写数据,则会产生逻辑冲突,使数据总线变为未知。必须设计与inout端口相关的逻辑以确保正确操作。当把该端口作为输入使用时,必须禁止输出逻辑。双向端口建模—使用基本单元建模modulebus_xc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。