Powered by SmartDoc

例題による演習

FPGAの合成から配置配線までの流れ

本演習では, Verilog-HDLのRTL記述から, FPGA用の回路を論理合成するために, Altera社のQuartusIIを用いる. QuartusIIはFPGAベンダであるAltera社が開発しているツールである. Verilog-HDLのRTL(レジスタトランスファレベル)記述を入力とし,ターゲットとするFPGAの型番を入力し,ピン配置を指定すると,回路の合成からFPGAへの配置配線までを行うことができる.

過去の演習では, Synopsys社のFPGA Compiler IIや, Synplicity社のSynplify Pro等のFPGA向けの論理合成ツールを使用していたが, Quartus IIの論理合成機能の進化により, Quartus IIのみで十分となった.

ただし,大規模な回路の論理合成にはやはり,専用の論理合成ツールを使った方が性能が良くなることが多いのは事実である.

Verilog-HDLシミュレーション

  1. 本演習専用のディレクトリ(フォルダ)を作成する.

    % mkdir roulette
    % cd roulette
    

    以下では,すべてroulette以下に,ファイルを作成またはコピーする.

  2. シミュレーションと合成に用いるVerilog記述を用意する.下記のファイルをダウンロードする.
  3. verilogコマンドによりVerilog-XLシミュレータを実行する.

    % verilog roulettesim.v roulette.v
    

    下のような実行結果が画面に表示されるであろう.

         0: xxxxxx
        10: 000001
        30: 000010
     40990: 000100
     81950: 001000
    122910: 010000
    163870: 100000
    

    ここで用いるVerilog記述は, 7セグメントLEDをルーレット状に光らせる回路である.シミュレーション結果ではルーレットで点灯するLEDに1が表示される.

    roulette.v
    module roulette(out,CLK,RST);
      input CLK,RST;
      output [5:0] out;
      reg [5:0] out;
      reg [10:0] divide; // 11ビット分のカウンタで, 2の11乗(2048回)数える.
      always @(posedge CLK or negedge RST)
        begin
          if(!RST)
            begin
              out<=1;divide<=0;
            end
          else
            begin
              if(divide==0)// 2048回数えたら, ルーレットを一つ進める. 
                begin
                  out[0]<=out[5];
                  out[1]<=out[0];
                  out[2]<=out[1];
                  out[3]<=out[2];
                  out[4]<=out[3];
                  out[5]<=out[4];
                end
              divide<=divide+1; // クロック毎に1カウントアップ. 
            end
        end
    endmodule
    
    テストフィクスチャ roulettesim.v
    `timescale 1ns/100ps 
      // シミュレーションの単位を1nsにして, 100psの精度で出力を表示します. 
    module roulettesim;
      reg CLK,RST;
      wire [5:0] out;
    `ifdef MAX
        roulette I0(.out5(out[5]),.out4(out[4]),.out3(out[3]),.out2(out[2]),
          .out1(out[1]),.out0(out[0]),.CLK(CLK),.RST(RST));
         // この書式については, 後程説明する. 
    `else
      roulette I0(.out(out),.CLK(CLK),.RST(RST));
    `endif
      initial begin 
        CLK=0;RST=1;
        #10 RST=0;
        #10 RST=1;// 10nsリセットを入れる. 
        #200000 $finish;// その後, 200usec動作させる. 
      end
      always #10 // クロックは, 20ns毎にいれます. 
        CLK=~CLK;
      initial
        $monitor("%d: ",$time,"%b",out);
      initial
        begin
          $dumpfile("roulette.vcd"); //出力ファイルの指定. 
          $dumpvars;// すべての信号を保存する. 
        end
    `ifdef SDF
      initial
        $sdf_annotate("roulette/roulette.sdo",I0,,"sdf.log", "TOOL_CONTROL", 
            "1.000000:1.000000:1.000000","FROM_MTM" ); // SDFの読み込み
        
    `endif
    endmodule
    

QuartusIIによる論理合成とFPGAの配置配線

  1. Quartus IIを立ち上げる(図[Quartus起動後の画面]).
  2. 初回立ち上げ時には, 図[初回起動時の選択画面]のウィンドウが表示されるので,そのまま, OKを押す.さらに, 図[警告画面]のウィンドウが表示されるが,こちらは, Noを押す.
    初回起動時の選択画面
    警告画面
  3. まず, 図[New Project]のウィンドウが表示されるので, "Yes"を選択する.間違って, Noを選択してしまった場合は, File→New Project Wizardを実行する.
    % cd ~/roulette/
    % quartus
    
    Quartus起動後の画面
    New Project
  4. Project Wizardウィンドウ(図[Project Wizard 1])が表示されるので, Nextボタンを押す.
    Project Wizard 1
  5. 図[Project Wizard 2]の通り,上から順番に"./", "roulette", "roulette"と入力してNextを押す.
    Project Wizard 2
  6. 図[Project Wizard 3]の通り, roulette.vをFile Nameとして指定して, Finishボタンを押す.間違って途中で, Finishを押してしまった場合は, Project→Add/Remove Files in Projectを実行してroulette.vを指定する.
    Project Wizard 3
  7. Select Familyのウィンドウが表示されたら, Cycloneを選択する.
    Select Family
  8. roulette.tclをダウンロードして, roulette/以下に置く.
  9. Tools->Tcl Scriptsを実行し, Project内にあるroulette.tclを選択して, Runボタンを押す.これにより, FPGAデバイスの設定とボードに対応したピンのアサインが行なわれる.
  10. 紫の矢印(Start Compilation)を押す.

ボードへのダウンロード

  1. ワークステーションのシリアルポートおよびボードにケーブルを接続して,電源を入れる.ケーブルの向きは図[ケーブルの接続(それぞれ赤いケーブルが同じ向きになるように接続する.) ]を参照する.
  2. Tools→Programmerを実行する.
  3. この手順は最初の書込の時だけ実行する. Hardware Setupボタンをクリックする. Add Hardwareボタンをクリックして, 図[Add Hardware]の通り, Master Blaster, /dev/term/a, 115200に設定して, OKボタンをクリックする.さらに, Hardwareウィンドウ内のMasterBlasterを選択した状態で, Select Hardwareボタンを押す. 図[Hardware Setup]の通り, Currently selected hardwareが, MasterBlaster /dev/term/aになっていればOKである. Closeボタンを押す.
    Add Hardware
    Hardware Setup
  4. Program/Configureのところにチェックを入れる(図[roulette.sofの選択]).
    roulette.sofの選択
  5. Startボタンを押すと, FPGAへの書込が始まる.
  6. 書込が終了すると, 7セグメントLEDの一つが回り始める.クロック周波数を変えるつまみを回して,回転する速度が変化することを確認せよ.