>>前プロジェクト
codexを使って,既存のGowinプロジェクトを元に,仕様の違うデザインを生成させます.
元デザインはモジュールを2つ使い,ドットマトリクス64列×16行に文字をスクロール表示するものです.
改変デザインはモジュールを4つ使い,ドットマトリクス128列×16行に文字をスクロール表示するものです.
元々,codexを使って生成したデザインであり,REAMDEもあります.
「これをベースとして使え」と指示し,次のように改変内容も指示します.
このフォルダに含まれるプロジェクトはマトリクスLEDモジュールを2つ使ったものです.2つ合わせて16行x64列の表示エリアを持っています.
このプロジェクトをもとに,マトリクスLEDモジュールを4つ使うものに改変してください.表示エリアは16行×128列になります.
行の点灯状態を選択する信号SIN1は,1回の表示で同じ16ビット情報を4回繰り返します.
信号SIN2はLSBから送信し,ビットの並びは,{[127:112],[95:80],[63:48],[31:16]}です
信号SIN3はLSBから送信し,ビットの並びは,{[111:96],[79:64],[47:32],[15:0]}です
codexはSVコードを読んで,ベース・プロジェクトの仕様を読み取ったようです.
16x64向けの既存実装を確認して、どの信号生成ロジックを16x128向けに広げるべきかを先に特定します。まず関連ファイルと現在の SIN1 SIN2 SIN3 周りの実装を読みます。
表示データの並べ替えとシフト長が src/matrix_led_top.v にまとまっていそうです。次に、その周辺を絞って読んで16x64前提の箇所を洗い出します。
省略
●リソースが超過したので修正させる
生成された改変済みSVコードをGowin EDAで合成したところ,LUTが33K程度になってしまい,Tang Primer 25K向けのビットストリームを生成できませんでした.
次の通り codexに指示をして,デザインを変更させます.
現在の設計内容では,LUTを使い過ぎるので,別なリソースを使うように変更してください
codex は次の通り,デザインを変更するようです.
16x128 化した設計を、LUT を食いやすい「全列ぶんの文字描画を毎スキャン組み合わせ生成する方式」から、16x128 の表示バッファを保持してスクロール時だけ 1 列ずつ更新する方式へ変えました。これで重い処理の中心が LUT から FF 側へ移り、走査時はバッファ内容を SIN2/SIN3 の 64bit シフト語へ組み替えるだけになります。
出力されたSVコードをGowin EDAで合成したところ,LUTの消費量は 904/23040 になりました.