2018-09-05 (水) 15:01:09

公式webサイト

更新履歴

  • 2011-06-25 新規
  • 2011-09-20 「ソフトウェアの作成」を追加
  • 2011-09-26 On-Chip Memoryの値を変更

概要

FPGAに組み込んで使えるCPU・「Mico32」というものがあります。

これは無償で入手、利用することができ、製品に組み込んでも個別のライセンス契約は必要としません。

https://lh6.googleusercontent.com/-z2toVQocupM/Tn-jsL2WliI/AAAAAAAAAjI/cgemH4Vo-VI/intro.png

ここで作成するプロジェクトファイルをダウンロードできます。icon_archive.gifmico32_test.zip

環境準備

Lattice Semiconductorのwebサイトから、LatticeMico Systemを入手し、インストールします。

0.アプリケーションの準備

msb1.png

Mico32の生成には「MSB(MicoSystem? Builder)」を利用します。

「スタート」−「すべてのプログラム」−「Lattice Diamond1.2」−「Accessories」−「LatticeMico32 System」をクリックし、アプリケーションを起動します。


msb2.png

ワークスペースの場所を設定し、「OK」をクリックします。


msb3.png

画面が「MSB」の状態であることを確認します。

1.プラットホーム作成

msb4.png

「File」−「New Platform...」をクリックします。


msb5.png

プラットホーム(CPU)を作成します。

プラットホーム名、デバイスファミリを入力し、「Finish」をクリックします。

町田の野望弐は「LatticeXP2」を搭載しています。


msb6.png

プラットホームが作成されました。

この画面に各種コンポーネントを追加し、CPUを作成していきます。

CPUコアを追加する

msb7.png

まずCPUのコアを追加します。「LatticeMico32」をダブルクリックします。


msb8.png

プログラム開始アドレスを入力します。これはあとで生成する「EBR」と同一のアドレスにすることで、EBRのデータをプログラムとして読み込みを開始します。

「Enable Multiplier」「Instruction Cache Enabled」「Data Cache Enabled」のチェックをはずします。これにより、使用メモリ容量を小さくできます。

「OK」をクリックします。


msb9.png

プラットホームに、モジュールが追加されました。

UARTを追加する

msb10.png

同様に、UARTモジュールを追加します。

「UART」をダブルクリックします。


msb11.png

バッファを利用しないので、チェックをはずし、「OK」をクリックします。


msb12.png

「Wishbone Connection」をクリックし、「●」にします。

On-Chip Memoryを追加する

msb13.png

「On-Chip Memory」をダブルクリックします。


msb14.png

「Base Address(開始アドレス)」と「Size of Memory(メモリサイズ)」を入力します。

開始アドレスは「LatticeMico32」モジュールを追加するときに入力した、開始アドレスと同一にします。


msb15.png

「Wishbone Connection」をクリックします。

GPIOを追加する

msb16.png

「GPIO」をダブルクリックします。


msb17.png

8ポート出力のI/Oを作成します。


msb18.png

ソフトコアCPUを生成する

msb19.png

「Platform Tools」−「Generate Address」をクリックします。


msb20.png

「Platform Tools」−「Generate IRQ」をクリックします。


msb21.png

「Platform Tools」−「Run DRC」をクリックします。


msb22.png

「Platform Tools」−「Run Generator」をクリックします。

FPGAに組み込む準備

msb23.png

生成したソフトコアCPUは「ワークスペースディレクトリ/プラットホームディレクトリ/プラットホーム名/soc」以下に、「プラットホーム名.v」ファイルが生成されます。

Lattice Diamondを起動する

msb24.png

生成したソフトコアCPUを含むFPGAのbitファイルをを生成します。


msb25.png

「File」−「New」−「Project...」をクリックします。


msb26.png

「Next」をクリックします。


msb27.png

プロジェクト名を入力し、「Next」をクリックします。


msb28.png

生成されたソフトコアCPUのHDLソースを組み込むので、「Add Source...」をクリックします。


msb29.png

生成されたソフトコアCPUのHDLソース(ここではcpu1.v)を選択し、「開く」をクリックします。


msb30.png

