計算機組成原理課程設計

  1. 設計任務
  1. 指令:12號、30號、41號、46號58號指令設計;
  2. 模型機硬件:寄存器組R0-R3設計與實現;
  3. 數字電路:奇偶發生器74LS180設計與實現;
  1. 設計總要求

總線結構:單總線,數據總線位數8位、地址總線8位;

存儲器:內存容量64K*8bit l

控制器:用硬聯線控制器實現26位微操作控制信號 l

運算器:單累加器,實現加、減等8種操作 l

外設:n

輸入:用開關輸入二進制量n

輸出:7段數碼管和LED顯示 l

指令系統規模:64條指令,7種類型,5種尋址方式

三、設計報告的內容

  1. 設計題目與設計任務
  1. 指令系統設計

表1:指令系統設計

編號

指令

機器碼1

機器碼 2

注            釋

12

ADDC  A,  #II

001010

I I

將立即數II加入累加器A中帶進位

30

MOV  A,  @R?

011101

 

將間址存儲器的值送到累加器A中

41

JC      MM

101000

MM

當進位標誌R_CY=1時,跳轉到MM地址

46

CMP   A,  R?

101101

 

比較A與R?是否相等,即A-R,置標誌位Z

58

CPL    A

111001

 

寄存器A 取反,再放入累加器A中

  1. 模型機硬件設計:寄存器組R0-R3

圖1:寄存器組原理圖

  1. 奇偶發生器74LS180:9位奇偶產生器/校驗器

74ls180有8個數據位(A~H)及一個奇偶位(ODD,EVEN)。通過級聯可拓展字長。

引出端符號:

A~H:數據輸入端

EVEN:偶控制輸入端

FEV:偶輸出端

FOD:奇輸出端

ODD:奇控制輸入端    

  1. 前言(緒論)(設計的目的、意義等)
  1. 設計的目的主要是回顧課本和實際設計的訓練,指令的設計是對計算機組成原理實驗課的複習和應用。
  2. 用VHDL硬件描述語言實踐設計寄存器組R0-R3,可以培養學生的動手實踐能力,增強對計算機硬件組成與連線的認識,瞭解片選寄存器和寄存器的具體構造。
  3. 對奇偶產生器74LS180的設計可以同樣幫助學生理解計算機芯片組成,提高電路設計能力。
  1. 設計主體(各部分設計內容、分析、結論等)

系統設計

  1. 模型機邏輯框圖

圖2:模型機邏輯框圖

  1. 芯片引腳圖

圖3:芯片引腳圖

  1. CPU邏輯結構框圖

圖4:CPU邏輯結構框圖

 

  1. 指令系統設計

表2:指令系統設計

編號

指令

指令類型

尋址方式

12

ADDC  A,  #II

算術運算指令

立即數尋址

30

MOV  A,  @R?

數據傳送指令

寄存器間接尋址

41

JC      MM

程序跳轉控制類指令

存儲器直接尋址

46

CMP   A,  R?

邏輯運算指令

寄存器直接尋址

58

CPL    A

邏輯運算指令

累加器尋址

 

  1. 微操作控制信號

1. XRD :外部設備讀信號,當給出了外設的地址後,輸出此信 號,從指定外設讀數據。

2. EMWR:程序存儲器EM寫信號。

3. EMRD:程序存儲器EM讀信號。

4. PCOE:將程序計數器PC的值送到地址總線ABUS上(MAR)。

5. EMEN:將程序存儲器EM與數據總線DBUS接通,由EMWR 和EMRD決定是將DBUS數據寫到EM中,還是從EM讀出數據 送到DBUS。

6. IREN:將程序存儲器EM讀出的數據打入指令寄存器IR。

7. EINT:中斷返回時清除中斷響應和中斷請求標誌,便於下次 中斷。

8. ELP: PC打入允許,與指令寄存器的IR3、IR2位結合,控制 程序跳轉。

9. FSTC:進位置1,CY=1

10.FCLC:進位置0,CY=0

11. MAREN:將數據總線DBUS上的地址打入地址寄存器MAR。

12. MAROE:將地址寄存器MAR的值送到地址總線ABUS上。

13. OUTEN:將數據總線DBUS上數據送到輸出端口寄存器OUT 裏。

14. STEN:將數據總線DBUS上數據存入堆棧寄存器ST中。

15. RRD: 讀寄存器組R0-R3,寄存器R?的選擇由指令的最低 兩位決定。

16. RWR: 寫寄存器組R0-R3,寄存器R?的選擇由指令的最低 兩位決定。

17. CN: 決定運算器是否帶進位移位,CN=1帶進位,CN=0不 帶進位。

18. FEN: 將標誌位存入ALU內部的標誌寄存器。

19. WEN: 將數據總線DBUS的值打入工作寄存器W中。

