实验五存储器设计_第1页
实验五存储器设计_第2页
实验五存储器设计_第3页
实验五存储器设计_第4页
实验五存储器设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

如有你有帮助,请购买下载,谢谢!如有你有帮助,请购买下载,谢谢!页PAGE页如有你有帮助,请购买下载,谢谢!页计算机组成原理实验五《存储器设计》实验报告姓名:吴速碘黄紫微学号:班级:计算机二班日期2015、5、25实验五存储器设计实验目的掌握RAM和ROM的Verilog语言描述方法;学习用宏模块的方法定制RAM和ROM。二、实验任务1、设计并实现一个128*16的单端口的RAM;2、设计并实现一个128*16的ROM;3、设计并实现一个双端口的128*16的RAM4、设计并实现一个16*32的FIFO。5、设计并实现正弦信号发生器,见“正弦信号发生器实验指南”。三、实验步骤1编写Verilog代码(见附页)2功能仿真进行分析与综合,排除语法上的错误建立波形仿真文件,输入激励生成功能仿真网表进行功能仿真,观察输出结果3选择器件DE2_70开发板的使用者请选择EP2C70F896C64绑定管脚5下载验证DE2_70开发板的下载:使用USB-Blaster进行下载四、实验内容五、实验思考题1、分析存储器采用三态输出的原因是什么?存储器的输出端是连接在数据总线上的。数据总线相当于一条车流频繁的大马路,必须在绿灯条件下,车辆才能进入这条大马路,否则要撞车发生交通事故。同理,存储器中的数据是不能随意传送到数据总线上的。例如,若数据总线上的数据是“1”(高电平5V),存储器中的数据是“0”(低电平0V),两种数据若碰到一起就会发生短路而损坏单片机。因此,存储器输出端口不仅能呈现“l”和“0”两种状态,还应具有第三种状态“高阻"态。呈“高阻"态时,输出端口相当于断开,对数据总线不起作用,此时数据总线可被其他器件占用。当其他器件呈“高阻”态时,存储器在片选允许和输出允许的条件下,才能将自己的数据输出到数据总线上。2、单端口和双端口的区别是什么?单端口ram是ram的读写只有一个端口,同时只能读或者只能写。

