FC2カウンター FPGAの部屋 Avalon-MMスレーブペリフェラル2(SOPC Builder)
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Avalon-MMスレーブペリフェラル2(SOPC Builder)

Avalon-MMスレーブペリフェラル1(ダイナミック点灯7セグLED)”の続き。
前回は8個のダイナミック点灯7セグメントLEDを制御するAvalon-MMスレーブペリフェラルのVerilogコードを作成したが、これをSOPC Builderに登録する。
これらの作業は、FPGA技術No.5の備州長船さんの第3章 THE AVALONM@STER(Avalon-MMスレーブペリフェラルの作成方法)を参考にさせていただいています。

さて、QuartusⅡからSOPC Builderを立ち上げる。SPOC Builder の内容は下のような感じ。PLLを外に追い出してあるので、PLLは入っていない。前回、作ったVerilogファイルを追加するためにNewボタンをクリックした。
AvalonMMslave7seg_2_090827.png

Component Editorが起動した。Next-> ボタンをクリックした。
AvalonMMslave7seg_3_090827.png

最初にAdd..ボタンをクリックして、トップモジュールのAvalonMM_Slave_Dyna7seg.vを追加した状態。Warningが出ている。
AvalonMMslave7seg_4_090827.png

次に、FreqDiv.vとB27segDec.vも追加した。Warningが出ているのはFPGA技術No.5によると問題ないそうなので、Next-> ボタンをクリックした。(ちなみにFPGA技術No.5には詳しい説明などがいろいろ書いてある)
AvalonMMslave7seg_5_090827.png

Signalsのタブに行くと、下のようになっていた。
AvalonMMslave7seg_6_090827.png

この信号のうち、seven_seg_digit, seven_seg_a, seven_seg_b, seven_seg_c, seven_seg_d, seven_seg_e, seven_seg_f, seven_seg_g, seven_seg_dp を外部信号として登録する。まずはseven_seg_digitのInterfaceをクリックして、New Conduit... を選択した。
AvalonMMslave7seg_7_090827.png

次にSignal Typeからexportを選択した。
AvalonMMslave7seg_8_090827.png

これで外部信号として認識されたそうだ。seven_seg_a, seven_seg_b, seven_seg_c, seven_seg_d, seven_seg_e, seven_seg_f, seven_seg_g, seven_seg_dp も続けてInterfaceをクリックしてconduit_endを選択し、Signal Typeからexportを選択した。Next-> ボタンをクリックした。
AvalonMMslave7seg_9_090827.png

Interfaceタブだが、凄い。。。いろいろなバスの設定などをGUIで出来るみたい。完成度が高そう?
AvalonMMslave7seg_10_090827.png

Signalタブで選択した外部信号もあったが、全部表示されていない。が大丈夫なんだろう?
AvalonMMslave7seg_11_090827.png

波形の下のDeprecatedを展開して、Slave addressing をNATIVEにした。これは、バイトアクセスを許可しないスレーブペリフェラルの場合は必ずNATIVEにする必要があるそうだ。
AvalonMMslave7seg_12_090827.png

次はWarningを消します。Remove Interface With No Signalsボタンをクリックすると、信号を持たないインターフェースが消えて、Warningが消えました。下の図はハイドされていますが、Warningがある時は正常の状態でした。
AvalonMMslave7seg_13_090827.png

Next-> ボタンをクリックしたら、次はComponent Wizardタブ。Group:をPeripheralsに指定した。これで終了なので、Finishボタンをクリックした。
AvalonMMslave7seg_14_090827.png

Save Changesダイアログが開くので、Yes,Saveボタンをクリックした。
AvalonMMslave7seg_15_090827.png

SOPC Builderに戻ると、System ContentsにAvalonMM_Slave_Dyna7segが登録されているので、それを選んでAdd...ボタンをクリックすると、AvalonMM_Slave_Dyna7segが登録された。
AvalonMMslave7seg_16_090827.png

アドレスを見ると0x20から0x3fまでの32バイトアサインされている。これは32ビットレジスタ8個分ということになって、Verilogファイルと合致している。これで終了なので、Finishボタンをクリックした。
Save Changes?ダイアログが出るので、Yesボタンをクリックした。
System generationが成功しました。良かったです。
AvalonMMslave7seg_17_090827.png

QuartusⅡに戻ってコンパイルした。コンパイル成功。
Entityを見ると、AvalonMM_Slave_Dyna7segが入っていた。Total logic elementsは 87% で以前に比べ 2% 増えていたが、まだSOPC Builderで作ったNiosⅡプロセッサのインスタンスに7セグメント関係の入出力が出ているはず。それをトップに接続する必要があるので、もっと増えると思う。次の回でそれらを行う。(2009/08/28 修正)
AvalonMMslave7seg_18_090827.png


FPGA技術No.5では、PCMコアの補足資料も付いています。上のAvalonMM_Slave_Dyna7seg はIRQを付けませんでしたが、IRQの接続方法も載っています。
  1. 2009年08月27日 21:03 |
  2. SOPC Builder
  3. | トラックバック:0
  4. | コメント:4

コメント

ワーニングが出てるところは「Remove Interface・・・」ボタンで消えます。
ある程度信号名から自動認識しようとするんですが、特に命名則に沿わない外部端子は必ず誤認識するんですよね。
命名則に沿わない端子は全部Exportにするか、いっそのこと空白にしてくれた方が間違えも手間も減るような気がします。
  1. 2009/08/27(木) 14:01:31 |
  2. URL |
  3. 独楽 #-
  4. [ 編集 ]

独楽さん、こんにちは。
>ワーニングが出てるところは「Remove Interface・・・」ボタンで消えます。
ご指摘ありがとうございます。
実は、今からやるところだったのです。書きかけなのに出したのが悪いんですが。。。それもFPGA技術に載っています。
  1. 2009/08/27(木) 14:26:45 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

おぉ、先走ってしまい、申し訳ありません。
Xilinxの情報で助けていただいてるので、ちょっとお節介入ってました・・
  1. 2009/08/27(木) 23:24:26 |
  2. URL |
  3. 独楽 #-
  4. [ 編集 ]

独楽さん、こんにちは。
これにこりずにどんどんご指摘ください。今回も最後を修正しました。NiosⅡプロセッサのインスタンスが信号線が増えているはずなのに、トップのVerilogファイルが直っていませんでした。修正いたします。
ドジな私ですが、どうか見捨てないでください。
  1. 2009/08/28(金) 04:28:27 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1214-571f2749
この記事にトラックバックする(FC2ブログユーザー)