最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

组合逻辑控制单元设计

来源:动视网 责编:小OO 时间:2025-10-02 09:44:39
文档

组合逻辑控制单元设计

一、实验课题实验要求:按照题目要求用硬布线(组合逻辑)控制法设计一个简单模型机的控制单元CU(微操作信号产生电路),决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。主要元件设计:1.指令译码器功能要求:3-8译码器。2.控制单元功能要求:假设该模型机有不同类型的指令。包括:算术运算、逻辑运算、移位、数据传送、访存操作、转移等。根据每条指令的功能和时序,分析其执行过程中需要在各个阶段产生的全部微操作,导出产生这些微操作控制信号的逻
推荐度:
导读一、实验课题实验要求:按照题目要求用硬布线(组合逻辑)控制法设计一个简单模型机的控制单元CU(微操作信号产生电路),决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。主要元件设计:1.指令译码器功能要求:3-8译码器。2.控制单元功能要求:假设该模型机有不同类型的指令。包括:算术运算、逻辑运算、移位、数据传送、访存操作、转移等。根据每条指令的功能和时序,分析其执行过程中需要在各个阶段产生的全部微操作,导出产生这些微操作控制信号的逻
一、实验课题

实验要求:

按照题目要求用硬布线(组合逻辑)控制法设计一个简单模型机的控制单元CU(微操作信号产生电路),决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。

主要元件设计:

1.指令译码器

功能要求:3-8译码器。

2.控制单元

   功能要求:假设该模型机有不同类型的指令。包括:算术运算、逻辑运算、移位、数据传送、访存操作、转移等。根据每条指令的功能和时序,分析其执行过程中需要在各个阶段产生的全部微操作,导出产生这些微操作控制信号的逻辑。

 3.用层次结构设计的方法设计一个控制单元CU(微操作控制信号产生电路)。包括指令译码器和控制单元。

功能要求:能够正确产生不同指令在执行过程中(每个机器周期、每拍)发出的全部微操作。

二、逻辑设计

写该实验的逻辑设计,包括:顶层系统框图,下层各主要元件的系统框图。顶层和下层各主要元件的端口(引脚)描述:端口名称、功能、有效电平、位数等。逻辑图,必须在图中清楚地标出每个内部连接线的Signal(与VHDL程序中的Signal一致)。根据所用的描述方式,可能还需要有:真值表/功能表/逻辑函数等。

1、3-8译码器:

系统框图:

S是工作信号,当S=1时,3-8译码器工作;当S=0时,3-8译码器不工作。A是输入信号,Y是输出信号

S  A2  A1  A0  Y7   Y6   Y5   Y4   Y3   Y2   Y1   Y0    

1   0   0   0    0     0    0    0    0     0    0     1     加法

1   0   0   1    0     0    0    0    0     0    1     0     与

1   0   1   0    0     0    0    0    0     1    0     0     或

1   0   1   1    0     0    0    0    1     0    0     0     左移

1   1   0   0    0     0    0    1    0     0    0     0     右移

1   1   0   1    0     0    1    0    0     0    0     0     数据传送

1   1   1   0    0     1    0    0    0     0    0     0     取数

1   1   1   1    1     0    0    0    0     0    0     0     无条件转移

0   ×  ×  ×   0     0    0    0    0     0    0     0     

Y(0)<=S and (not A(2)) and (not A(1)) and (not A(0));

Y(1)<=S and (not A(2)) and (not A(1)) and A(0);

Y(2)<=S and (not A(2)) and A(1) and (not A(0));

Y(3)<=S and (not A(2)) and A(1) and A(0);

Y(4)<=S and A(2) and (not A(1)) and (not A(0));

Y(5)<=S and A(2) and (not A(1)) and A(0);

Y(6)<=S and A(2) and A(1) and (not A(0));

Y(7)<=S and A(2) and A(1) and A(0);

2、控制单元:

设计过程:把每条指令的实现分成取指令、分析指令、执行指令三个步骤,每一步由一个机器周期实现,一条指令的实现需要三个机器周期,即M1(取指周期)、M2(分析周期)、M3(执行周期);每个机器周期由三个节拍组成,即T0、T1、T2。如下图所示:

