wiki:Ex04_CA_2020

Version 9 (modified by nakasato, 6 years ago) (diff)

--

トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2020

sshによる端末利用方法

Cadenceのツールを使うためには、sshgateに接続した後、cadsvX.u-aizu.ac.jpにログインしてください。なおサーバーにはcadsv1, cadsv2, cadsv3, cadsv4, cadsv5, cadsv6まで、6台あります。Macから接続するときには、sshgateにも"-X"オプションをつけてログインしてください。

ssh -X cadsv2.u-aizu.ac.jp

以下、web-intのURLは学外からアクセスする場合、IDとパスーワードが必要です。

Cadence起動コマンド

cadsvXに接続した上で

/home/course/logictut/bin/icds.comparch

を実行する。ネットワークが遅い場合若干時間がかかる場合があります。

Cadenceの設定

New Libraryの作成 http://web-int.u-aizu.ac.jp/~nisim/logictut/tutorial1.html ~/CadenceComparch2020 の中に作成される

XC4000の追加 http://web-int.u-aizu.ac.jp/course/comparch/xc4000.html

起動に問題があるとき http://web-int.u-aizu.ac.jp/course/comparch/startup.html

回路作成の復習(論理回路設計論と同じ内容です) http://web-int.u-aizu.ac.jp/~nisim/logictut/top.html

Ex04 課題1

http://web-int.u-aizu.ac.jp/course/comparch/ALU.html

Ex04 課題2

http://web-int.u-aizu.ac.jp/course/comparch/mipsreg.html

レポートの内容

ALUシミュレーションの testfixture ファイルとシミュレーション結果。シミュレーションの波形には、それぞれの演算についての時間区間を明示し、演算結果に対しては “加算の結果” 等の説明を書き入れる。レジスタファイルのシミュレーションのtestfixtureファイルとシミュレーション結果。結果には要所要所に説明を書き込むこと。

補足1: xc4000のライブラリを利用して出力がzになる場合の対処

Run Directoryを作り直してください。そのためには、シミュレータのウィンドウに表示されているRun Directoryの末尾を、run1, run2などの存在しないものに変更し、Initialize Designボタンを2度押してください。その後出てくるダイアログには"No"を選んでください。

補足2: レジスタファイルについて補足

MIPSプロセッサにおいて、プログラマから見える汎用レジスタには $0 から $31 までの32個があります。 このうち $0 は値が常にゼロである仮想的なレジスタなので、実際のハードウェアでは31個のレジスタからなるレジスタファイルが使われます。 各レジスタの入出力データのビット幅は32ビットです。

レジスタファイルに対する書き込み口や読み出し口のことをポートと呼びます。 今回利用するレジスタファイルは2つの読み出しポートと1つの書き込みポートを備えています。 このことは、2つの異なるレジスタの読み出しと、さらに異なる1つのレジスタへの書き込みを、 1つのクロックサイクルの中で同時に行えるということを意味します。

http://web-int.u-aizu.ac.jp/course/comparch/kadai2_1.gif

入出力信号の説明

  • ReadReg1 と ReadData1 は1つ目の読み出しポートのための信号です。ReadReg1 にレジスタ番号を (0~31) を入力すると該当するレジスタの値が ReadData1 から出力されます(レジスタ番号が 0 のときは常に 0 が出力される)。
  • ReadReg2 と ReadData2 は2つ目の読み出しポートのための信号です。動作は1つ目の読み出しポートと同じです。
  • WriteData、WriteEn、および!WriteRegは書き込みポートを構成します。WriteRegにレジスタ番号を入力し、WriteDataには書き込むデータをセットして、WriteEn を 1 にすると、次のクロックの立ち上がりでデータが該当レジスタに書き込まれます。!WriteEN が 0 のときは、クロックの立ち上がりがあってもデータは書き込まれません。また、レジスタ番号が 0 のときは、レジスタへの書き込みは行われません。
  • CK はクロック信号、CLR はクリア信号です。 CLR が 1 になると全てのレジスタが 0 に初期化されます。

レジスタの利用のためのテストベンチ例

以下のテストベンチは、$a0レジスタに"0xffffffff"を書き込んでいる。(そのまま使うことはできない)

`timescale 1ns/1ps
`include "Registers.v"

module  RegTest;
   reg [4:0]  readreg1,  readreg2,  writereg;
   reg [31:0] writedata;
   reg        writeen;
   reg        ck,clr;
   wire [31:0] readdata1, readdata2;

   initial
     begin
        #0
        ck = 1'b1;
        clr = 1'b1;

        #110
        clr = 1'b0;

        #190
        readreg1 = 5'b00100;

        #100
        writeen = 1'b1;
        writereg  = 5'b00100;
        writedata = 32'hffffffff;
 
        #100
        writeen = 1'b0;
 
        #900

        $finish;
     end // initial begin

   always #50 ck = ~ck;
endmodule