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

上传人:阳*** 文档编号:90293748 上传时间:2022-05-14 格式:PPT 页数:12 大小:71KB
收藏 版权申诉 举报 下载
北大Verilog--16Verilog存储器设计优秀课件_第1页
第1页 / 共12页
北大Verilog--16Verilog存储器设计优秀课件_第2页
第2页 / 共12页
北大Verilog--16Verilog存储器设计优秀课件_第3页
第3页 / 共12页
资源描述:

《北大Verilog--16Verilog存储器设计优秀课件》由会员分享,可在线阅读,更多相关《北大Verilog--16Verilog存储器设计优秀课件(12页珍藏版)》请在装配图网上搜索。

1、数字集成电路设计入门-从HDL到版图于敦山 北大微电子学系第第1616章章 存储器建模存储器建模学习内容学习内容: 如何描述存储器如何描述存储器 如何描述双向端口如何描述双向端口存储器件建模存储器件建模描述存储器必须做两件事:描述存储器必须做两件事: 说明一个适当容量的存储器。说明一个适当容量的存储器。 提供内容访问的级别,例如:提供内容访问的级别,例如: 只读只读 读和写读和写 写同时读写同时读 多个读操作,同时进行单个写操作多个读操作,同时进行单个写操作 同时有多个读和多个写操作,有保证一致性的方法同时有多个读和多个写操作,有保证一致性的方法简单简单ROMROM描述描述 下面的下面的ROM

2、描述中使用二维寄存器组定义了一个存储器描述中使用二维寄存器组定义了一个存储器mem。ROM的数的数据单独保存在文件据单独保存在文件my_rom_data中,如右边所示。通常用这种方法使中,如右边所示。通常用这种方法使ROM数据独立于数据独立于ROM描述。描述。timescale 1ns/10psmodule myrom (read_data, addr, read_en_); input read_en_; input 3:0 addr; output 3:0 read_data; reg 3:0 read_data; reg 3:0 mem 0:15; initial $readmemb (

3、my_rom_data, mem); always ( addr or read_en_) if (! read_en_) read_data = memaddr;endmodulemy_rom_data0000010111000011110100100011111110001001100000011101101000011101简单的简单的RAMRAM描述描述 RAM描述比描述比ROM略微复杂,因为必须既有读功能又有写功能,而读写通常略微复杂,因为必须既有读功能又有写功能,而读写通常使用同一数据总线。这要求使用新的处理双向数据线的建模技术。在下面使用同一数据总线。这要求使用新的处理双向数据线

4、的建模技术。在下面的例子中,若读端口未使能,则模型不驱动数据总线;此时若数据总线没的例子中,若读端口未使能,则模型不驱动数据总线;此时若数据总线没有写数据驱动,则总线为高阻态有写数据驱动,则总线为高阻态Z。这避免了。这避免了RAM写入时的冲突。写入时的冲突。timescale 1ns /1nsmodule mymem (data, addr, read, write); inout 3:0 data; input 3:0 addr; input read, write; reg 3:0 memory 0:15; / 16*4/ 读读 assign data = read ? memoryadd

5、r : 4bz;/ 写写 always ( posedge write) memoryaddr = data;endmodule 这个描述可综合,但许这个描述可综合,但许多工具仅仅产生一个寄多工具仅仅产生一个寄存器堆,因此与一个真存器堆,因此与一个真正的存储器相比耗费更正的存储器相比耗费更多的面积。多的面积。参数化存储器描述参数化存储器描述 在下面的例子中,给出如何定义一个字长和地址均参数化的只读存储器件。在下面的例子中,给出如何定义一个字长和地址均参数化的只读存储器件。module scalable_ROM (mem_word, address); parameter addr_bits =

6、 8; / 地址总线宽度地址总线宽度 parameter wordsize = 8; / 字宽字宽 parameter words = (1 addr_bits); / mem容量容量 output wordsize:1 mem_word; / 存储器存储器字字 input addr_bits:1 address; / 地址总线地址总线 reg wordsize:1 mem 0 : words-1; / mem声明声明/ 输出存储器的一个字输出存储器的一个字 wire wordsize:1 mem_word = memaddress;endmodule 例中存储器字范围从例中存储器字范围从0而

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