1、加法指令:寄存器R1中的一个数与寄存器R0中的一个数相加,结果放在R1中。

即实现(R0)+(R1)→R1

2、与指令:寄存器R1中的一个数与寄存器R0中的一个数,结果放在R1中。

即实现(R1)and (R0) → R1 

3、或指令:寄存器R1中的一个数或寄存器R0中的一个数,结果放在R1中。

即实现(R1)or (R0) → R1 

4、逻辑左移指令:寄存器R1中的数左移,移动位数存放在寄存器R0中,结果放在R1中。

即实现(R1)R1

5、逻辑右移指令:寄存器R1中的数左移,移动位数存放在寄存器R0中,结果放在R1中。

即实现(R1)R1

6、数据传送指令:寄存器R0中的数据送到寄存器R1中。即实现(R0)→ R1。

7、取数指令:取出存储器中的一个数(地址在寄存器R0中)送到寄存器R1中。即实现

((R0))→(R1)

8、无条件转移指令:寄存器R1中的地址送到PC中。即实现(R1)→ PC

指令的微操作如下表所示,以教材P122的CPU控制图(省去了M/、ADS)为例:

由于每条指令取指周期的微操作是一样的,所以可以先设计取指周期微操作的节拍安排。

取指周期:T0:PC→AB,W/=0

T1:DB→IR

T2:PC+1

T0T1T2

加法

M1rs1→GR

(rs1) → ALU

rd →GR

(rd) →ALU

M2+ALU →GR

M1rs1→GR

(rs1) → ALU

rd →GR

(rd) →ALU

M2ALU →GR

M1rs1→GR

(rs1) → ALU

rd →GR

(rd) →ALU

M2ALU →GR

左移

M1rs1→GR

(rs1) → ALU

rd →GR

(rd) →ALU

M2ALU →GR

右移

M1rs1→GR

(rs1) → ALU

rd →GR

(rd) →ALU

M2ALU →GR

数据传送

M1rs1→GR

(rs1) → ALU

M2+ALU →GR

取数M1rs1→GR

(rs1) → ALU

+

ALU→AR,AR→AB

W/=0

DB→DR

M2DR→ALU

+ALU →GR

无条件转移

M1rs1 →GR

(rs1) →ALU

M2+ALU→PC

系统框图:

工作

周期节拍微操作命令加法左移右移数据

传送

取数无条件转移
ADDANDORSAL

SAR

MOVLDAJMP
取指周期 T0PC→AB

11111111
W/=0

11111111
T1DB→IR

11111111
T2PC+111111111
分析周期

T0

rs1→GR

11111111
(rs1)→ALU

11111111
+1

T1

ALU→AR

1
AR→AB

1
W/=0

1

T2

rd→GR

11111
 (rd)→ALU

11111
DB→DR

1
执行周期T0DR→ALU

1

T1

+1111
1
1
1
1

T2

ALU→GR

1111111
ALU →PC

1
所有指令:

PC→AB  =  M0·T0

W/=0  =  M0·T0+M1·T1·取数

DB→IR   =  M0·T1

PC+1  =  M0 ·T2

rs1→GR  =  M1 ·T0

(rs1)→ALU  =  M1 ·T0

+       =  M1 ·T0·取数 +M2·T1·(加+传送+取数+转移)

ALU→AR  =M1 ·T1 ·取数

AR→AB   =M1·T1 ·取数

rd→GR    =M1 ·T2·(加法+与+或+左移+右移)

(rd)→ALU  = M1 ·T2·(加法+与+或+左移+右移)

DB→DR  =  M1 ·T2·取数

DR→ALU  =  M2 ·T0·取数

∧  =  M2·T1·与

∨  =  M2·T1·或

←  =  M2·T1·左移

→   =  M2·T1·右移

ALU→GR  =  M2·T2·(加法+与+或+左移+右移+数据传送+取数)

ALU →PC  =  M2·T2·转移

3、层次结构控制单元:

逻辑图:    

三、VHDL程序

--3-8译码器

library ieee;

use ieee.std_logic_11.all;

entity decoder38 is

          port( S:in std_logic;

              A:in std_logic_vector(2 downto 0);

              Y:out std_logic_vector(7 downto 0));

end decoder38;

architecture behave of decoder38 is

