0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EBAZ4205 FPGA Xilinx編 第2版 演習2-3

Posted at

PC用ディスプレイにパターンを表示

以下にアップしています。。。

3bit RGBのカラーパレットで色を8種の表現

3'b000 → 黒 (0,0,0)
3'b001 → 青 (0,0,255)
3'b010 → 緑 (0,255,0)
3'b011 → シアン (0,255,255)
3'b100 → 赤 (255,0,0)
3'b101 → マゼンタ (255,0,255)
3'b110 → 黄 (255,255,0)
3'b111 → 白 (255,255,255)

全体の動作まとめ

次のような流れで動作している:

  1. pckgen が 25.175 MHz のピクセルクロックを生成
  2. syncgen がこのクロックを基に VGAタイミング(水平/垂直カウンタと同期信号)を生成
  3. pattern がカウンタ値に応じた RGB パターンを生成(縦ストライプ+上下で反転)
  4. HDMI 用の rgb2dvi IP に信号を渡し、HDMI 出力として信号を生成
  5. ディスプレイにパターンが表示される

表示されるパターンについて

  • 水平方向に 8 段階(80ピクセルごと)で色が変化
  • 奇数行と偶数行でカラー順序が反転(アップカウント・ダウンカウント切り替え)
  • 色の表現:rgb_1 は3ビット値で、各ビットがそれぞれRGBのON/OFFに対応
  • 例: 3'b101 → 赤と青が最大輝度 → 紫

ソース解説

pattern_hdmi (トップモジュール)

  • 機能:HDMI出力付きのパターン表示システムの最上位モジュール。
  • 構成:pattern モジュールでRGBデータと同期信号を生成
  • rgb2dvi モジュール (HDMI変換IP) によりRGB信号をTMDS (HDMI) 信号に変換

pattern (パターン生成モジュール)

  • 機能:VGA規格(640x480)の解像度で、縦縞模様を上下交互に反転させたパターンを生成
  • 内部構成:syncgen モジュール: 垂直/水平同期信号とピクセルクロックを生成
  • VGA画面表示領域内 (disp_enable) で、HCNT(水平位置) に基づいてカラーが変化するストライプ模様を生成
  • 垂直位置 (VCNT) に応じて奇数/偶数行ごとにカラーの並び順を反転

pckgen (ピクセルクロック生成モジュール)

  • 機能:125 MHz のシステムクロックから VGA 用の 25.175 MHz ピクセルクロックを生成。
  • 実装:Xilinx FPGA の MMCME2_BASE IPコアを使用

syncgen (同期信号生成モジュール)

  • 機能1: VGAのタイミングに従い、水平/垂直カウンタを制御し、同期信号を生成
  • 機能2: pckgen を使用して PCK を得る

vga_param.vh (パラメータファイル)

  • 内容:VGA 640x480(60Hz)のタイミングパラメータ定義
  • 水平 総周期: 800クロック 表示期間: 約640クロック (計算より)
  • 垂直 総周期: 525ライン 表示期間: 約480ライン

EBAZ4205での変更点

  • pckgen.vのみ変更
  • CLKINの周期を実際のクロックに合わせる
   MMCME2_BASE #(
      .BANDWIDTH("OPTIMIZED"),  // Jitter programming (OPTIMIZED, HIGH, LOW)
      .CLKFBOUT_MULT_F(36.0),   // 乗数M(2.000-64.000)
      .CLKFBOUT_PHASE(0.0),     // 位相(-360.000-360.000)
      .CLKIN1_PERIOD(20.0),     // CLKINの周期 @yaku 20.0
      // CLKOUT0_DIVIDE - CLKOUT6_DIVIDE: Divide amount for each CLKOUT (1-128)
      .CLKOUT1_DIVIDE(1),
      .CLKOUT2_DIVIDE(1),
      .CLKOUT3_DIVIDE(1),
      .CLKOUT4_DIVIDE(1),
      .CLKOUT5_DIVIDE(1),
      .CLKOUT6_DIVIDE(1),
      .CLKOUT0_DIVIDE_F(35.75),  // 除数Q(1.000-128.000)
      // CLKOUT0_DUTY_CYCLE - CLKOUT6_DUTY_CYCLE: Duty cycle for each CLKOUT (0.01-0.99).
      .CLKOUT0_DUTY_CYCLE(0.5), // デューティ比
      .CLKOUT1_DUTY_CYCLE(0.5),
      .CLKOUT2_DUTY_CYCLE(0.5),
      .CLKOUT3_DUTY_CYCLE(0.5),
      .CLKOUT4_DUTY_CYCLE(0.5),
      .CLKOUT5_DUTY_CYCLE(0.5),
      .CLKOUT6_DUTY_CYCLE(0.5),
      // CLKOUT0_PHASE - CLKOUT6_PHASE: Phase offset for each CLKOUT (-360.000-360.000).
      .CLKOUT0_PHASE(0.0),
      .CLKOUT1_PHASE(0.0),
      .CLKOUT2_PHASE(0.0),
      .CLKOUT3_PHASE(0.0),
      .CLKOUT4_PHASE(0.0),
      .CLKOUT5_PHASE(0.0),
      .CLKOUT6_PHASE(0.0),
      .CLKOUT4_CASCADE("FALSE"), // Cascade CLKOUT4 counter with CLKOUT6 (FALSE, TRUE)
      .DIVCLK_DIVIDE(2),         // 除数D(1-106)  @yaku 2
      .REF_JITTER1(0.0),         // Reference input jitter in UI (0.000-0.999).
      .STARTUP_WAIT("FALSE")     // Delays DONE until MMCM is locked (FALSE, TRUE)
   )

課題の画像

IMG_1842.jpg

今日はここまで

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?