控制器简单设计报告+代码+仿真.doc_第1页
控制器简单设计报告+代码+仿真.doc_第2页
控制器简单设计报告+代码+仿真.doc_第3页
控制器简单设计报告+代码+仿真.doc_第4页
控制器简单设计报告+代码+仿真.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

控制器的设计一、实验课题实验要求:按照题目要求设计计算机控制器的基本逻辑(不包括微操作信号产生电路),决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。主要元件设计:用层次结构设计的方法设计控制器的指令部件功能要求:具有控制器的部分基本功能,能够控制取指令操作、控制访存取数据操作、控制访存存数据操作、指令译码,等。取指令机器周期:把程序计数器的内容送到地址总线,延迟一段时间后把从存储器中读出的指令(通过数据总线读入),送到指令寄存器;每取一个指令字程序计数器加1。取数据机器周期:把地址寄存器的内容送到地址总线,延迟一段时间后把从存储器中读出的数据(通过数据总线)送到数据寄存器。存数据机器周期:把地址寄存器的内容送到地址总线,把数据寄存器中的数据送到数据总线,延迟一段时间后结束。指令译码:假设操作码在指令字的最高3位。二、逻辑设计写该实验的逻辑设计,包括:顶层系统框图,下层各主要元件的系统框图。顶层和下层各主要元件的端口(引脚)描述:端口名称、功能、有效电平、位数等。逻辑图,必须在图中清楚地标出每个内部连接线的Signal(与VHDL程序中的Signal一致)。根据所用的描述方式,可能还需要有:真值表/功能表/逻辑函数等。层次设计控制器系统框图: CS0 CS1 CS2 CS3 W0 W1 W2 W3 R0 R1 R2 R3 B7 B0CLK 控制器Rst INC M A7 A0 D7 D0 Y7 Y0 I4 I0CLK是时钟信号,上升沿有效。CS0 CS1 CS2 CS3分别是程序计数器、地址寄存器、数据寄存器、指令寄存器的片选信号Rst是清零信号,INC是程序计数器加1信号,M是数据寄存器输入输出端选择信号。W0 、W1 、W2 、W3,R0、R1、R2、R3分别是程序计数器、地址寄存器、数据寄存器、指令寄存器的读写信号A7 A0是外部地址总线,D7 D0是外部数据总线,B7 B0内部数据总线I4 I0是指令的地址码部分DB外部数据总线外部地址总线 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0CS3R3W3CLKW2R2W0Rstd7 d0 clr_l w clk PC_8q7 q0 r cs incd7 d0 clk w r MAR_8q7 q0 cs d7d0 clk w r MDR_8q7 q0 m csY7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 指令译码器 A2 A1 A0q7 q6 q5 q4 q0IR_8d7 d0 w r clk cs R0 CS0 INC W1 CS1 R1 M CS2I4I0内部数据总线A三、VHDL程序-8位程序计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity PC_8 isport(clk,inc,clr_l,r,w,cs:in std_logic; d:in unsigned(7 downto 0); q:out unsigned(7 downto 0);end PC_8;architecture behave of PC_8 issignal iq:unsigned(7 downto 0);beginprocess(clk,inc,r,w,clr_l,cs)beginif (clkevent and clk=1) then if cs=1 then if clr_l=0 then iq=00000000; elsif w=1 then iq=d; elsif inc=1 then iq=iq+1; end if; end if;end if;if cs=1 and r=1 then q=iq;else q=ZZZZZZZZ;end if;end process;end behave;-8位数据寄存器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity MDR_8 is port( d:inout unsigned(7 downto 0);-输入输出端1 q:inout unsigned(7 downto 0);-输入输出端2 clk:in std_logic;-时钟 cs:in std_logic;-片选信号 m:in std_logic;-设置输入、输出端 w,r:in std_logic);-读写信号end MDR_8;architecture behave of MDR_8 issignal iq:unsigned(7 downto 0);beginprocess(clk,cs,iq,m,w,r)begin if (r=1 and cs=1 and m=0) then q=iq; else q=ZZZZZZZZ; end if; if (r=1 and cs=1 and m=1) then d=iq; else d=ZZZZZZZZ; end if; if rising_edge(clk) then if (w=1 and cs=1 and m=0) then iq=d; end if; if (w=1 and cs=1 and m=1) then iq=q; end if; end if;end process;end behave;-8位地址寄存器Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity MAR_8 is port(cs: in std_logic;-片选信号w,r: in std_logic;clk: in std_logic;d: in unsigned(7 downto 0);q: out unsigned(7 downto 0);end MAR_8;Architecture behave of MAR_8 issignal iq: unsigned(7 downto 0);begin process(cs,clk,w,r) begin if rising_edge(clk) then if w=1 and cs=1 then iq=d; end if; end if; if r=1 and cs=1 then q=iq; else q=ZZZZZZZZ; end if; end process;end behave;-8位指令寄存器Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity IR_8 is port(cs: in std_logic;-片选信号w,r: in std_logic;clk: in std_logic;d: in unsigned(7 downto 0);q: out unsigned(7 downto 0);end IR_8;Architecture behave of IR_8 issignal iq: unsigned(7 downto 0);begin process(cs,clk,w,r) begin if rising_edge(clk) then if w=1 and cs=1 then iq=d; end if; end if; if r=1 and cs=1 then q=iq; end if; end process;end behave;-指令译码器library ieee;use ieee.std_logic_1164.all;entity decoder38 is port( A:in std_logic_vector(2 downto 0); Y:out std_logic_vector(7 downto 0);end decoder38;architecture behave of decoder38 isbegin Y(0)=(not A(2) and (not A(1) and (not A(0); Y(1)=(not A(2) and (not A(1) and A(0); Y(2)=(not A(2) and A(1) and (not A(0); Y(3)=(not A(2) and A(1) and A(0); Y(4)=A(2) and (not A(1) and (not A(0); Y(5)=A(2) and (not A(1) and A(0); Y(6)=A(2) and A(1) and (not A(0); Y(7)CS(0),clk=CLK,clr_l=Rst,w=W(0),r=R(0),inc=INC,d=B,q=A); G2:MDR_8 port map (cs=CS(2),clk=CLK,m=M,w=W(2),r=R(2),d=B,q=D); G3:MAR_8 port map (cs=CS(1),clk=CLK,w=W(1),r=R(1),d=B,q=A); G4:IR_8 port map (cs=CS(3),clk=CLK,w=W(3),r=R(3),d=B, q(7)=j(2),q(6)=j(1),q(5)=j(0),q(4)=I(4), q(3)=I(3),q(2)=I(2),q(1)=I(1),q(0)=I(0); G5:decoder38 port map (A=j,Y=Y);end struct;四、仿真设计1、取指令机器周期:把程序计数器的内容送到地址总线,延迟一段时间后把从存储器中读出的指令(通过数据总线读入),送到指令寄存器;每取一个指令字程序计数器加1。指令译码:假设操作码在指令字的最高3位。假设要读的指令存放在地址为11000000的存储单元中,即B=11000000,将该地址存放在程序计数器中,并且输出该地址到A看地址是否写成功,该过程所需的信号是CS=0001,上升沿,W0=1,Rst=1,R0=1。假设指令为10100101,即D=10100101,把指令存放在数据寄存器中并且输出到B看指令是否写成功,该过程所需的信号是CS=0100,上升沿,W2=1,R2=1,M=1。把指令10100101,即B=10100101,写入指令寄存器并将操作码译码输出到Y,地址码输出到I,该过程需要的信号是CS=1000,上升沿,W3=1,R3=1。取出一条指令后,程序计数器需要加1,并且输出该地址到A看地址加1是否写成功,该过程所需的信号是CS=0001,上升沿,W0=0,Rst=1,R0=1,INC=1。2、取数据机器周期:把地址寄存器的内容送到地址总线,延迟一段时间后把从存储器中读出的数据(通过数据总线)送到数据寄存器。假设数据在主存中的地址为11000011,即B=11000011,将该地址存放在地址计数器中,并且输出该地址到A看地址是否写成功,该过程所需的信号是CS=0010,上升沿,W1=1,R1=1。假设从存储器中读出的数据是10101010,即D=10101010,将该数据存放在数据寄存器中并且输出到B看数据是否写成功,该过程所需的信号是CS=0100,上升沿,W2=1,R2=1,M=1。3、存数据机器周期:把地址寄存器的内容送到地址总线,把数据寄存器中的数据送到数据总线,延迟一段时间后结束。假设数据要存的存储单元的地址是00001111,即B=00001111,将该地址存放在地址计数器中,并且输出该地址到A看地址是否写成功,该过程所需的信号是CS=0010,上升沿,W1=1,R1=1。假设要写到存储器中的数据是10101010,即B=10101010,将该数据存放在数据寄存器中并且输出到D看数据是否写成功,该过程所需的信号是CS=0100,上升沿,W2=1,R2=1,M=0。五、结果分析讨论第一个时钟周期把地址B=11000000写入程序计数器并输出到外部地址总线A,成功第二个时钟周期把存储器里的一条指令D=10100101写入数据寄存器并输出到内部数据

温馨提示

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

评论

0/150

提交评论