FC2カウンター FPGAの部屋 SCCBインタフェース回路の実装3(シミュレーション)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

SCCBインタフェース回路の実装3(シミュレーション)

SCCBインタフェース回路の実装2(ブロック図の作成)”で書いたブロック図を元にVHDLでコーディングをした。
下のconstant値ががSCL用18ビットシフトレジスタにロードする値と9ビットのSDA用シフトレジスタにロードする値だ。

constant START_PATTERN_SCL : std_logic_vector :=      "111111111111111111";
constant IDA_SCCBR_WD_PATTERN_SCL : std_logic_vector := "010101010101010101";
constant STOP_PATTERN_SCL : std_logic_vector :=       "011111111111111111";
constant START_PATTERN_SDA : std_logic_vector :=    "111111110";
constant ID_ADDRESS_PATTERN_SDA : std_logic_vector := "010000100";
constant STOP_PATTERN_SDA : std_logic_vector :=     "011111111";


VHDLの階層はSCCB_Reg_Controller.vhdがトップで、その下に、freqdiv.vhd、One_Transaction_SCCB.vhd、SCCB_reg_values_ROM.vhd の各モジュールがある。
freqdiv.vhd は25MHzを200KHz, 5usec のイネーブルを生成する。One_Transaction_SCCB.vhd はSCCBレジスタのアドレスとデータを与えられて、SCCBレジスタに1つ書き込む回路である。SCCB_reg_values_ROM.vhd はSCCB_reg_values.data の内容をROMに読み込んだROM。VHDLソースは長いので省略。
シミュレーション波形を下に示す。
SCCB_simulation_091221.png

上の図でscl がクロック、sda がデータだ。scl は10usec周期、100KHzとなっている。下のcs_main が現在のステートを表している。start_state がスタートだけれども、slc は18ビットのシフトレジスタに値をロードしているので、最後の200KHzで2クロック分のみを使用している。最初はダミーなので、効率が悪いが最初に設定するだけなので、スピードは必要ない。よって、わかりやすさを優先して、このような実装となった。
id_address は8ビットの42を出力して、最後にドントケアビットがある(ハイ・インピーダンス)。
sccb_reg_addr はSCCBレジスタのアドレスを示していて、この場合はAC番地を表している。やはり、最後にドントケアビットがある。
write_data はsccb_reg_addr に書き込みデータを示している。ここではDF を書き込む。やはり、最後にドントケアビットがある。
最後に、stop_state はstop_state 同様に効率が悪い。最初の200KHzで2クロック分のみを使用している。
さて、うまく行ったようなので、今度はインプリメントして確かめてみることにする。うまく行ったら、このソースを公開するかも?
  1. 2009年12月21日 22:07 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1327-abeed659
この記事にトラックバックする(FC2ブログユーザー)