《控制器设计》word版.doc_第1页
《控制器设计》word版.doc_第2页
《控制器设计》word版.doc_第3页
《控制器设计》word版.doc_第4页
《控制器设计》word版.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

青岛理工大学实 验 报 告实验课程: 计算机组成原理I 实验日期: 2013 年 11月15日, 交报告日期:2013 年12月2 日,成绩:实验地点:现代教育技术中心101(计算机实验室)计算机工程 学院,计算机科学与技术 专业, 班级:计算112班 实验指导教师: 刘淑霞 批阅教师:同组学生姓名任师锋秦世帅学号201107063201107061一、 实验课题按照题目要求设计计算机控制器的基本逻辑(不包括微操作信号产生电路),决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。实验内容:用层次结构设计的方法设计控制器的指令部件。下层元件的设计已经在实验3中完成。包括:程序计数器、指令寄存器、数据寄存器、地址寄存器、指令译码器等。本实验只需要做顶层设计。顶层设计功能要求:具有控制器的部分基本功能,能够控制取指令操作、控制访存取数据操作、控制访存存数据操作、指令译码,等。取指令机器周期:把程序计数器的内容送到地址总线,延迟一段时间后把从存储器中读出的指令(通过数据总线读入),送到指令寄存器;每取一个指令字程序计数器加1。取数据机器周期:把地址寄存器的内容送到地址总线,延迟一段时间后把从存储器中读出的数据(通过数据总线)送到数据寄存器。存数据机器周期:把地址寄存器的内容送到地址总线,把数据寄存器中的数据送到数据总线,延迟一段时间后结束。 指令译码:假设操作码在指令字的最高3位。提示1: 控制器内部数据通路,可以是总线结构,也可以是直接连接结构。提示2: 控制器与系统总线的连接方法,有两种结构可以考虑: 程序计数器、指令寄存器、数据寄存器、地址寄存器都与系统总线有直接连接。 只有数据寄存器和地址寄存器与系统总线连接。程序计数器和指令寄存器不与系统总线连接。程序计数器内容必须先送到地址寄存器,然后才能到地址总线。从存储器中读出的指令必须先送到数据寄存器,然后才能到指令寄存器。仿真 设计仿真波形数据,模拟取指令、访存取数据、访存存数据等操作。要考虑到所有可能的情况。在实验报告中必须清楚说明仿真波形数据是怎样设计的。二、 逻辑设计控制器系统框图.zpc控制器LoadqetrldzaLoaddLoadaLoadid0d7ic0ic7qa7.qa0qd0qd7zqzdclkCot1Cot0端口说明:Loadq,loadd:数据寄存器的同步置数端口Loada:地址寄存器的同步置数端口Loadi:指令寄存器的同步置数端口zq,zd;数据寄存器的三态控制端口Clk:时钟信号Zpc:程序计数器的三态控制端口Za:地址寄存器的三态控制端口ld:程序计数器的同步置数端口r:程序计数器的同步清零端口et:程序计数器的加1控制端口cot:cot(0),cot(1)分别控制数据寄存器和程序计数器向地址寄存器和指令寄存器的数据传送qd:数据的双向输入输出端口(连接系统数据总线)数据从外部先送到系统总线才可以送到数据寄存器da:地址寄存器输出端口(连接系统地址总线)ic:经过译码器输出的控制信号d:程序计数器的置数端口。控制器逻辑图Y0Y7.3-8译码器A2A0A1q6q7.系统总线.q7cldet.d7d0q5.q0Loaddd0d7d7d0指令寄存器loadclkCot(0)d7d0d7d0clkLoadqzdzqq0q7Cot(1)数据寄存器q7q0d7d0q0zLoadclk地址寄存器rzclk程序计数器Cot(0)三、 VHDL源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;-ContolUnitentity control_unit isport(-loadd,loadq,loada,loadi同步置数端口高电平有效-zq,zd三态控制端口,低电平有效-zpc,za三态控制端口,高电平有效-clk时钟信号,上升沿有效-ld程序计数器的预置数端口,低电平有效-r程序计数器的清零端口,低电平有效-et控制程序计数器自动加1功能-qd数据从内存读出数据后送入系统总线的输入端,也是输出端口-ic译码器的输出端口,即:控制信号。-cot是控制数据在寄存器间传输的信号-cot(0)控制DR到IR的数据流通-cot(1)控制程序计数器到AR的数据流通-d程序计数器的输入端口loadd,loadq,loada,loadi,zq,zd,clk,ld,r,et,za,zpc : in std_logic;cot : in std_logic_vector(1 downto 0);qd : inout std_logic_vector(7 downto 0);d : in unsigned(7 downto 0);ic : out std_logic_vector(7 downto 0);qa : out std_logic_vector(7 downto 0);end control_unit;architecture behave of control_unit is-数据总线和地址总线-signal ABUS : std_logic_vector(7 downto 0);-signal DBUS : std_logic_vector(7 downto 0);-引用地址寄存器component address_register port (-load同步并行置数-z三态输出 z=1 is valide signal-d输入-q输出load ,z ,clk : in std_logic;d : in std_logic_vector(7 downto 0);q : out std_logic_vector(7 downto 0);end component;-引用数据寄存器component data_register port(-clk时钟信号-zq控制q端口的三态-zd控制d端口的三态-load1,load2同步并行置数.loadd控制d,loadq控制q-d输入输出双向端口-q输入输出端口clk,zd,zq,loadd,loadq : in std_logic;d : inout std_logic_vector(7 downto 0);q : inout std_logic_vector(7 downto 0);end component;-引用译码器component decodeport(A : in std_logic_vector(2 downto 0);-输入Y : out std_logic_vector(7 downto 0)-输出);end component;-引用程序计数器component eight_countport( -et控制自动加1的端口-clk时钟信号-c进位输出-z三态们 z=1-ld预制数控制端 ld=0-r同步清零端 r=0有效et,clk,z,ld,r :in std_logic;c : out std_logic;d : in unsigned(7 downto 0);q : out unsigned(7 downto 0);end component;-引用指令寄存器component instruction_registerport(clk ,load : in std_logic;d : in std_logic_vector(7 downto 0);q : out std_logic_vector(7 downto 0);end component;-在程序计数器和地址寄存器之间的内部信号signal pcdr : std_logic_vector(7 downto 0);signal USpcdr : unsigned(7 downto 0);-在数据寄存器到指令寄存器之间的内部信号signal drir : std_logic_vector(7 downto 0);signal deir : std_logic_vector(7 downto 0);-暂存信号signal t1 : std_logic_vector(7 downto 0);signal t2 : std_logic_vector(7 downto 0);signal t3 : std_logic_vector(7 downto 0);begin P1 : process(cot) begin if cot(1) = 0 then t1(Z); else t1=pcdr; end if; if cot(0)=0 thent2(Z); else t2clk,z=zpc,et=et,d=d,ld=ld,r=r,q=USpcdr);-convert unsigned data to std_logic_vector;pcdr=conv_std_logic_vector(USpcdr,8);-t1 clk,z=za,load=loada,d=t1,q=qa);-实例化数据寄存器DR : data_register port map(clk=clk,zq=zq,zd=zd,loadd=loadd,loadq=loadq,q=qd,d=drir);-实例化指令寄存器IR : instruction_register port map(clk=clk,load=loadi,d=t2,q=deir);-实例化译码器DE : decode port map(A=deir(7 downto 5),Y=ic);end behave;-address_registerlibrary ieee;use ieee.std_logic_1164.all;entity address_register isport (-load同步并行置数-z三态输出 z=1 is valide signal-d输入-q输出load ,z ,clk : in std_logic;d : in std_logic_vector(7 downto 0);q : out std_logic_vector(7 downto 0);end address_register;architecture behave of address_register issignal iq : std_logic_vector(7 downto 0);beginprocess(clk,z,load)beginif rising_edge(clk) and load = 1 theniq=d;end if;if z=1 thenqZ);elseq=iq;end if;end process;end behave;-data registerlibrary ieee;use ieee.std_logic_1164.all;entity data_register isport(-clk时钟信号-zq控制q端口的三态-zd控制d端口的三态-load1,load2同步并行置数.loadd控制d,loadq控制q-d输入输出双向端口-q输入输出端口clk,zd,zq,loadd,loadq : in std_logic;d : inout std_logic_vector(7 downto 0);q : inout std_logic_vector(7 downto 0);end data_register;architecture behave of data_register issignal iq : std_logic_vector(7 downto 0);begin process(clk,zd,zq,loadd,loadq)beginif rising_edge(clk) thenif loadd = 1 and zd = 0 then-因为d是双向端口,当d作为输入端口时, -d作为输出端口时应该是高阻态,否则会产生线与 iq =d; dZ);end if;if loadq = 1 and zq = 0 theniq=q;qZ);end if;end if;if zd = 0 then -三态门关闭dZ);else d=iq;end if;if zq = 0 then-三态门关闭qZ);else q Y Y Y Y Y Y Y Y=01111111;end case;end process;end de_behave;-eight_countlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity eight_count isport( -et控制自动加1的端口-clk时钟信号-c进位输出-z三态们 z=1-ld预制数控制端 ld=0-r同步清零端 r=0有效et,clk,z,ld,r :in std_logic;c : out std_logic;d : in unsigned(7 downto 0);q : out unsigned(7 downto 0);end eight_count;architecture behave of eight_count issignal iq : unsigned(7 downto 0);beginprocess (clk,et,z,ld,r)beginif rising_edge(clk) thenif r = 0 then-同步清零iq0);elsif ld = 0 then iq=d;-预制数elsif et = 1 then iq=iq+1;-计数end if;end if;if iq = 255 then c =1;-计数到255,产生进位else c=0;end if;q=iq;if z = 1 then -三态们关闭 c=Z; qZ);end if;end process;end behave;library ieee;use ieee.std_logic_1164.all;entity instruction_register isport(clk ,load : in std_logic;d : in std_logic_vector(7 downto 0);q : out std_logic_vector(7 downto 0);end instruction_register;architecture behave of instruction_register issignal save : std_logic_vector(7 downto 0);begin process(clk , load)beginif rising_edge(clk) and load=1 thensave=d;end if;q=save;end process;end behave;四、 仿真设计由于元器件的仿真在实验3中已经做过,所以此处不再进行元器件的仿真。首先令clk每隔10纳秒翻转一次。et=1(有效),ld=1(无效),r=1(无效)这是程序计数器处于工作状态。取指令:在第三个时钟上升沿时,zpc=0,(程序计数器三态门打开),loada=1(地址寄存器同步控制端有效),za=0(地址寄存器三态门打开),Cot(1)=1(让pc输出的数据传入地址寄存器),这是输出应该是00000010,因为程序计数器刚好计数三个。访存取指令:下一个时钟上升沿时.qd=11111111,zq=0,zd=1,loadq=1,loadd=0.za=1,zpc=1,loada=0,loadi=1,cot(0)=1下一个时钟上升沿时:zd=1(数据寄存器的三态门打开),loadi=1(指令寄存器的同步置数端口有效),cot=01(让数据寄存器里的数据传入指令寄

温馨提示

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

评论

0/150

提交评论