《控制器简单设计报告+代码+仿真》由会员分享,可在线阅读,更多相关《控制器简单设计报告+代码+仿真(7页珍藏版)》请在金锄头文库上搜索。
1、控制器的设计一、实验课题实验要求: 按照题目要求设计计算机控制器的基本逻辑(不包括微操作信号产生电路),决定外部的端口(名称、有效电平)和内 部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。主要元件设计:用层次结构设计的方法设计控制器的指令部件功能要求: 具有控制器的部分基本功能,能够控制取指令操作、控制访存取数据操作、控制访存存数据操作、指令译码,等。 取指令机器周期:把程序计数器的内容送到地址总线,延迟一段时间后把从存储器中读出的指令(通过数据总线读入), 送到指令寄存器;每取一个指令字程序计数器加1。取数据机器周期:把地址寄存器的内容送到地址总线,延迟一段时间后
2、把从存储器中读出的数据(通过数据总线)送 到数据寄存器。存数据机器周期:把地址寄存器的内容送到地址总线,把数据寄存器中的数据送到数据总线,延迟一段时间后结束。 指令译码:假设操作码在指令字的最高3 位。二、逻辑设计写该实验的逻辑设计,包括:顶层系统框图,下层各主要元件的系统框图。顶层和下层各主要元件的端口(引脚)描 述:端口名称、功能、有效电平、位数等。逻辑图,必须在图中清楚地标出每个内部连接线的Signal (与VHDL程序 中的Signal 一致)。根据所用的描述方式,可能还需要有:真值表/功能表/逻辑函数等。层次设计控制器系统框图:CSO CS1 CS2 CS3 W0 W1 W2 W3
3、R0 R1 R2 R3 B7 B0CLK控制器Rst INC M A7 AO D7 D0 Y7 Y0 I4 I0CLK是时钟信号,上升沿有效。CSO CS1 CS2 CS3 分别是程序计数器、地址寄存器、数据寄存器、指令寄存器的片选信号Rst是清零信号,INC是程序计数器加1信号,M是数据寄存器输入输出端选择信号。W0、W1、W2、W3, R0、R1、R2、R3分别是程序计数器、地址寄存器、数据寄存器、指令寄存器的读写信号A7 A0是外部地址总线,D7 D0是外部数据总线,B7B0内部数据总线I4 IO 是指令的地址码部分三、VHDL程序-8位程序计数器-8位数据寄存器library ieee
4、;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_1164.all;use ieee.std logic arith.all;use ieee.std logic arith.all;entity PC_8 is port(clk,inc,clr_l,r,w,cs:in stdogic;d:in unsigned(7 downto 0); q:out unsigned(7 downto 0); end PC_8;architecture behave of PC_8 is signal iq:unsigned(7 down
5、to 0); beginprocess(clk,inc,r,w,clr_l,cs) beginif (clkevent and clk=T) thenif cs=T thenif clr_l=0 then iq=00000000;elsif w=T theniqv=d;elsif inc=T then iqv=iq+l;end if;end if;end if;if cs=T and r=1 then q=iq;else qv=ZZZZZZZZ;end if;end process;end behave;entity MDR_8 isport( d:inout unsigned(7 downt
6、o 0);-输入输出端 1 q:inout unsigned(7 downto 0);-输入输出端 2 clk:in std_logic;-时钟cs:in stdogic;-片 选信号 m:in std_logic;-设置输入、输出端 w,r:in stdogic);-读与信号end MDR_8;architecture behave of MDR_8 issignal iq:unsigned(7 downto 0);beginprocess(clk,cs,iq,m,w,r)beginif (r=T and cs=T and m=0) then q=iq;else q=ZZZZZZZZ;end
7、 if;if (r=T and cs=T and m=T) then d=iq;else d=ZZZZZZZZ;end if;if rising_edge(clk) thenif (w=T and cs=T and m=0) then iq=d; end if;if (w=T and cs=T and m=T) then iq=q; end if;end if;end process;end behave;-8位地址寄存器-8位指令寄存器Library ieee;Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_1164.a
8、ll;use ieee.std_logic_arith.all;use ieee.std_logic_arith.all;entity MAR_8 isentity IR_8 isport(port(cs: in std_logic;-片选信号cs: in std_logic;-片选信号w,r: in std_logic;w,r: in std_logic;clk: in std_logic;clk: in std_logic;d: in unsigned(7 downto 0);d: in unsigned(7 downto 0);q: out unsigned(7 downto 0);q:
9、 out unsigned(7 downto 0);end MAR_8;end IR_8;Architecture behave of MAR_8 isArchitecture behave of IR_8 issignal iq: unsigned(7 downto 0);signal iq: unsigned(7 downto 0);beginbeginprocess(cs,clk,w,r)process(cs,clk,w,r)beginbeginif rising edge(clk) thenif rising edge(clk) thenif w=T and cs=T then iqv
10、=d;if w=T and cs=T then iq=d;end if;end if;end if;end if;if r=T and cs=T thenif r=T and cs=T thenq=iq;q=iq;elseend if;qv=ZZZZZZZZ;end process;end if;end behave;end process;end behave;-指令译码器 library ieee;use ieee.std_logic_1164.all;entity decoder38 isport( A:in std_logic_vector(2 downto 0); Y:out std
11、_logic_vector(7 downto 0); end decoder38;architecture behave of decoder38 is beginY(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=Rst,w=W(0),end component;r=R(0),inc=INC,d=B,q=A);component MDR_8G2:MDR_8 port mapport(d:inout unsigned(7 downto 0);(cs=CS(2),clk=CLK,m=M,w=W(2),r=R(2),d=B,q=D);-输入输出端1G3:MAR_8 port