「Next」をクリックします。


msb31.png

対象とするFPGAを選択し、「Next」をクリックします。

「町田の野望弐」は「LatticeXO2」「LFXP2-8E」「TQFP144」を選択します。


msb32.png

トップモジュールを作成します。

「File」−「New」−「File...」をクリックします。


msb33.png

「Verilog Files」をクリックし、ファイル名の入力します。

「Location」をソフトコアCPUのHDLソースがある場所と同じ場所を指定します。

これは、作成するトップモジュールに記述するインクルード文が、そのファイルの場所を起点とするためです。


msb34.png

次の内容を入力します。

`include "../components/uart_core/rtl/verilog/uart_core.v"
`include "../components/wb_ebr_ctrl/rtl/verilog/wb_ebr_ctrl.v"
`include "../components/gpio/rtl/verilog/gpio.v"
`include "../components/gpio/rtl/verilog/tpio.v"

module cpu(
  input clk_i,
  input reset_n,
  input uartSIN,
  output uartSOUT,
  output [7:0] gpioPIO_OUT
);

cpu1 cpu1_u(
  .clk_i(clk_i),
  .reset_n(reset_n)
  ,.uartSIN(uartSIN)
  ,.uartSOUT(uartSOUT)
  ,.gpioPIO_OUT(gpioPIO_OUT)
);

endmodule

msb35.png

「Process」タブにあることを確認して「Translate Design」をダブルクリックします。


msb36.png

終了後、「Tools」−「Spreadsheet View」をクリックします。


msb37.png

生成したプロセッサができあがっています。

2.ソフトウェアの作成

次にソフトコアCPUに組み込むソフトウェアを作成します。

同様にMSB上で作業します。

プロジェクトの作成

https://lh6.googleusercontent.com/-yiOCzhusWpQ/Tne1G2uroGI/AAAAAAAAAiI/uUeVjyjRgwU/01.png

「C/C++」をクリックします。


https://lh5.googleusercontent.com/-BwA0XpqwrDw/Tne1GsyHtLI/AAAAAAAAAiE/wV1Wi2TpFyc/02.png

「File」−「New」−「mico Managed Make C Project」をクリックします。


https://lh6.googleusercontent.com/-28yx6NNlQWs/Tne1GwL3xmI/AAAAAAAAAiM/ldZcFkW7ktk/03.png

「Project Name」にプロジェクト名、「Location」に保存場所を入力します。

「Select Project Templates」は、ここでは「blank project」をクリックします。

「Finish」をクリックします。

ソースファイルの作成

https://lh4.googleusercontent.com/-LvBxHaL3J0Y/Tne1G9yVcRI/AAAAAAAAAiQ/Bh89X7Oyhp8/04.png

「File」−「New」−「Source File」をクリックします。


以下の内容を入力します。

/* Mico32 sample */

#define GPIO *(volatile int *)0x80000000
#define GPIO_TRI * (volatile int *)0x80000004

int main(void)
{
  unsigned int wait_c;
  unsigned int value;
  value = 0;
  GPIO_TRI = 0xff;
  for(;;){
    if (value == 1) {
      GPIO = 0xff;
    } else {
      GPIO = 0x00;
    }
    for (wait_c = 0; wait_c < 0xffff; wait_c++);
  }
}

https://lh4.googleusercontent.com/-XilV-V1lCdk/Tne3mc8z0aI/AAAAAAAAAi8/m13Heh7XzSw/05.png

プロジェクト名をクリックした後、「Project」−「Build Project」をクリックしビルドします。


https://lh3.googleusercontent.com/-VwuiQC6EIWI/Tne1HbCSmwI/AAAAAAAAAiY/sDEaetPZv74/06.png

エラーが見つかりました。


https://lh3.googleusercontent.com/-IUZzCOMZHFE/Tne1HmpJjEI/AAAAAAAAAic/rsNIXVRwX6E/07.png

「overlaps」と出ているので、先ほど設定したOn-Chip Memoryに入りきっていないようです。


https://lh3.googleusercontent.com/-wwwWJBUwHKM/Tne1HpnZm8I/AAAAAAAAAik/x8P3TmkOrdc/08.png

