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

User

Gowin FPGAのデザインを作ります.
使うボードはTang Nano 9K(Sipeed)です.
システムクロックとしてボード上の水晶の27MHzを使います.

HDMIコネクタからDVI信号を出してください.
画面は1024×768@30 でオレンジ一色を表示してください.
GowinのIPを使う場合は,パラメータを指示してください.人間がIPを生成します

deepseek

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個だけで済みます
  • 解像度:1024×768、ポーチ/同期幅は標準VESA DMTと同一 → 29.91 Hz(≈30 Hz)
  • 表示色:24'hFFA500(オレンジ一色)

人間が生成するIPのパラメータ ★

rPLL(Tools > IP Core Generator > Hard Module > CLOCK > rPLL)

パラメータ値
FCLKIN27
IDIV_SEL1
FBDIV_SEL5
ODIV_SEL4
fCLKOUT=27×5+11+1=162MHzf_{CLKOUT}=27\times\frac{5+1}{1+1}=162\text{MHz}

fVCO=162×4=648,MHzf_{VCO}=162\times4=648,\text{MHz}

CLKDIV

パラメータ値
DIV_MODE"5" ← ÷5です(÷10ではない)
GSRENfalse

ピン割り当て(重要な注意)

信号ピンIO規格
clk52LVCMOS33
resetn4LVCMOS18
tmds_d_p[0..2]71/70, 73/72, 75/74LVCMOS18D
tmds_clk_p69/68LVCMOS18D

 Tang Nano 9Kでは,バンクの関係でLVCMOS18を選択できないので,全てLVCMOS33に設定し直します.

 色はオレンジになりませんでしたが,DVI出力できたので,次に画面に「DSF」と表示するように改造を指令します.

User

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

deepseek

「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と表示されました.

コメントを残す