20. AEN:將數據總線DBUS的值打入累加器A中。

21-23:    X2~ X0 : X2、X1、X0三位組合來譯碼選擇將數據送到 DBUS上的寄存器。

24-26:    S2~ S0 : S2、S1、S0三位組合決定ALU做何種運算

 

  1. 指令執行流程

表3:指令執行流程

編號

助記符

功能

機器碼

週期總數CT

節拍數

微操作

控制信號

涉及的硬件

 

1

_FATCH_

取指令

000000XX

010

T0

PC→MAR

PCOE MAREN

PC, MAR , EM, W , IR

T1

EM→W

EMEN EMRD WEN

T2

W→IR

PC + 1→PC

IREN

12

 

 

ADDC  A,  #II

將立即數II加入累加器A中帶進位

 

 

001010

I I

101

T3

PC→MAR

PCOE MAREN

PC, MAR, EM, W, A,ALU, F

T4

EM→DBUS→W PC+1→PC

EMRD EMEN WEN

T5

A,W→ALU→F ALU→A

FEN AEN

30

 

 

MOV  A,  @R?

將間址存儲器的值送到累加器A中

011101

101

T3

R?→MAR

PCOE MAREN

PC, MAR, EM, W, DBUS, R

T4

EM→DBUS→W PC+1→PC

EMRD EMEN WEN

T5

W→DBUS→A

S()

41

JC      MM

當進位標誌R_CY=1時,跳轉到MM地址

101000MM

110

R_CY=1

PC→MAR

PCOE

MAREN

PC,MAR,EM,,DBUS, W,ST

T3

T4

EM→PC

PC+1→PC

EMEN

EMRD

ELP

R_CY=0

PC+1→PC

 

T3

46

CMP  A,  R?

比較A與R?是否相等,即A-R,置標誌位Z

101101

011

 

T3

R?→W

RRD,WEN

PC, MAR, EM, W,

 

T4

A→W

S2S1S0(001),

FEN(R_ZF)

58

CPL    A

寄存器A 取反,再放入累加器A中

111001XX

011

T3

Not A->A

AEN,S=100

A,

ALU

 

圖5:指令流程圖

(5)組合邏輯控制器設計

EMRD=M0*T1+M1*INS37*T5+M1*(INS8+INS37)*T4

POCE=M0*T2+M1*(INS37*T6+INS8*T5)

EMEN=M0*T1+M1*(INS37*T5+INS8*T4)

IREN=M0*T0

MAREN=M0*T2+M1*INS37*T6+M1*(INS8+INS37)*T5

RRD=M1*INS9*T4

WEN=M0*T1+M1*(INS8+INS9+INS37)*T4+M1*INS37*T3

AEN=M0*T1+M1*T3

X=M1*T3*(INS8+INS9+INS58)*(100)