メモリサイズを再設定します。

「MSB」をクリックし、「ebr」をダブルクリックします。


https://lh4.googleusercontent.com/-_rIeAfpNpCM/Tne1HpPCYJI/AAAAAAAAAig/JuGAmJwSi5g/09.png

メモリサイズを、65535と入力します*1


https://lh3.googleusercontent.com/-faDaz0ATAlI/Tne1HzgY1YI/AAAAAAAAAio/lSfixs6hHqA/10.png

ソフトコアCPUの内容を変更したので、再度「Generate Address」「Generate IRQ」「Run DRC」「Run Generator」をクリックします。


https://lh4.googleusercontent.com/-VLOKzjuJBSg/Tne1H3jZsHI/AAAAAAAAAis/Kl5AKWJFo0k/11.png

「C/C++」をクリックし、プロジェクト名をクリックします。

「Project」−「Build Project」をクリックします。


https://lh6.googleusercontent.com/-XihPg5436kA/Tne1IJiW-RI/AAAAAAAAAiw/18xf4ZT7nik/12.png

今度はビルドが完了しました。

どうやらこのプロジェクトでは11,848バイト必要だったようです。

この記事は役に立ちましたか?

選択肢 投票
役に立った 15  
役に立たなかった 0  
コレジャナイ! 0  
  • プログラム例の GPIO = 0xff; ← これだとGPIOの出力値は変化しない。GPIO = 0xff000000; ← データバスの上位ビットから読んでいくのでこうする必要がある -- aroerina? 2012-03-05 (月) 23:33:11
  • ご連絡ありがとうございます!そうかもしれない、確認します。 -- 商品開発部? 2012-03-09 (金) 06:04:26

(画像の文字列を入力して下さい)
  • GPIOを使用したLED点灯でも構いませんので、プログラミングについても解説してくださると助かります。 -- qa? 2011-09-14 (水) 03:42:45
  • コメントありがとうございます!近々作成しますので少しお待ちください。 -- 商品開発部? 2011-09-18 (日) 06:44:57
  • 加筆して頂きありがとうございます。 ただ、On-Chip Memoryのサイズが65535だと、XP2のブロックRAMに入り切りませんでした。12287バイトでは駄目でしょうか? -- qa? 2011-09-25 (日) 19:13:54
  • 確認しました、可能です。実機確認も並行して行うようにします。 -- 商品開発部? 2011-09-26 (月) 06:22:25

*1 ビルド結果、このプロジェクトでは11,848バイト必要なので、必要最小限の12,287と入力することもできます

添付ファイル: filemsb11.png 1076件 [詳細] filemsb8.png 1278件 [詳細] filemsb37.png 1098件 [詳細] filemsb36.png 973件 [詳細] filemsb35.png 1153件 [詳細] filemsb34.png 1022件 [詳細] filemsb33.png 971件 [詳細] filemsb32.png 967件 [詳細] filemsb31.png 960件 [詳細] filemsb30.png 909件 [詳細] filemsb29.png 952件 [詳細] filemsb28.png 908件 [詳細] filemsb27.png 1020件 [詳細] filemsb26.png 872件 [詳細] filemsb25.png 912件 [詳細] filemsb24.png 972件 [詳細] filemsb23.png 1049件 [詳細] filemsb22.png 882件 [詳細] filemsb21.png 955件 [詳細] filemsb20.png 974件 [詳細] filemsb19.png 1015件 [詳細] filemsb18.png 998件 [詳細] filemsb17.png 1071件 [詳細] filemsb16.png 956件 [詳細] filemsb15.png 1002件 [詳細] filemsb14.png 1261件 [詳細] filemsb13.png 1128件 [詳細] filemsb12.png 1032件 [詳細] filemsb10.png 979件 [詳細] filemsb9.png 942件 [詳細] filemsb7.png 989件 [詳細] filemsb6.png 905件 [詳細] filemsb5.png 1224件 [詳細] filemsb4.png 969件 [詳細] filemsb3.png 961件 [詳細] filemsb2.png 865件 [詳細] filemsb1.png 973件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-05 (水) 15:01:09 (381d)