begin

     process(S)

     begin

     if S='1' then

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)<=A(2) and A(1) and A(0);

else Y<="00000000";

     end if;

     end process;

end behave;

--控制单元

--3-8译码器

library ieee;

use ieee.std_logic_11.all;

entity CU is

     port( m:in std_logic_vector(2 downto 0);

           t:in std_logic_vector(2 downto 0);

           d:in std_logic_vector(7 downto 0);

           q:out std_logic_vector(18 downto 0));

end CU;

architecture behave of CU is

signal iq:std_logic_vector(7 downto 0);

begin

iq(0)<=not d(7) and not d(6) and not d(5) and not d(4) and not d(3) and not d(2) and not d(1) and d(0);

iq(1)<=not d(7) and not d(6) and not d(5) and not d(4) and not d(3) and not d(2) and d(1) and not d(0);

iq(2)<=not d(7) and not d(6) and not d(5) and not d(4) and not d(3) and d(2) and not d(1) and not d(0);

iq(3)<=not d(7) and not d(6) and not d(5) and not d(4) and d(3) and not d(2) and not d(1) and not d(0);

iq(4)<=not d(7) and not d(6) and not d(5) and d(4) and not d(3) and not d(2) and not d(1) and not d(0);

iq(5)<=not d(7) and not d(6) and d(5) and not d(4) and not d(3) and not d(2) and not d(1) and not d(0);

iq(6)<=not d(7) and d(6) and not d(5) and not d(4) and not d(3) and not d(2) and not d(1) and not d(0);

iq(7)<=d(7) and not d(6) and not d(5) and not d(4) and not d(3) and not d(2) and not d(1) and not d(0);

q(0)<=not m(2) and not m(1) and m(0) and not t(2) and not t(1) and t(0);

q(1)<=(not m(2) and not m(1) and m(0) and not t(2) and not t(1) and t(0))

          or (not m(2) and m(1) and not m(0) and not t(2) and t(1) and not t(0) and iq(6));

q(2)<=not m(2) and not m(1) and m(0) and not t(2) and t(1) and not t(0);

q(3)<=not m(2) and not m(1) and m(0) and t(2) and not t(1) and not t(0);

q(4)<=not m(2) and m(1) and not m(0) and not t(2) and not t(1) and t(0);

q(5)<=not m(2) and m(1) and not m(0) and not t(2) and not t(1) and t(0);

q(6)<=(not m(2) and m(1) and not m(0) and not t(2) and not t(1) and t(0) and iq(6)) or

          (m(2) and not m(1) and not m(0) and not t(2) and t(1) and not t(0) and (iq(0) or iq(5) or iq(6) or iq(7)));

q(7)<=not m(2) and m(1) and not m(0) and not t(2) and t(1) and not t(0) and iq(6);

q(8)<=not m(2) and m(1) and not m(0) and not t(2) and t(1) and not t(0) and iq(6);

q(9)<=not m(2) and m(1) and not m(0) and t(2) and not t(1) and not t(0) and

(iq(0) or iq(1) or iq(2) or iq(3) or iq(4));

q(10)<=not m(2) and m(1) and not m(0) and t(2) and not t(1) and not t(0) and

(iq(0) or iq(1) or iq(2) or iq(3) or iq(4));

q(11)<=not m(2) and m(1) and not m(0) and t(2) and not t(1) and not t(0) and iq(6);

q(12)<=m(2) and not m(1) and not m(0) and not t(2) and not t(1) and t(0) and iq(6);

q(13)<=m(2) and not m(1) and not m(0) and not t(2) and t(1) and not t(0) and iq(1);

q(14)<=m(2) and not m(1) and not m(0) and not t(2) and t(1) and not t(0) and iq(2);

q(15)<=m(2) and not m(1) and not m(0) and not t(2) and t(1) and not t(0) and iq(3);

q(16)<=m(2) and not m(1) and not m(0) and not t(2) and t(1) and not t(0) and iq(4);

q(17)<=m(2) and not m(1) and not m(0) and t(2) and not t(1) and not t(0)

           and (iq(0) or iq(1) or iq(2) or iq(3) or iq(4) or iq(5) or iq(6));

