
まずは,DVI出力(画面は一色)されるところまで作ります.

Gowin FPGAのデザインを作ります.
使うボードはTang Nano 9K(Sipeed)です.
システムクロックとしてボード上の水晶の27MHzを使います.
HDMIコネクタからDVI信号を出してください.
画面は1024×768@30 でオレンジ一色を表示してください.
GowinのIPを使う場合は,パラメータを指示してください.人間がIPを生成します

Gowin FPGA設計、承ります。ピン配置などの正確な情報を確認してから、ファイル一式を作成します。まず調査します。
Pin情報が確認できました。次に、HDMIシリアライザとPLLの実際の構成を確認します。
<<中略>>
プロジェクトが揃いました。最後に、IP生成パラメータを明記したREADMEを作成します。
<<中略>>
シミュレーションで動作検証します。
Gowin FPGA(Tang Nano 9K)向けのDVI出力デザインを作成し、シミュレーションで検証しました。
作成したファイル
README.md セットアップ手順(IPパラメータを明記)
TangNano9K_DVI.gprj Gowin EDA プロジェクト
src/
top.v トップ(クロック生成+ビデオタイミング+出力)
dvi_tmds_encoder.v TMDS 8b/10b エンコーダ(純RTL、シミュレーション可)
tangnano9k.cst ピン制約(HDMI は LVCMOS18D)
tangnano9k.sdc タイミング制約(27MHz)
gowin_rpll/gowin_rpll.v rPLL IP(27 → 162 MHz)
gowin_clkdiv/gowin_clkdiv.v CLKDIV IP(162 → 32.4 MHz)
sim/
tb_top.v, gowin_macro_sim.v テストベンチとプリミティブモデル
方式
HDMIコネクタからDVI信号として出力します(TMDSのみ、音声/CEC/HDCPなし)。Sipeed公式HDMI例と同じトポロジで、OSER10(10:1シリアライザ)+ELVDS_OBUF(擬似差動バッファ)を使用しています。
- クロック:27 MHz水晶(pin 52)→ rPLL ×6 = 162 MHz → CLKDIV ÷5 = 32.4 MHz(ピクセル)
- 162 MHzをそのまま
OSER10の5倍クロックに使うため、rPLLは1個だけで済みます
- 162 MHzをそのまま
- 解像度:1024×768、ポーチ/同期幅は標準VESA DMTと同一 → 29.91 Hz(≈30 Hz)
- 表示色:
24'hFFA500(オレンジ一色)
人間が生成するIPのパラメータ ★
rPLL(Tools > IP Core Generator > Hard Module > CLOCK > rPLL)
| パラメータ | 値 |
|---|---|
| FCLKIN | 27 |
| IDIV_SEL | 1 |
| FBDIV_SEL | 5 |
| ODIV_SEL | 4 |
CLKDIV
| パラメータ | 値 |
|---|---|
| DIV_MODE | "5" ← ÷5です(÷10ではない) |
| GSREN | false |
ピン割り当て(重要な注意)
| 信号 | ピン | IO規格 |
|---|---|---|
clk | 52 | LVCMOS33 |
resetn | 4 | LVCMOS18 |
tmds_d_p[0..2] | 71/70, 73/72, 75/74 | LVCMOS18D |
tmds_clk_p | 69/68 | LVCMOS18D |
Tang Nano 9Kでは,バンクの関係でLVCMOS18を選択できないので,全てLVCMOS33に設定し直します.
色はオレンジになりませんでしたが,DVI出力できたので,次に画面に「DSF」と表示するように改造を指令します.

画面に大きな文字で「DSF」と描画してください

「DSF」を大きな文字で描画する機能を追加します。現状のファイルを確認してから実装します。
実装します。12×16のビットマップフォント(D/S/F)をスケールアップして描画する方式にします。
まず文字ROMモジュールを作成します。
完了しました。
実装内容
画面に**白い大きな「DSF」**を、オレンジ背景の中央に描画します。
| ファイル | 役割 |
|---|---|
| dsf_char_rom.v | 「D」「S」「F」の 12×16 ビットマップフォント(新規) |
| dsf_overlay.v | 背景+文字を合成するピクセル生成器(新規) |
| top.v | オーバーレイを組み込み、RGB を TMDS エンコーダへ出力 |
仕組み
ドットマトリクスフォントを整数倍に拡大する方式なので、拡大しても輪郭がぼやけません。
TEXT_SCALE = 24→ 1文字が 288×384 px、文字全体で 960×384 px(中央配置)- 座標は純粋な組み合わせ論理で算出(除算のみ)し、追加のメモリは不要
シミュレーションで描画パターンを検証
テストベンチが実際のピクセル出力をサンプリングし、ASCIIアートとして出力します(text_art.txt):
........................................
.##########.....########.....###########
.##########....##########....###########
.####..#####...####..#####...####.......
.####...####...####...####...####.......
.####...####...####..........####.......
.####...####...#####.........####.......
.####...####....########.....##########.
.####...####.....#########...##########.
.####...####..........####...####.......
.####...####..........####...####.......
.####...####...####...####...####.......
.####..#####...####..#####...####.......
.##########....##########....####.......
.##########.....########.....####.......
........................................
変更したファイル
- dsf_char_rom.v(新規)
- dsf_overlay.v(新規)
- top.v — オーバーレイ組み込み
- TangNano9K_DVI.gprj — 新規2ファイルを追加
- tb_top.v — 文字描画の検証を追加
- README.md — 文字描画の説明とパラメータを追記
追加されたファイルを取り込んで,実行すると画面にDSFと表示されました.