8、nitialize memory mema i = wordsize 1b1; 调用系统任务调用系统任务$readmem $readmemb(mem_file. txt, mema); 可以用可以用 系统任务系统任务$readmem给一个给一个ROM或或RAM加载数据。对于加载数据。对于ROM,开始时写入的数据就是其实际内容。对于开始时写入的数据就是其实际内容。对于RAM,可以通过初始化,而不,可以通过初始化,而不是用不同的写周期给每个字装入数据以减少仿真时间。是用不同的写周期给每个字装入数据以减少仿真时间。 使用双向端口使用双向端口用关键词用关键词inout声明一个双向端口声明一个双向端口

9、inout 7:0 databus;双向端口声明遵循下列规则:双向端口声明遵循下列规则:inout端口不能声明为寄存器类型,只能是端口不能声明为寄存器类型,只能是net类型。类型。 这样仿真器若有多个驱动时可以确定结果值。这样仿真器若有多个驱动时可以确定结果值。 对对inout端口可以从任意一个方向驱动数据。端口数据类型缺省为端口可以从任意一个方向驱动数据。端口数据类型缺省为net类类型。不能对型。不能对net进行过程赋值,只能在过程块外部持续赋值,或将它连进行过程赋值,只能在过程块外部持续赋值,或将它连接到基本单元。接到基本单元。在同一时间应只从一个方向驱动在同一时间应只从一个方向驱动ino

10、ut端口。端口。 例如:在例如:在RAM模型中,如果使用双向数据总线读取模型中,如果使用双向数据总线读取RAM数据,同时在数据,同时在数据总线上驱动写数据,则会产生逻辑冲突,使数据总线变为未知。数据总线上驱动写数据,则会产生逻辑冲突,使数据总线变为未知。 必须设计与必须设计与inout端口相关的逻辑以确保正确操作。当把该端口作为输端口相关的逻辑以确保正确操作。当把该端口作为输入使用时,必须禁止输出逻辑。入使用时,必须禁止输出逻辑。双向端口建模双向端口建模 使用基本单元建模使用基本单元建模module bus_xcvr( bus_a, bus_b, en_a_b, en_b_a); inout

11、bus_a, bus_b; input en_a_b, en_b_a; bufif1 b1 (bus_b, bus_a, en_a_b); bufif1 b2 (bus_a, bus_b, en_b_a);/ Structural module logicendmodule 若若en_a_b=1,基本单元,基本单元b1使使能,能,bus_a数据传送到数据传送到bus_b若若en_b_a=1,基本单元,基本单元b2使使能,能,bus_b数据传送到数据传送到bus_a信号信号en_a_b和和en_b_a控制使能控制使能双向端口建模双向端口建模 使用持续赋值建模使用持续赋值建模module bus_

12、xcvr( bus_a, bus_b, en_a_b, en_b_a); inout bus_a, bus_b; input en_a_b, en_b_a; assign bus_b = en_a_b ? bus_a : bz; assign bus_a = en_b_a ? bus_b : bz;/ Structural module logicendmodule 若若en_a_b=1,赋值语句,赋值语句驱动驱动bus_a数据到数据到bus_b若若en_b_a=1,赋值语句,赋值语句驱动驱动bus_b值到值到bus_a信号信号en_a_b和和en_b_a控制使能控制使能双向端口建模双向端口建

13、模 存储器端口建模存储器端口建模module ram_cell( databus, rd, wr); inout databus; input rd, wr; reg datareg; assign databus = rd ? datareg : bz; always ( negedge wr) datareg = databus;endmodule当当rd=1时,时,datareg的的值赋值值赋值databus在在wr下降沿,下降沿,databus数据写入数据写入datareg复习复习问题:问题:在在Verilog中用什么结构定义一个存储器组?中用什么结构定义一个存储器组?如何向存储器加载

14、数据?如何向存储器加载数据?如何通过一个双向(如何通过一个双向(inout)端口传送数据?)端口传送数据?解答:解答:在在Verilog中将存储器声明为一个一个中将存储器声明为一个一个2维寄存器阵列。维寄存器阵列。可以用系统任务可以用系统任务$readmem或或$readmemb或用过程赋值向存储器加载数据或用过程赋值向存储器加载数据因为因为inout两端信号必须都是两端信号必须都是net数据类型,因此只能使用基本单元,子模块,数据类型,因此只能使用基本单元,子模块,或持续赋值驱动数据。同时还必须注意确保在任何一端不要发生驱动冲突。或持续赋值驱动数据。同时还必须注意确保在任何一端不要发生驱动冲突。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!