WORK9

ここではx86プロセッサには出荷数量でおよばないが、それでもNintendo64やPlayStationそして多数のレーザプリンター等で用いられているRISC型MPUのMIPSプロセッサの一部の命令を実行するminimipsプロセッサを設計する。


minimipsプロセッサ仕様

** refer to the section 5.1-5.3 of Morgan Kaufmann Publisher, "COMPUTER ORGANIZATION & DESIGN: the hardware / software interface 2nd", John L. Hennessy and David A. Patterson
** 日経BP社「コンピュータの構成と設計」第2版、パターソン&ヘネシー、第5.1〜5.3章参照

サポート命令

区分 命令 意味 備考
算術演算 add add R1,R2,R3 R1 <= R2 + R3 加算
subtract sub R1,R2,R3 R1 <= R2 - R3 減算
論理演算 and and R1,R2,R3 R1 <= R2 and R3 各ビットごとにAND
or or R1,R2,R3 R1 <= R2 or R3 各ビットごとにOR
データ転送 load word lw R1, 100(R2) R1 <= メモリ[R2+100] メモリからレジスタへの転送
store word sw R1, 100(R2) メモリ[R2+100] <= R1 レジスタからメモリへの転送
条件分岐 branch on equal beq R1,R2,25 if (R1=R2) go to PC+4+100 等しい時にPC相対分岐
set on less than slt R1,R2,R3 if (R2<R3) R1<=1 else R1<=0  
無条件ジャンプ jump j 2500 go to 10000 絶対アドレスジャンプ

マシンアーキテクチャ


命令フォーマット

命令 フォーマット名 備考
6ビット 5ビット 5ビット 5ビット 5ビット 6ビット
add R形式 0 2 3 1 0 32 add R1, R2, R3
sub 0 2 3 1 0 34 sub R1, R2, R3
and 0 2 3 1 0 36 and R1, R2, R3
or 0 2 3 1 0 37 or R1, R2, R3
slt 0 2 3 1 0 42 slt R1, R2, R3
lw I形式 35 2 1 100 lw R1, 100(R2)
sw 43 2 1 100 sw R1, 100(R2)
beq 4 1 2 25 beq R1, R2, 25
j J形式 2 2500 j 2500

 

フォーマット名 6ビット 5ビット 5ビット 5ビット 5ビット 6ビット 備考
R形式 op rs rt rd - func  
I形式 op rs rt address  
J形式 op address  

アドレスについて


命令ROMとデータRAMのアドレスについて


課題

命令ROM irom.vhd

データRAM dram.vhd

使用パッケージ alu_pkg.vhd

テストベンチ test_minimips.vhd

作成するMPU minimips.vhd


補足説明(1): 命令ROM "irom.vhd"

entity IROM is
  port ( Add : in unsigned (5 downto 0);
        Dout : out unsigned (31 downto 0) );
end entity IROM;

 


補足説明(2): バブルソートプログラム

データRAMの内容

    データRAM   ソート後の内容
バイトアドレス dramのAdd入力 00 01 10 11   00 01 10 11
256 0 0 -> 7
260 1 1 -> 6
264 2 2 -> 5
268 3 3 -> 4
272 4 4 -> 3
276 5 5 -> 2
280 6 6 -> 1
284 7 7 -> 0
    ...    
384 32 256   256
388 33 32   32
392 34 4   4
    ...    

命令ROMの内容

    命令ROMの内容  
バイトアドレス iromのAdd入力 00 01 10 11 説明
0 0 NOP  
4 1 NOP  
8 2 LW R1, 388(R0) R1 <= 32
12 3 LW R2, 384(R0) R2 <= 256, 先頭番地
16 4 LW R3, 392(R0) R3 <= 4
20 5 ADD R5, R1, R2 R5 <= 288, 最終番地の次
24 6 SUB R5, R5, R3 R5 <= R5 - 4 = 284, 最終番地
28 7 ADD R6, R2, R0 R6 <= R2 = 256 転送、R0は0固定
32 8 ADD R7, R6, R0 R7 <= R6、比較するデータ1のアドレス
36 9 ADD R8, R7, R3 R8 <= R7 + 4、比較するデータ2のアドレス
40 10 LW R10, 0(R7) R10 <= 比較するデータ1
44 11 LW R11, 0(R8) R11 <= 比較するデータ2
48 12 SLT R9, R10, R11 R10 < R11ならR9 <= 1、違うならR9 <=0
52 13 BEQ R9, R0, +2 R9が0ならばPC=PC+4+2*4=64へ分岐
56 14 SW R10, 0(R8) 比較データ1をスワップしてメモリへ
60 15 SW R11, 0(R7) 比較データ2をスワップしてメモリへ
64 16 ADD R7, R7, R3 R7 <= R7 +4, アレイインデックスを進める
68 17 BEQ R7, R5, +1 インデックスが最終アドレスならLOOP1を抜ける
72 18 J 9 9番地へジャンプ、LOOP1
76 19 SUB R5, R5, R3 R5 <= R5 - 4, 最終番地を下げる。ここに最小値がある。
80 20 BEQ R5, R2, +1 最終番地が先頭番地と一致するとLOOP2を抜ける。
84 21 J 8 8番地へジャンプ、LOOP2
88 22 NOP  

補足説明(3): データRAM  "dram.vhd"

entity DRAM is
    port ( Add : in unsigned (5 downto 0);
         Clock : in std_logic;
            WE : in std_logic;
           Din : in unsigned (31 downto 0);
          Dout : out unsigned (31 downto 0) );
end entity DRAM;


補足説明(4): minimipsマイクロプロセッサ例1(シングルサイクル実行版)  "minimips.vhd"

entity MINIMIPS is
  port ( Clock : in std_logic;
        Reset : in std_logic; -- reset when it is '1'
         Iadd : out unsigned (5 downto 0); -- Address for IROM
         Inst : in unsigned (31 downto 0); -- Instruction from IROM
         Dadd : out unsigned (5 downto 0); -- Address for DRAM
           WE : out std_logic; -- DRAM Write Enable
        Wtdata : out unsigned (31 downto 0); -- Write data to DRAM
        Rddata : in unsigned (31 downto 0) ); -- Read data from DRAM
end entity MINIMIPS;