q(18)<=m(2) and not m(1) and not m(0) and t(2) and not t(1) and not t(0) and iq(7);

end behave;

--层次结构控制单元

library ieee;

use ieee.std_logic_11.all;

entity HCU is

       port( S:in std_logic;

             A:in std_logic_vector(2 downto 0);

             M:in std_logic_vector(2 downto 0);

             T:in std_logic_vector(2 downto 0);

             Q:out std_logic_vector(18 downto 0));

end HCU;

architecture struct of HCU is

signal i:std_logic_vector(7 downto 0);

component decoder38 

          port( S:in std_logic;

              A:in std_logic_vector(2 downto 0);

              Y:out std_logic_vector(7 downto 0));

end component;

component CU

     port( m:in std_logic_vector(2 downto 0);

           t:in std_logic_vector(2 downto 0);

           d:in std_logic_vector(7 downto 0);

           q:out std_logic_vector(18 downto 0));

end component;

begin

   G1:decoder38 port map

(S=>S,A=>A,Y=>i);

   G2:CU port map

(d=>i,t=>T,m=>M,q=>Q);

end struct;

四、仿真设计

3-8译码器仿真设计:

设计数据,输出3-8译码器的译码后的8种编码。

S111111110
A000001010011100101110111101
Y000000010000001000000100000010000001000000100000010000001000000000000000
控制成员仿真设计:

设计仿真数据使每一个微操作都可以有效输出:

m001001001010100
t001010100001010
d0001000000100000100000000100000000000001
q00000000000000000110000000000000000100000000000000000100000000000000011100000000000000001000000
m010

010

010

100100
t010100100001010
d01000000

00001000

01000000

0100000000000010
q0000000000110000010

0000000011000000000000000010000000000000000010000000000000000010000000000000
m100100100100100
t010010010100100
d00000100

00001000

000100000000001010000000
q0000100000000000000

00010000000000000000010000000000000000010*********1000000000000000000
层次控制单元仿真设计:

设计数据依次输出指令的微操作:

例如:若要输出加法指令需要的所有微操作,则需设置数据如下:

S1111
A000000000000
M001001001010
T001010100001
Q0000000000000000011000000000000000010000000000000000010000000000000000110000
S111
A000000000
M010100100
T100010100
Q00000000110000000000000000000001000000010*********
由于每条指令都有取指令这个微指令,因此在下面的测试数据中将不再测试取指令的微操作。

与:

S1111
A001001

001001

M010010100100
T001100010100
Q000000000000011000000000000110000000000000010000000000000010*********
或:

S1111
A010010

010010

M010010100100
T001100010100
Q000000000000011000000000000110000000000000100000000000000010*********
左移:

S1111
A011011

011011

M010010100100
T001100010100
Q000000000000011000000000000110000000000001000000000000000010*********
右移:

S1111
A100100100100
M010010100100
T001100010100
Q000000000000011000000000000110000000000010000000000000000010*********
数据传送:

S111
A101101101
M010100100
T001010100
Q00000000000001100000000000000001000000010*********
取数:

S111
A110110110
M010010010
T001010100
Q000000000000111000000000000001100000100000000100000000000
S111
A110110110
M100100100
T001010100
Q00000001000000000000000000000001000000010*********
无条件转移:

S111
A111111111
M010100100
T001010100
Q000000000000011000000000000000010000001000000000000000000
五、结果分析讨论

3-8译码器时序仿真:

控制单元时序仿真:

层次控制单元时序仿真:

加法:

与:

或:

左移:

右移:

数据传送:

取数:

无条件转移:

实验仿真结果和设计仿真数据时计算的结果吻合,通过这次实验也让我们更好的了解了微操作的概念了以及指令执行的细节之处。

文档

组合逻辑控制单元设计

一、实验课题实验要求:按照题目要求用硬布线(组合逻辑)控制法设计一个简单模型机的控制单元CU(微操作信号产生电路),决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。主要元件设计:1.指令译码器功能要求:3-8译码器。2.控制单元功能要求:假设该模型机有不同类型的指令。包括:算术运算、逻辑运算、移位、数据传送、访存操作、转移等。根据每条指令的功能和时序,分析其执行过程中需要在各个阶段产生的全部微操作,导出产生这些微操作控制信号的逻
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top