この記事は
初めてのGOWIN、とりあえず動かしてLチカさせたい!
ツールやボードを1回舐めてフロー確認しておきたい!
開発環境
2025年11月時点での最新、GOWIN FPGA Designer Version 1.9.12をインストールしました。
レッツLチカ!
プロジェクト作成
早速プロジェクトを作成していきます。
File > New... > FPGA Design Project
SOMの回路図を見ると「GW5AST-138K-PG484」とありました。この型番だとスピードグレードが分かりません。
GOWINはFPGAレーザーマーキング3行目の5番目がデバイスバージョンだとか。
ヒートシンク取らないとダメか…取った画像がこちら

見づらいですが、以下のような刻印がされていました。私のデバイスはバージョンBということです。
2025年7月以降はバージョンCになっているとのこと。購入時の見分けは困難でしょうから、SSRAMを使いたい人はなるべく新しいものを買いましょう。
| 刻印 |
|---|
| GW5AST-LV138PG484AC1/I0 2402BA0N TNMU32.05 |
ここ間違えると合成したものが動かないってことになるので面倒ですがちゃんと自分のボードを調べたほうが安心です。
Lチカ実装
RTLは書ける前提で…
module led_blink (
input wire CLK,
output wire[7:0] LED
);
reg [29:0] r_count;
always @(posedge CLK) begin
r_count <= r_count + 1'b1;
end
assign LED = r_count[29:22];
endmodule
回路合成(Synthesize)
クロックでカウンタぶん回す。まずはこれです。
適当に30bitのカウンタを書きます。

2進数は10bitで1024です。10bitのカウンタは約1/1000分周ともいえます。
100MHzのクロックでカウンタをぶん回したら10bitで100kHzということになります。
20bitなら100Hz、30bitなら0.1Hz。周期10秒。今回LEDが8個ですから、20bit台をLEDに割り付ければ目に見える速度でチカチカする筈です。
Project > Configurationでトップモジュールも設定。
言語指定はVerilog2001かSystemVerilog2017にします。
回路図を確認
カウンタ書いてLチカ、これで合成やJTAG書き込みのフローをまずは確認していきたいと思います。
PMOD用のLEDが同梱されていたので、こちらを使いましょう。オンボードLEDはマイコン内蔵フルカラーで動かすまでがすこし面倒です。
LED基板刺した図。逆刺ししないようにしてくださいね。
左上はPMOD0と裏面シルクにあります。



SOM側の回路図を追わなくてもよいように、コメントに情報がありますね。
| PMOD端子 | Dock回路図コメント | FPGA端子 |
|---|---|---|
| PMOD0_IO0 | BANK4_P19_IOB99A | P19 |
| PMOD0_IO1 | BANK4_R19_IOB99B | R19 |
| PMOD0_IO2 | BANK4_T21_IOB97A | T21 |
| PMOD0_IO3 | BANK4_U21_IOB97B | U21 |
| PMOD0_IO4 | BANK4_R17_IOB144B | R17 |
| PMOD0_IO5 | BANK4_P16_IOB144A | P16 |
| PMOD0_IO6 | BANK4_R18_IOB138A | R18 |
| PMOD0_IO7 | BANK4_T18_IOB138B | T18 |
SOM上に50MHzが乗っていて、V22ピンに繋がっているようだ。

SOMのLED、電源・ConfigDone・Readyか。なるほど。
ピンアサイン
設定ファイル(.cst)に手書きしてもいいですが、FloorPlannerでGUI設定してもよい。今回はGUIで設定しました。下のタブで「I/O Constraints」を選びLocationを入力しましょう。

配置配線(Place&Route)
Verilogも合成できたし、ピン指定もしたので配置配線だ!

っと・・・LED[3:0]がエラーですね。
専用端子(CPU/SSPI用)を使っているので怒られている。
SSPI=SlaveSPI、138KにはRISC-Vが搭載されていてそのペリフェラルが使うんだろう。
AMD/XilinxのZynq系とかだと、CPU(PS部)が使う端子(MIOxx)はFPGA(PL部)からはそもそも使えなかったりするんだけど、GOWINは行けるのね。

ConfigurationのP&RにDual-Purpose Pinとある。使い方を選べるピンだ。
「Use SSPI as regular IO」を有効にすれば、SSPIじゃなくて通常のIO、つまりFPGA側が使えるはず。
やってみたら、ダメだった。「Use CPU as regular IO」も有効にする必要があった。
2つを有効に(CPU、SSPIを使わない設定に)して配置配線したらエラーは消えた。

Warningは出ているけど、ひとまず置いておく。
レポート確認
Timing Analysis Reportは見ておかないと。

制約書いてないと100MHzになるのね。(回路図的には50MHzだからまあいいか感)
fMAXは357MHzだから、余裕です。てか結構早いな。
制約はGUIかテキスト(.sdc)か。今回はあえてGUIで。
Tools > Timing Constraints Editorを起動。

.sdcに書くときは以下になる。
create_clock -name EMCCLK_50M -period 20 -waveform {0 10} [get_ports {CLK}]
再度配置配線してみると、変更が反映された。

Constraint(制約)が100MHzから50MHzに更新されている。制約が変わっただけで、別に性能(最大で357MHzで動く回路)が変わったわけではないので他は変わらず。
FPGA書き込み
Tang Mega 138K Dock基板、右上にUSB Type-Cが居てそこにケーブルを指すとバッテリー表示LEDが光ります。具体的には左3つが点灯、右1つが点滅。これ実はFPGAに電源入ってない状態なんです。
FPGAの電源入れるには、HDMIとPMOD1の間にあるPWRボタンを長押ししてください。
電源が入るとSOMのLEDが3つとも点灯します。
この状態で、FPGA DesignerからProgrammerを起動します。
Edit > Cable Setting > USBCable Settingでボードとの接続を確認です。

認識しない場合は以下を確認してみてください。
- ボードの電源が入っている(バッテリーLEDが点灯・点滅)
- PWR長押しでFPGAの電源が入っている(SOMのLED3つが点灯)
- USBドライバ等が適切にインストールされている
- 右上にUSBケーブルを指している
- USBケーブルは付属のものを使用している。(100均で売ってるような充電専用ケーブルなどではない)
ツールバーの書き込みボタン(▶)を押すと書き込みが実施されました。

Info: Target Cable: USB Debugger A/0/78353/null@2.5MHz
Info: Target Device: GW5AST-138B(0x0001081B)
Info: Operation "SRAM Program" for device#1...
Info: Frequency Updated: "15MHz"
Info: User Code is: 0x0000FAC2
Info: Status Code is: 0x00006020
Info: Finished.
Info: Cost 19.65 second(s)
15MHzで書き込みに20秒かかりました。
無事、Lチカできました。

さて、今回は「SRAM Program」だったので電源を切ると消えてしまいます。
PWR長押ししてOFF-ONすると消えていることが分かると思います。