S=M1*T3*(IINS8*(000)+INS9*(100)+INS58*(110)

其他信號邏輯表達式恆爲假。

(6)微程序控制器設計

微指令格式分爲 3 個字段:

微命令字段:26 位,對應 26 個微信號(採用直接控制法)。

操作控制字段:1 位,用於控制下址的形成。

下址字段:8 位,對應 256 個微指令。

微命令字段(26位)

P0

A7A6A5A4A3A2A1A0

 

系統實現

  1. 模型機實現
  1. 邏輯電路的圖形符號表示、功能            

圖6:單個寄存器(原理圖)

圖7:設計後實現效果圖

 

圖8:寄存器組R0-R3電路圖(原理圖)

 

圖9:實現的效果圖

 

 

功能是傳輸(輸入輸出)以及暫存。工作原理是通過片選選擇一個寄存器,00/01/10/11分別對應四個寄存器。

 

  1. 指令所涉及的微操作控制信號

D爲數據輸入(d_input[7:0])

R爲數據輸出(DR_data[7:0]、SR_data[7:0])

CLK爲時序控制,有統一的時鐘信號

EN爲讀寫控制端(DRWr)

RST爲復位端(reset),清零

Sel爲片選信號

  1. 系統實現

模型機硬件:寄存器組R0-R3設計與實現

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;



---- Uncomment the following library declaration if instantiating

---- any Xilinx primitives in this code.

--library UNISIM;

--use UNISIM.VComponents.all;



entity regfile is

Port (   DR: in std_logic_vector(1 downto 0);

SR: in std_logic_vector(1 downto 0);   

reset:   in std_logic;

DRWr:    in std_logic;                           

clk: in std_logic;

d_input: in  std_logic_vector(7 downto 0);

DR_data: out std_logic_vector(7 downto 0);        

SR_data:   out std_logic_vector(7 downto 0)   

  );

end regfile;





architecture struct of regfile is

-- components

-- 8 bit Register for register file

component reg

port (

clr: in std_logic;

D: in std_logic_vector(7 downto 0);

clock: in std_logic;

write:  in std_logic;

    sel: in std_logic;

Q: out std_logic_vector(7 downto 0)

);

end component;



-- 2 to 4 Decoder

component  decoder_2_to_4

    port(

sel: in  std_logic_vector(1 downto 0);

sel00: out std_logic;

sel01: out std_logic;

sel02: out std_logic;

sel03: out std_logic

);

end component;



-- 4 to 1 line multiplexer

component mux_4_to_1

port (

input0,

input1,

input2,

input3:  in std_logic_vector(7 downto 0);

sel:  in std_logic_vector(1 downto 0);

out_put: out std_logic_vector(7 downto 0));

end component;





signal reg00, reg01, reg02, reg03

            :std_logic_vector(7 downto 0);



signal sel00 ,sel01 ,sel02 ,sel03

            : std_logic;



begin

Areg00: reg port map(

clr =>  reset,

D => d_input ,

clock => clk ,

write => DRWr ,

    sel => sel00 ,

Q =>  reg00

);



Areg01: reg port map(

clr =>  reset,

D => d_input ,

clock => clk ,

write => DRWr ,

    sel => sel01 ,

Q =>  reg01

);



Areg02: reg port map(

clr =>  reset,

D =>  d_input ,

clock => clk ,

write => DRWr ,

    sel => sel02 ,

Q =>  reg02

);



Areg03: reg port map(

clr =>  reset,

D => d_input ,

clock => clk ,

write => DRWr ,

    sel => sel03 ,

Q =>  reg03

);



-- decoder

des_decoder: decoder_2_to_4 port map

(

sel => DR,

     sel00 => sel00 ,

sel01 => sel01 ,

sel02 => sel02 ,

sel03 => sel03

);



mux1: mux_4_to_1 PORT MAP(

Input0 => reg00 ,

    Input1 => reg01 ,

Input2 => reg02 ,

Input3 => reg03 ,

sel => DR ,

out_put => DR_data

);



mux2: mux_4_to_1 PORT MAP(

input0 => reg00 ,

    input1 => reg01 ,

input2 => reg02 ,

input3 => reg03 ,

sel => SR ,

out_put => SR_data

);



end struct;

測試激勵文件:

library ieee;

use ieee.std_logic_1164.all;

entity reg is

port

(

clr: in std_logic;

D:   in std_logic_vector(7 downto 0);

clock: in std_logic;

write: in std_logic;

    sel: in std_logic;

Q:   out std_logic_vector(7 downto 0)

);



end reg;



architecture behav of reg is

begin

process(clr,clock)

begin

if clr = '0' then

Q <= x"00";

elsif (clock'event and clock = '1') then

if sel = '1' and write = '1' then

Q <= D;

end if;

end if;

end process;

end behav;

  1. 邏輯電路設計

圖10:圖形符號表示

實現的功能是:取反

Verilog HDL描述:

`timescale 1ns / 1ns
module Even_Odd ( d ,even ,odd );

input [0:8] d ;
wire [0:8] d ;

output even ;
wire even ;
output odd ;
wire odd ;

wire [0:3]e;
wire [0:1]f;
wire h;

not
xodd (odd, even);

xor
x0 (e[0], d[0], d[1]),
x1 (e[1], d[2], d[3]),
x2 (e[2], d[4], d[5]),
x3 (e[3], d[6], d[7]),

xf0 (f[0], e[0], e[1]),
xf1 (f[1], e[2], e[3]),

xh0 (h, f[0], f[1]),
xeven (even, h, d[8]);

endmodule

測試文件:

`timescale 1ns / 1ns

module Even_Odd_tb;

//Internal signals declarations:

reg [0:8]d;

wire even,odd;

// Unit Under Test port map

Even_Odd UUT (

.d(d),

.even(even),

.odd(odd));

initial

begin:TEST

reg [0:8] pal;

begin

for (pal = 0; pal< 256; pal = pal +1)

begin

#10;

d = pal;

end

end

end

endmodule

 

【系統測試】

(一)、模型機測試

    1. 功能仿真

圖11:仿真波形圖

    1. RTL級邏輯電路

圖12:RTL級邏輯電路

 

結論:顯然上面的波形圖是錯誤的,應該實現的效果是

圖13:理論效果圖

由於RST爲1,雖然D端輸入數據爲:1111100010101011,輸出端仍爲0(從波形可以看出來),EN爲0,表示寫數據。而下面的RTL級電路圖實現了片選操作。

(二)硬件測試

1、功能仿真

圖15:Zoom fit

圖16:Zoom in

圖17:Zoom out

2、RTL級邏輯電路

圖18:RTL級邏輯電路

結論:根據波形圖,顯然實現了取反功能,對rtl電路圖分析,是通過異或門取反的,原理是A異或1都爲A取反的結果。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章