Changes between Initial Version and Version 1 of Ex06 ALU制御モジュールの設計2017


Ignore:
Timestamp:
May 22, 2017 4:02:12 PM (9 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex06 ALU制御モジュールの設計2017

    v1 v1  
     1トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2017 
     2 
     3= ALUの制御 =  
     4第5版上巻p.251の「ALU制御ユニット」の項を参考にして、ALUを制御するためのユニットを設計します。 
     5 
     6まずここで設計するALU制御ユニットのテンプレートは以下のようになります。 
     7 
     8{{{ 
     9module  ALUcontrol(ALUop,FA, FB, ALUoperation );     
     10       
     11input [1:0]     ALUop;  
     12input [5:0]     FA;// {F5,F4,F3,F2,F1,F0}  
     13input [5:0]     FB;// {F31,F30,F29,F28,F27,F26}  
     14output [3:0]    ALUoperation;  
     15wire        ALUOperation0, ALUOperation1, ALUOperation2;  
     16       
     17      assign ALUoperation0 = ...;  
     18       
     19      assign ALUoperation1 = ...;  
     20       
     21      assign ALUoperation2 = ...;  
     22       
     23      assign ALUoperation = {...};  
     24endmodule      
     25}}} 
     26 
     27ALUop(2 bit)は主制御ユニットからの入力です。FAとFB(それぞれ6 bit)も入力です。 
     28これはMIPS命令(32 bit)の一部を表します。 
     29命令の各ビットを下位からF0-F31とした時に、FAはF0 - F5を、FBはF26 - F31を表すこととします。 
     30ALU制御ユニットはALUop, FA, FBを組み合わせて、 
     31教科書にあるようにALUを制御するための4 bitの信号を作る必要があります(図4.12と4.13)。 
     32今回設計するプロセッサでは、イミディエート命令を追加するため、以下の修正が必要です。 
     33 
     34追加されるイミディエート命令は、命令語の上位6ビット(FB)に演算の種類が入っているため、 
     35イミディエート命令をサポートするためには、上位6ビットの内容もALU制御ユニットに入力しなければなりません。 
     36さらに、何らかの手段によってALU制御ユニットに、現在実行中の命令がイミディエート命令であることを伝えなくてはなりません。 
     37 
     38ここでは、ALUOpで未使用の組み合わせだった"2'b11"という値をイミディエート命令であることを表すことにします。 
     39この結果、図4.12のALU制御ビットの構成は次のように変更されます。 
     40  
     41[[Image(http://galaxy.u-aizu.ac.jp/note/raw-attachment/wiki/Ex05%E8%AA%B2%E9%A1%8C2015/ALU1.png)]] 
     42 
     43上記の表に対応して、教科書図4.13、ALU制御コードの真理値表も以下のように拡張されます。 
     44 
     45[[Image(http://galaxy.u-aizu.ac.jp/note/raw-attachment/wiki/Ex05%E8%AA%B2%E9%A1%8C2015/ALU2.png)]] 
     46 
     47この真理値表をもとにして、出力であるALUoperation(4 bit)を設計してください。 
     48まず、真理値表から、ALUoperation![3]は常に偽(0)であることがわかります。 
     49他のビットは、それが真(1)になるになる条件を考えてください。 
     50例えば、ALUoperation![2]が真になる組み合わせは: 
     51 
     52[[Image(http://galaxy.u-aizu.ac.jp/note/raw-attachment/wiki/Ex05%E8%AA%B2%E9%A1%8C2015/ALU3.png)]] 
     53 
     54の時です。 
     55 
     56この真理値表の1行目だけを考慮すると、assign文を使って 
     57{{{ 
     58  assign ALUoperation[2] = (ALUop[1] == 1'b0 && ALUop[0] == 1'b1); 
     59}}} 
     60 
     61または 
     62 
     63{{{ 
     64  assign ALUoperation[2] = (ALUop == 2'b01); 
     65}}} 
     66と書くことができます。この文は括弧内の条件が満たされた時にALUoperation![2]が真となることを意味します。 
     67真理値表の他の行もあわせて正しくなるように、ALUoperation![2]を定義してください。 
     68 
     69ALUoperation![1]とALUoperation![0]は同様に真理値表を求めてから、assign文を考えてください。 
     70 
     71 
     72== 課題:ALU制御ユニットを設計する == 
     73以上の説明に従ってALU制御ユニット(ファイル名"ALUcontrol.v")を設計しなさい。 
     74 
     75設計するALU制御ユニットへの入力は"ALUop"と"FA"と"FB"であり、最初の図よりその組合せは11パターンあります 
     76(LWとSWは入力が同じのため)。 
     77この11パターンの場合に正しい動作をするかどうかを、以下のテストベンチの例を参考にして動作検証をしなさい。 
     78 
     79テストベンチのテンプレート: 
     80{{{ 
     81`timescale 1ns/1ps       
     82       
     83`include "ALUcontrol.v"    
     84       
     85module  ALUcontroltestbench;  
     86       
     87reg [1:0]     ALUop;  
     88reg [5:0]     FA;  
     89reg [5:0]     FB;  
     90wire [3:0]   ALUoperation; 
     91 
     92ALUcontrol     aluc(ALUop, FA, FB, ALUoperation);  
     93       
     94initial       
     95 begin       
     96       
     97  $dumpfile("ALUcontroltestbench.vcd");       
     98  $dumpvars(0, aluc);       
     99       
     100  #0 ALUop = 2'b00;  FA= 6'b000000;  FB= 6'b000000;  // LW&SW 
     101       
     102  #100  
     103       
     104  $display( $time, " ALUoperation=%h", ALUoperation); // should be "0010"      
     105       
     106  ALUop = 2'b01;  FA= 6'b000000;  FB= 6'b000000;  // Branch on Equal 
     107      
     108  #100        
     109       
     110  $display( $time, " ALUoperation=%h", ALUoperation); // should be "0110"      
     111       
     112//  以下残りの9パターンについて繰り返し 
     113  
     114  $finish;        
     115 end       
     116endmodule      
     117}}}