• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:verilog HDLのコードについて質問)

verilog HDLのコードについて質問

このQ&Aのポイント
  • verilog HDLのコードに関する疑問点について質問します。
  • watch_falling_edgeが特定の値になったときにcaseをはじめる理由について知りたいです。
  • また、クロックとキーボードクロックの周波数の違いについても教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • umamimi
  • ベストアンサー率39% (144/362)
回答No.1

PS/2 規格をよくは知らないので多分ですが、 >ここで、なぜ watch_falling_edge が「 6'b111000」になったときにcaseをはじめるので PS/2 は、キーボードからシリアルデータとシリアルクロックを受け取ります、 それらがそれぞれ入力信号 key_data key_clk に与えられてるようです。 シリアルデータはシリアルクロック立ち上がりエッジでて変化するので、受取り側は シリアルデータが確定する立下りエッジ前後で取り込むのがセオリーです。 細かく見ると、立下りエッジより clk x 3 個分過ぎてますが、 機器外部からやってくる key_clk にはノイズが乗る可能性があり、 それによる誤動作を避けるために入力レベルの判断を「複数クロック期間連続すること」と 見てるのかなと思います。 (それはそれでちょっと突っ込みどころがあるのですがそれは置いといて) watch_falling_edge(6bit) はシフトレジスタを構成し、より高周波数な clk のタイミングで key_clk を最下位bitにシフト入力しています。 (watch_falling_edge <= { watch_falling_edge[4:0], key_clk}; の部分) >またこれとは別に、クロックとキーボードクロックの周波数は全く違いますか? シリアルクロックはたしか4,800Hz 程度です、 Verilog ソースだけでは正確には読取れませんが、 clk はもっと高周波数なはずです。 同じ周波数ではサンプリングしても立下りエッジ検出できないので。 3bitずつを期待してるので、最低でも6倍くらいないと、上で想像する動作は不可能です。 というか、ハードウェアを記述して設計するなら、入力信号の仕様は把握しとかないとダメです。

関連するQ&A