计算机组成原理设计实现CU.docx

上传人:b****2 文档编号:16918954 上传时间:2023-04-24 格式:DOCX 页数:15 大小:475.01KB
下载 相关 举报
计算机组成原理设计实现CU.docx_第1页
第1页 / 共15页
计算机组成原理设计实现CU.docx_第2页
第2页 / 共15页
计算机组成原理设计实现CU.docx_第3页
第3页 / 共15页
计算机组成原理设计实现CU.docx_第4页
第4页 / 共15页
计算机组成原理设计实现CU.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

计算机组成原理设计实现CU.docx

《计算机组成原理设计实现CU.docx》由会员分享,可在线阅读,更多相关《计算机组成原理设计实现CU.docx(15页珍藏版)》请在冰豆网上搜索。

计算机组成原理设计实现CU.docx

计算机组成原理设计实现CU

计算机组成原理大作业——设计实现控制单元CU

微程序设计控制单元的主要任务是编写对应各条机器指令的微程序,具体步骤是:

1、首先写出对应机器指令的全部微操作及节拍安排;

2、然后确定微指令格式

3、最后编写出每条微指令的二进制代码(称为微指令码点)。

写出对应机器指令的微操作及节拍安排

不考虑间接寻址和中断的情况。

下面分别按取指阶段和执行阶段列出其微操作序列。

(1)取指阶段的微操作及节拍安排

T0PC->MAR,1->R

T1M(MAR)->MDR,(PC)+1->PC

T2MDR->IR,OP(IR)->微地址形成部件

(编码器:

指令码->微地址)

(此步为组合逻辑,自动完成,不需要控制信号)

 

(2)执行阶段的微操作及节拍安排

执行阶段的微操作由操作码性质而定,同时也需要考虑下地址的形成问题。

1)CLA指令

T00->AC

2)COM指令

T0~AC->AC

3)SHR指令

T0L(AC)->R(AC),AC0->AC0

4)CSL指令

T0R(AC)->L(AC),AC0->ACn

5)STP指令

T00->G

6)ADD指令

T0Ad(IR)->MAR,1->R

T1M(MAR)->MDR

T2(AC)+(MDR)->AC

 

7)STA指令

T0Ad(IR)->MAR,1->W

T1AC->MDR

T2MDR->M(MAR)

8)LDA指令

T0Ad(IR)->MAR,1->R

T1M(MAR)->MDR

T2MDR->AC

9)JMP指令

T0Ad(IR)->PC

10)BAN指令

T0A0*Ad(IR)+~A0*(PC)->PC

 

确定微指令格式

微指令的格式包括微指令的编码方式、下地址的形成方式和指令字长3方面。

(1)微指令的编码方式

直接编码。

具体如下表。

第0位表示控制PC->MAR

第1位表示控制1->R

第2位表示控制M(MAR)->MDR

第3位表示控制(PC)+1->PC

第4位表示控制MDR->IR

第5位表示控制0->AC

第6位表示控制~AC->AC

第7位表示控制L(AC)->R(AC),AC0->AC0

第8位表示控制R(AC)->L(AC),AC0->ACn

第9位表示控制0->G

第10位表示控制Ad(IR)->MAR

第11位表示控制(AC)+(MDR)->AC

第12位表示控制1->W

第13位表示控制AC->MDR

第14位表示控制MDR->M(MAR)

第15位表示控制MDR->AC

第16位表示控制Ad(IR)->PC

第17位表示控制A0*Ad(IR)+~A0*(PC)->PC

 

(2)下地址形成方式

采用微指令的下地址字段和指令的操作码编码两种形成方式。

设置一控制位,0表示前一种方式,1表示后一种方式,作为二路数据选择器的控制端输入。

第18位表示控制下地址形成方式0表示选择顺序控制字段1表示选择操作码编码结果

(3)微指令字长

假设模型机存储字长和指令字长均为16位,地址字长为8位。

采用16位定长指令,操作码为前5位,中间3位保留,地址码为后8位。

指令系统如下:

18个微操作,19条微指令。

不考虑指令系统的扩充,操作控制字段取18位(0~17),下地址控制字段取1位(18),顺序控制字段(下地址)取5位(19~23)。

确定CU的输入输出

输入:

OP操作码,CLK时钟信号

输出:

18位控制信号

确定CU各部件内部逻辑

(1)CMDR

24位寄存器。

(2)微地址形成部件

5位。

操作码左移1位末位补零,形成微程序入口地址。

(3)多路选择

5位2选1多路选择器,A18为控制输入端。

(4)控制存储器

24位×32个存储单元的ROM。

附带5-32译码器。

 

学习用VHDL借助Xilinx软件实现CU

学习流程大致如下:

(1)画出CU各部件连接图,同课本418页图14.16。

(2)阅读博客,了解VHDL语言的功能、语法、设计思路,以及Xilinx的安装、使用。

(3)寻找CU各部件单独实现的代码,借助已有代码的语法结构,修改以实现自己需要的功能。

对于过程中出现的错误,通过XX出的技术博客、英文原版的标准库说明、同学的经验,一一解决。

(4)学习编写testbench,同样也是找相似的代码,读懂,仿照着写出自己的测试要求。

(5)元件调用。

各模块编写完成后,通过XX学习元件调用的方法,从网上优秀课件中找到元件实例化的语法、用法,最终实现整个CU各模块的协同工作。

(6)整个过程都反复的在看VHDL的系统讲解,一开始没有实例,系统讲解不知所云何物,随着在实例中碰到各种问题,再回过头看理论讲解,才不断有所收获。

大约反复5~7遍,可以大体上了解VHDL语言的各个要素以及编写思想。

代码及仿真波形

