计算机组成原理课内实验报告实验二学生姓名高君宇专业班级计算机15学号2110505112所在学院电信学院提交日期2014年1月18日2实验二1.实验目的(1)理解计算机主存储器的分类及作用(2)掌握ROM、RAM的读写方法2.实验要求1)实验设计目标设计一个能够对实验台上的存储器读写的部件,满足以下目标:(1)一个16位的存储器地址寄存器。该寄存器在reset为低电平时清零,在时钟clk的上升沿加1,地址寄存器在超过ox000f后下一个时钟上升沿回到0。(2)一个标志寄存器,在reset为低电平时复位为0,当存储器地址寄存器等于0x000f后,下一个时钟clk的上升沿标志寄存器翻转。(3)在标志寄存器为0时执行存储器存数功能,从存储器的0单元开始存16个16位数。按动一次单脉冲按钮,存一次数,存的数由内部产生,不由实验台开关输入。(4)当标志寄存器为1时,执行从存储器的0单元开始的读数功能。按动一次单脉冲按钮,读一次数,一直读16个数。读出的数据送入一个16位信号R[15..0]暂存。提示:当需要从存储器读取数据时,首先将ZZZZZZZZZZZZZZZZ赋值给数据总线,然后才能读取存储器中的数据。2)顶层设计实体的引脚要求引脚要求对应关系如下:(1)clk对应实验台上的时钟(单脉冲)。(2)reset对应实验台上的CPU复位信号CPU_RST。(3)存储器地址总线A[15..0]对应实验台上的指示灯A15—A0。(4)存储器数据总线D[15..0]对应实验台上的数据指示灯D15—D0。(5)16位信号R[15..0]对应实验台上的指示灯R15—R0。(6)存储器读写信号FWR对应实验台上的FWR。3.实验原理存储器按存取方式分,可分为随机存储器和顺序存储器。如果存储器中的任何存储单元的内容都可随机存取,称为随机存储器,计算机中的主存储器都是随机存储器。如果存储器只能按某种顺序存取,则称为顺序存储器,磁带是顺序存储器,磁盘是半顺序存储器,它们的特点是存储容量大,存取速度慢,一般作为外部存储器使用。如果按存储器的读写功能分,有些存储器的内容是固定不变的,即只能读出不能写入,这种存储器称为只读存储器(ROM);既能读出又能写入的存储器,称为随机读写存储器(RAM)。实际上真正的ROM基本上不用了,用的是光可擦除可编程的ROM(EPROM)和电可擦除可编程的ROM(EEPROM)。EEPROM用的越来越多,有取代EPROM之势,比如容量很大的闪存(FLASH)现在用的就很广泛,常说的U盘就是用FLASH做的。按信息的可保存性分,存储器可分为非永久性记忆存储器和永久性记忆存储器。ROM、EPROM、EEPROM都是永久记忆存储器,它们断电后存储内容可保存。RAM则是非永久性记忆存储器,断电后存储器中存储的内容丢失。TEC-CA实验台上HM6116的使用在TEC-CA开放式CPU实验教学系统实验台上,有2片静态存储器器件HM6116。HM6116有8位数据总线和11位地址总线。2片HM6116构成了2kX16bits的静态存储器,与FPGA-CPU一起构成了能够运行测试程序的计算机。图6-41是FPGA-CPU和2片HM6116连接示意图。3A10—A0A10—A0I/O7—I/O0I/O7—I/O0HM6116HM6116CSCSWEWEOEOEFPGA-CPUA10—A0D7—D0D15—D8FWR图6-41FPGA-CPU和2片HM6116连接示意图对于FPGA-CPU来说,实验台上的2片HM6116的CS是接地的,因此不需要对它们的CS进行控制。FPGA-CPU产生的16位存储器地址A15—A0只有11位地址A10—A0送往2片HM6116,其余5位地址A15—A11没有使用。FPGA-CPU的16位存储器数据总线D15—D0和2片HM6116相连,1片HM6116的I/O7—I/O0接D7—D0,另1片HM6116的I/O7—I/O0接D15—D8。FPGA-CPU输出的存储器控制信号FWR直接送2片HM6116的WE;FWR在实验台经过一个反相器反相后送2片HM6116的OE。因此FPGA-CPU只要在存储器地址总线A10—A0设置好地址,在数据总线D15—D0上送出被写数据,然后在FWR上产生一个负脉冲,就能将数据写入指定的存储器单元;只要在存储器地址总线A10—A0设置好地址,然后使FWR为高电平,就能在数据总线D15—D0上接收到从指定的存储器单元读出的数据。4.设计思路与源代码libraryIEEE;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitymemoryisport(reset,clk:instd_logic;--复位、时钟FWR:outstd_logic;--RAM的读写D:inoutstd_logic_vector(15downto0);--数据A:outstd_logic_vector(15downto0);--地址R:outstd_logic_vector(15downto0)--寄存器);endmemory;architecturebehavofmemoryissignalcounter:std_logic_vector(15downto0);signalwdata:std_logic_vector(15downto0);4signalstart,flag:std_logic;--开始计数(读写)、结束(状态)beginA=counter;wdata=00000000001&counter(4downto0);--数据16bit的形成process(reset,clk)beginifreset='0'thencounter=x0000;elsifclk'eventandclk='1'then--计数if(start='1')and(counter/=x000f)thencounter=counter+'1';elsif(start='1')and(counter=x000f)thencounter=x0000;endif;endif;endprocess;process(reset,clk)beginifreset='0'thenstart='0';elsifclk'eventandclk='1'thenstart='1';endif;endprocess;process(reset,counter,clk)beginifreset='0'thenflag='0';elsifclk'eventandclk='1'thenifcounter=x000fthenflag=notflag;endif;endif;endprocess;process(reset,counter,clk,start,flag,wdata,D)beginifreset='0'thenFWR='1';elsifstart='1'thenifflag='0'then5D=wdata;FWR=clk;elseD=ZZZZZZZZZZZZZZZZ;FWR='1';R=D;endif;endif;endprocess;--增加flag引出信号,观察他的变化。endbehav;5.实验步骤(1)实验台设置成FPGA-CPU附加外部RAM运行模式“011”。该调试模式要能够实现模拟FPGA-CPU对实验台存储器的存数、取数功能。即REGSEL=0、CLKSEL=1、FDSEL=1。使用实验台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开。由于当FDSEL=0时,指示灯D15—D0显示的是开关SD15—SD0的值,因此开关FDSEL必须为1。这种方式除了FPGA-CPU的时钟是单脉冲外,其余都与单片机控制FPGA-CPU调试模式完全一样。(2)将设计在QuartusⅡ下输入,编译后下载到TEC-CA上的FPGA中。首先按实验台上的CPU复位按钮,使存储器地址寄存器复位为0,然后不断观察实验台上的指示灯,察看结果与预想的是否一致。6、实验现象:reset信号使整个运行过程复位,clk脉冲有效是存入16个16位数,标志位变为1,按clk开始读存储器,此时可以通过观察指示灯的亮灭情况得到输出结果。7、实验小结本次实验中使我对Quartus有了更加充分的认识,在实验过程中,仿真的时候波形不正确,其中一开始是仿真过程不熟悉导致,后来解决时通过调整延长了地址有效时间,读取稳定。这说明成功是需要不断尝试的!6计算机组成原理课内实验报告实验三学生姓名高君宇专业班级计算机15学号2110505112所在学院电信学院提交日期2014年1月18日7实验三1、实验目的(1)了解通用寄存器组的用途及对CPU的重要性。(2)掌握通用寄存器组的设计方法。(3)掌握VHDL中层次结构的设计特点和方法;学习和掌握component语句和portmap语句。(4)进一步学习和掌握case语句及其他语句的用法,完成各种寄存器、译码器及选择器的设计和实现。2、实验要求1)实验设计目标设计一个通用寄存器组,满足以下要求:(1)通用寄存器组中有4个16位的寄存器。(2)当复位信号reset=0时,将通用寄存器组中的4个寄存器清零。2)顶层设计实体的引脚要求引脚要求对应关系如下:(1)clk对应实验台上的时钟(单脉冲)。(2)reset对应实验台上的CPU复位信号CPU_RST。(3)SR[1..0]对应实验台开关SA1、SA0。(4)DR[1..0]对应实验台开关SA3、SA2。(5)DRWr对应实验台开关SA5。(6)目的操作数用实验台上的指示灯A15—A0显示,源操作数用实验台上的指示灯R15—R0显示。3.实验原理通用寄存器组是CPU的重要组成部分。从存储器取来的数据要放在通用寄存器中;从外部设备取来的数据除DMA方式外,要放在通用寄存器中。向存储器输出的数据也是从通用寄存器中取出的;向外部设备输出的数据除DMA方式外也是从通用寄存器中取出的。由于从通用寄存器组中取数据比从存储器或者外部设备取数据速度快得多,因此参加算术运算和逻辑运算的数据一般是从通用寄存器组中取出的,它向算术逻辑单元ALU提供了进行算术运算和逻辑运算所需要的2个操作数,同时又是运算结果的暂存地。通用寄存器组内寄存器的数目与CPU性能有关,CPU性能越高,通用寄存器组内的寄存器数目越多。由于算术逻辑运算需要2个操作数,因此通用寄存器组有2个读端口,负责提供进行算术逻辑单元需要的源操作数和目的操作数。通用寄存器组有1个写端口,负责将运算结果保存到指定的寄存器内。根据通用寄存器组的功能要求,一个只有4个16位寄存器的通用寄存器组的框图如图所示。6)4选1多路选择器:*多路选择器1从4个寄存器R0、R1、R2和R3的输出Q[15..0]选择1路送到DR_data[1..0],给算术逻辑单元提供目的操作数;选择信号sel[1..0]接DR[1..0]。*多路选择器2从4个寄存器R0、R1、R2和R3的输出Q[15..0]选择1路送到SR_data[1..0],给算术逻辑单元提供源操作数;选择信号sel[1..0]接SR[1..0]。4、设计思路与源代码设计思路:主要运用层次结构设计的方法,首先设计了底层的3个实体:16位寄存器,具有复位功能和允许写功能;一个2-4译码器,对应寄存器写选择;一个4选1多路开关,负8责'1')thenifsel='1'andwrite='1'thenq_output=d_input;endif;endif;endprocess;enda;2.设计实体decoder2_to_4libraryieee;useieee.std_logic_1164.all;entitydecoder2_to_4isport(sel:instd_logic_vector(1downto0);sel00:outstd_