双端口ram是ram读端口和写端口分开,一个端口能读,另一个端口可以同时写。3、什么情况下考虑采用双端口存储器?(1)为了使CPU不致因为等待存储器读写操作的完成而无事可做,可以采取一些加速CPU和存储器之间有效传输的特殊措施:采用更高速的主存储器,或加长存储器的字长;采用并行操作的双端口存储器;在CPU和主存储器之间插入一个高速缓冲存储器(Cache),以缩短读出时间;在每个存储器周期中存取几个字.(采用交叉存储器)双端口存储器是指同一个存储器具有两组相互独立的读写控制线路,由于进行并行的独立操作,是一种高速工作的存储器。当两个端口的地址不相同时,在两个端口上进行读写操作,一定不会发生冲突。当任一端口被选中驱动时,就可对整个存储器进行存取,每一个端口都有自己的片选控制和输出驱动控制。当两个端口同时存取存储器同一存储单元时,便发生读写冲突。为解决此问题,特设置了BUSY标志。由片上的判断逻辑决定对哪个端口优先进行读写操作,而暂时关闭另一个被延迟的端口。总之,当两个端口均为开放状态(BUSY为高电平)且存取地址相同时,发生读写冲突.此时判断逻辑可以使地址匹配或片使能匹配下降至5ns,并决定对哪个端口进行存取.4、FIFO的工作特点是什么?为什么常用于实现程序中的子程序调用、递归等?特点:FIFO存储器是系统的缓冲环节,如果没有FIFO存储器,整个系统就不可能正常工作,它主要有几方面的功能:1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;2)数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担;3)允许系统进行DMA操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。因此,选择合适的存储芯片对于提高系统性能很重要,在以往的设计中经常采用的是“乒乓型”存储方式,这种方式就是采用两片存储器,数据首先进入其中一片,当数据满时再让数据进入第二片存储器,同时通过逻辑控制,将第一片存储器中的数据取走,以此类推,两片轮流对数据进行缓存。这种方式有着较明显的缺点,首先是控制复杂,要有专门的逻辑来维护这种轮流机制;其次,数据流的流向要不断变化,限制了数据流的速率,还容易产生干扰。从数据传输上说,缓存芯片容量越大,对后续时序要求就越低,可减少总线操作的频次;但从数据存储上说,就意味着需要开辟更大的内存空间来进行进行缓冲,会增加计算机的内存开销,而且容量越大,成本也越高。因此,在综合考虑系统性能和成本的基础上,选择满足系统需要的芯片即可。在FIFO存储器而不是地址总线上附加了表示内部缓冲器状态(BufferFull,缓冲器已满;BufferEmpty,缓冲器为空)的状态引脚,连接于FIFO的双方利用该状态进行操作的控制。另外,还设计了在接通电源及复位(Reset)或由于操作中的某些异常等原因而重新初始化(无数据状态)FIFO的复位引脚,这可以说是FIFO存储器的特点。Verilog代码《sinwaveV》modulesinwaveV#(parameterDATA_WIDTH=8,parameterADDR_WIDTH=6)( inputclk, outputreg[(DATA_WIDTH-1):0]q);reg[(ADDR_WIDTH-1):0]Q1;wirenewclk;reg[4:0]clk_cnt;assignnewclk = clk_cnt[4]; always@(posedgeCLK) begin clk_cnt <= clk_cnt+1; end always@(posedgenewclk) begin Q1<=Q1+1; endlpm_rom0 lpm_rom0_inst( .address(Q1), .clock(CLK), .q(DOUT) );endmodule《test1》//synopsystranslate_off`timescale1ps/1ps//synopsystranslate_onmoduletest1( address, clock, data, wren, q); input [6:0]address; input clock; input [15:0]data; input wren; output [15:0]q;`ifndefALTERA_RESERVED_QIS//synopsystranslate_off`endif tri1 clock;`ifndefALTERA_RESERVED_QIS//synopsystranslate_on`endif wire[15:0]sub_wire0; wire[15:0]q=sub_wire0[15:0]; altsyncram altsyncram_component( .address_a(address), .clock0(clock), .data_a(data), .wren_a(wren), .q_a(sub_wire0), .aclr0(1'b0), .aclr1(1'b0), .address_b(1'b1), .addressstall_a(1'b0), .addressstall_b(1'b0), .byteena_a(1'b1), .byteena_b(1'b1), .clock1(1'b1), .clocken0(1'b1), .clocken1(1'b1), .clocken2(1'b1), .clocken3(1'b1), .data_b(1'b1), .eccstatus(), .q_b(), .rden_a(1'b1), .rden_b(1'b1), .wren_b(1'b0)); defparam altsyncram_component.clock_enable_input_a="BYPASS", altsyncram_component.clock_enable_output_a="BYPASS", altsyncram_ended_device_family="CycloneIVGX", altsyncram_component.lpm_hint="ENABLE_RUNTIME_MOD=NO", altsyncram_component.lpm_type="altsyncram", altsyncram_component.numwords_a=128, altsyncram_component.operation_mode="SINGLE_PORT", altsyncram_component.outdata_aclr_a="NONE", altsyncram_component.outdata_reg_a="CLOCK0", altsyncram_component.power_up_uninitialized="FALSE", altsyncram_component.read_during_write_mode_port_a="NEW_DATA_NO_NBE_READ", altsyncram_component.widthad_a=7, altsyncram_component.width_a=16, altsyncram_component.width_byteena_a=1;endmodule《test2》//synopsystranslate_off`timescale1ps/1ps//synopsystranslate_onmoduletest2( address, clock, q); input [6:0]address; input clock; output [15:0]q;`ifndefALTERA_RESERVED_QIS//synopsystranslate_off`endif tri1 clock;`ifndefALTERA_RESERVED_QIS//synopsystranslate_on`endif wire[15:0]sub_wire0; wire[15:0]q=sub_wire0[15:0]; altsyncram altsyncram_component( .address_a(address), .clock0(clock), .q_a(sub_wire0), .aclr0(1'b0), .aclr1(1'b0), .address_b(1'b1), .addressstall_a(1'b0), .addressstall_b(1'b0), .byteena_a(1'b1), .byteena_b(1'b1), .clock1(1'b1), .clocken0(1'b1), .clocken1(1'b1), .clocken2(1'b1), .clocken3(1'b1), .data_a({16{1'b1}}), .data_b(1'b1), .eccstatus(), .q_b(), .rden_a(1'b1), .rden_b(1'b1), .wren_a(1'b0), .wren_b(1'b0)); defparam altsyncram_component.address_aclr_a="NONE", altsyncram_component.clock_enable_input_a="BYPASS", altsyncram_component.clock_enable_output_a="BYPASS", altsyncram_component.init_file="vv_CPU.mif", altsyncram_ended_device_family="CycloneIVGX", altsyncram_component.lpm_hint="ENABLE_RUNTIME_MOD=NO", altsyncram_component.lpm_type="altsyncram", altsyncram_component.numwords_a=128, altsyncram_component.operation_mode="ROM", altsyncram_component.outdata_aclr_a="NONE", altsyncram_component.outdata_reg_a="CLOCK0", altsyncram_component.widthad_a=7, altsyncram_component.width_a=16, altsyncram_component.width_byteena_a=1;endmodule《test3》//synopsystranslate_off`timescale1ps/1ps//synopsystranslate_onmoduletest3( clock, data, rdaddress, wraddress, wren, q); input clock; input [15:0]data; input [6:0]rdaddress; input [6:0]wraddress; input wren; output [15:0]q;`ifndefALTERA_RESERVED_QIS//synopsystranslate_off`endif tri1 clock; tri0 wren;`ifndefALTERA_RESERVED_QIS//synopsystranslate_on`endif wire[15:0]sub_wire0; wire[15:0]q=sub_wire0[15:0]; altsyncram altsyncram_component( .address_a(wraddress), .clock0(clock), .data_a(data), .wren_a(wren), .address_b(rdaddress), .q_b(sub_wire0), .aclr0(1'b0), .aclr1(1'b0), .addressstall_a(1'b0), .addressstall_b(1'b0), .byteena_a(1'b1), .byteena_b(1'b1), .clock1(1'b1), .clocken0(1'b1), .clocken1(1'b1), .clocken2(1'b1), .clocken3(1'b1), .data_b({16{1'b1}}), .eccstatus(), .q_a(), .rden_a(1'b1), .rden_b(1'b1), .wren_b(1'b0)); defparam altsyncram_component.address_aclr_b="NONE", altsyncram_component.address_reg_b="CLOCK0", altsyncram_component.clock_enable_input_a="BYPASS", altsyncram_component.clock_enable_input_b="BYPASS", altsyncram_component.clock_enable_output_b="BYPASS", altsyncram_ended_device_family="CycloneIVGX", altsyncram_component.lpm_type="altsyncram", altsyncram_component.numwords_a=128, altsyncram_component.numwords_b=128, altsyncram_component.operation_mode="DUAL_PORT", altsyncram_component.outdata_aclr_b="NONE", altsyncram_component.outdata_reg_b="CLOCK0", altsyncram_component.power_up_uninitialized="FALSE", altsyncram_component.read_during_write_mode_mixed_ports="DONT_CARE", altsyncram_component.widthad_a=7, altsyncram_component.widthad_b=7, altsyncram_component.width_a=16, altsyncram_component.width_b=16, altsyncram_component.width_byteena_a=1;endmodule《test4》//synopsystranslate_off`timescale1ps/1ps//synopsystranslate_onmoduletest4( clock, data, rdreq, wrreq, empty, full, q, usedw); input clock; input [15:0]data; input rdreq; input wrreq; output empty; output full; output [15:0]q; output [4:0]usedw; wire

温馨提示

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

评论

0/150

提交评论