代码

(1)微地址形成部件

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity uaddr_gen is

    Port ( op :

 in  STD_LOGIC_VECTOR (4 downto 0);

           op_add :

 out  STD_LOGIC_VECTOR (4 downto 0));

end uaddr_gen;

architecture Behavioral of uaddr_gen is

begin

process(op) begin

op_add <= op(3 downto 0)&'0';

end process;

(2)5位2选1多路选择器

library IEEE;

use IEEE.STD_LOGIC_1164.ALL,IEEE.NUMERIC_STD.ALL;

entity MUX is

PORT(

mode  :

IN STD_LOGIC; 输入控制信号

next_add:

IN STD_LOGIC_VECTOR(4 DOWNTO 0); 5位下地址数据端

op_addr  :

IN STD_LOGIC_VECTOR(4 DOWNTO 0); 5位微程序入口地址数据端

out_add :

OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); 5位下地址输出

end MUX;

architecture Behavioral of MUX is

signal tmp:

STD_LOGIC;

begin

tmp <= mode;

process(tmp,next_add,op_addr) begin

case tmp is

when'0'=>out_add<=next_add;

when others=>out_add<=op_addr;

end case;

end process;

end Behavioral;

(3)控制存储器

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.std_logic_unsigned.ALL;            CONV_INTEGER

entity ROM is

    Port ( add :

 in  STD_LOGIC_VECTOR (4 downto 0);

           data_out :

 out  STD_LOGIC_VECTOR (0 to 23));

end ROM;

architecture Behavioral of ROM is

    type microcode_array is array(28 downto 0) of std_logic_vector(0 to 23);

    constant code      :

 microcode_array:

=(

                0=> "110000000000000000000001",

                1=> "001100000000000000000010",

                2=> "0000100000000000001UUUUU",

                4=> "000001000000000000000000",  

                6=> "000000100000000000000000",

                8=> "000000010000000000000000",

               10=> "000000001000000000000000",

               12=> "000000000100000000000000",

               14=> "010000000010000000001111",

               15=> "001000000000000000010000",

               16=> "000000000001000000000000",  

               18=> "000000000010100000010011",

               19=> "000000000000010000010100",             

               20=> "000000000000001000000000",

               22=> "010000000010000000010111",

               23=> "001000000000000000011000",

               24=> "000000000000000100000000",

               26=> "000000000000000010000000",

               28=> "000000000000000001000000",

   others=>"000000000000000000000000"); 

begin

data_out <= code(conv_integer(add));

end Behavioral;

(4)CMDR

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity CMDR is

 GENERIC(n :

 Positive :

= 24); size of counter/shifter

    Port (

 clock   :

 IN Std_logic; serial inputs

 u_op :

 in  STD_LOGIC_VECTOR (0 TO (n1));

    control :

 out  STD_LOGIC_VECTOR (0 TO 17);

 mode_sel:

 out  STD_LOGIC;

    next_add :

 out  STD_LOGIC_VECTOR (4 DOWNTO 0));

end CMDR;

architecture Behavioral of CMDR is

SIGNAL int_reg :

 Std_logic_vector(0 TO 23);

BEGIN

 main_proc :

 PROCESS

 BEGIN

 WAIT UNTIL rising_edge(clock);

 int_reg <= u_op;

 END PROCESS;

 connect internal register to dataout port

 control <= int_reg(0 TO 17);

 mode_sel<= int_reg(18);

 next_add <= int_reg(19 TO 23);

end Behavioral;

(5)总的CU

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity CU is

    Port ( clk :

 in  STD_LOGIC;

           op_code :

 in  STD_LOGIC_VECTOR (4 downto 0);

           ctrl_signal :

 out  STD_LOGIC_VECTOR (17 downto 0));

end CU;

architecture Behavioral of CU is

component CMAR

 GENERIC(n :

 Positive :

= 24); size of counter/shifter

    Port (

 clock   :

 IN Std_logic; serial inputs

 u_op :

 in  STD_LOGIC_VECTOR (0 TO (n1));

    control :

 out  STD_LOGIC_VECTOR (0 TO 17);

 mode_sel:

 out  STD_LOGIC;

    next_add :

 out  STD_LOGIC_VECTOR (4 DOWNTO 0));

end component;

component uaddr_gen

    Port ( op :

 in  STD_LOGIC_VECTOR (4 downto 0);

           op_add :

 out  STD_LOGIC_VECTOR (4 downto 0));

end component;

component MUX

PORT(

mode  :

IN STD_LOGIC; 输入控制信号

next_add:

IN STD_LOGIC_VECTOR(4 DOWNTO 0); 5位下地址数据端

op_addr  :

IN STD_LOGIC_VECTOR(4 DOWNTO 0); 5位微程序入口地址数据端

out_add :

OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); 5位下地址输出

end component;

component ROM

    Port ( add :

 in  STD_LOGIC_VECTOR (4 downto 0);

           data_out :

 out  STD_LOGIC_VECTOR (0 to 23));

end component;

signal op_add_MUX:

std_logic_vector(4 downto 0);

signal mode_MUX  :

std_logic;

signal next_add_MUX:

std_logic_vector(4 downto 0);

signal MUX_CM    :

std_logic_vector(4 downto 0);

signal CM_CMAR   :

std_logic_vector(0 to 23);

begin

u1:

uaddr_gen port map(op_code, op_add_MUX);

u2:

MUX port map(mode_MUX, next_add_MUX, op_add_MUX, MUX_CM);

u3:

ROM       port map(MUX_CM, CM_CMAR);

u4:

CMAR      port map(clk, CM_CMAR, ctrl_signal, mode_MUX, next_add_MUX);

end Behavioral;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1