こんにちは。梅おにぎりです。

今回は HDL で躓いた点をご紹介します。

とある研修で次のような回路を VHDL で設計しました。

 

 

この回路を設計するポイントは図中の赤丸の部分の処理です。その部分の記述がこちら。

アンド回路に入力する信号が 8 bit と 1 bit になっていると Quartus® II の Analysis & Elaboration ( HDL 文法のチェック) で文法エラーが発生してしまいます。

どうやら VHDL では bit 幅の異なる信号をゲート回路に入力することはできないようです。

そこで c の信号を連接して 8 bit に変換することで入力信号の bit 数を揃えました。

ちなみに連接は & を使います。今回は 8 bit にするので

 

c & c & c & c & c & c & c & c

 

としました。

その結果、エラーがなくなり解決。

 

 

ここで疑問に思ったのが Verilog HDL でも bit 幅が異なると文法エラーが発生するのかどうか。

わかりやすくするために次のような回路を記述しました。

この回路を Quartus II の Analysis & Elaboration にかけてみると、なんとエラーは出ません。

Verilog HDL の仕様では bit 幅の異なる信号でもゲート回路に入力することができることがわかりました。

でもこれってどのように信号を処理しているのでしょうか。

解析してみると出力の上位 7 bit はすべて 0 固定として処理されていました。

これで最初の回路を設計しても希望通りの論理を実現できません。

ここも連接する必要がありました。

ちなみに Verilog HDL では複製を用いて {8{b}} とすると b の信号は 8 bit になります。

VHDL は bit 幅の異なる信号をゲート回路に入力する場合、文法エラーが発生する仕様となっていることがわかりました。

一方、Verilog HDL は bit 幅が異なっていても文法エラーは発生せず上位 bit を 0 として処理する仕様となっていることがわかりました。

そのため Verilog HDL で上図の回路を設計する場合、エラーが発生していないからといっても回路が希望通りの機能を持ちません。

Verilog HDL と VHDL のどちらの言語で設計するにしても、それぞれの言語の仕様を理解しておくことが大切であることを今回学びました。