· 

LatticeMico8はじめる(task2)

LMSを起動します。(TutorialにはLatticeMico Systemを起動しろって書いてあるけど実際はスタートメニューにはLMSって登録されているので、これを知らないと最初から躓いて、一気にやる気が失せる)

TutorialではC:\MSBEnvironment(これがデフォルトらしい)にしろって書いてあるけど、ここは逆らって、上の絵のようにします。せっかくなのでまとめたほうがいいと思うんです。

こうなる。Tutorialによると、MSB的表示に変えておけって書いてある。

File-->New Platform...

Platform nameとDirectoryはTask1でつくったやつです。後は、Tutorialに従ってこうする。

本当はVHDL派なので、"Create VHDL Wrapper"を選ばんといかんところだけど、今回はTutorial通りにやる。

まぁこの画面に戻る。

Available ComponentsのCPUのLatticeMico8をダブルクリックする。

Turtorialどおりにこうする。

Internal Storage Files SettingはTutorialにない。わからないのでいじらずにそうっとしておく。

ちなみにHelpにはこう書いてある。まぁわからんままでいい。

GPIOをダブルクリックする。

Tutorial通りにやる。

UARTをダブルクリック。

Tutorialどおりにやる。

こうなった。

LM8ってのがたぶんマイコンコア。LM8が出す人で、gpioは受ける人、uartも受ける人。WishboneがBUSで、LM8とgpio, uartをBUSでつなげよってことですよね。

白丸をクリックして黒丸にすればつながったことになる。

コンポーネントにアドレスを割り当てる。Platform Tools-->Generate Addressでもいいらしい。

と、こんなかんじで勝手にわりあてされる。

割り込み優先順位を割り当てる。Platform Tools-->Generate IRQでもいいらしい。

こうなる。おそらく、コンポーネントアドレスやIRQ順位は手で入れてもいいと思う。Quartusは手で入れてましたよね。

DRCを実行する。Platform Tools-->Run DRCでもいいらしい。

食い気味でエラーはないといわれる。

ここまでくると、マイクロコントローラプラットフォームを生成できるらしい。生成中にMSBは

platform1.msb

platform1.v

platform1_vhd.vhd

platform1.ngo

というファイルを

lm8_tutor\platform1\socフォルダに生成するらしい。

VHDLな人は*.vと*.vhdの両方ができるけど、*.vはシミュレーションでしか使わないらしい。Verilogな人に対しては*.vhdは生成されないらしい。今回はVerilog派をかたるので*.vhdはできないはず。

生成する。Platform Tools-->Run Generatorでもいいらしい。

って出るので成功したんだと思う。

こうなっている。

platform1_inst.vの中身は

platform1 platform1_u ( 
.clk_i(clk_i),
.reset_n(reset_n)
, .gpioPIO_OUT(gpioPIO_OUT) // [4-1:0]
, .uartSIN(uartSIN) // 
, .uartSOUT(uartSOUT) // 
);

こうなっていて、これをtop-level moduleに実装すればいいってことだろう。

でTutorialによると、top-level moduleはTutorialのコードをコピーしてlm8_tutor\platform1\socの中に、platform1_top.vって名前で保存しろって書いてある。

`include "../soc/platform1.v"

module platform1_top
(
  input reset_n,
  input uartSIN,
  output uartSOUT,
  output [3:0] LEDPIO_OUT
);

// MachX02 internal oscillator generates platform clock
wire clk_in;
OSCH OSCH_inst (.OSC(clk_in), .SEDSTDBY(), .STDBY(1'b0));
defparam OSCH_inst.NOM_FREQ = "24.18";

platform1 platform1_u
(
  .clk_i (clk_in),
  .reset_n (reset_n),
  .LEDPIO_OUT (LEDPIO_OUT),
  .uartSIN (uartSIN),
  .uartSOUT (uartSOUT)
);

endmodule

コードはこちらで、いわれるままにやる。

こうなる。

Task2はここまで、、、ながいわー---

 

しかし、世の中明らかにVerilogのほうが多いよね、、、一度は理解していたのでもう一回Verilogにも取り組んでみるかー

 

そういえば最近、「配属ガチャ」ってワードがあって、会社に入っても配属が気に食わないとすぐに辞めちゃう人が多いらしい、、、いや、今に始まったことじゃないと思う。約25年前の日曜技術者の入社時にもいましたよまぁまぁの人数が。新人研修の終わりに人数が減ってるやつ。

生きてると運次第なところもあるけど、いい景品が多いガチャを引く権利を得られるか、ザコばっかりのガチャしかひけないかはなにか頑張る余地があると思うんだよねーー--いや、そう信じたい。そう信じないとやってられない。しょーじきしんどい。