ルックを有効にするための入力として使用されていますあなたが列挙されてきた{Z, Y, X, W, En}
の可能エンコーディング:En
の値の
5'b00001: S = 'b0000001;
5'b00011: S = 'b1001111;
5'b00101: S = 'b0010010;
5'b00111: S = 'b0000110;
5'b01001: S = 'b1001100;
5'b01011: S = 'b0100100;
5'b01101: S = 'b0100000;
5'b01111: S = 'b0001111;
5'b10001: S = 'b0000000;
5'b10011: S = 'b0000100;
5'b10101: S = 'b0001000;
5'b10111: S = 'b1100000;
5'b11001: S = 'b0110001;
5'b11011: S = 'b1000010;
5'b11101: S = 'b0110000;
5'b11111: S = 'b0111000;
// ^Look here
すべてが1
です! En
が0
の場合、モジュールに何をすべきかを決して伝えませんでした。ディスプレイを空白にすることは知られていません。あなたはそれに何かする必要があります。
default: S = 'b0000000; //change to whatever means "turn everything off"
不コンプレックス:あなたが列挙されていないすべての場合に表示をブランクデフォルト句を追加することができます
シンプルなソリューション
:
あなたはいくつかのオプションを持っていますソリューション
句として5'bxxxx0を使用し、
casex
の文を使用すると、より正確な結果を得ることができます。
casex ({Z,Y,X,W,En})
// all other enumerated cases
5'bxxxx0: S = 'b0000000; //change to "everything off"
default: S = 'b0000000; //change to "everything off"
しかし、それは難しく、正しく使用し、驚くべき行動につながることができますcasex
にはいくつかの潜在的な落とし穴があることを知っています。また、これは最初の単純な解決策と同じになることに注意してください。私は今それを避けるだろう。
(マイ)プリファードソリューション
これは効果的に最初の二つと同じですが、私は意思がはるかに明確だと思う:
always @(*)
begin
if (!En)
S = 'b0000000; // change to "everything off"
else
case({Z,Y,X,W,En})
5'b00001: S = 'b0000001;
5'b00011: S = 'b1001111;
5'b00101: S = 'b0010010;
5'b00111: S = 'b0000110;
5'b01001: S = 'b1001100;
5'b01011: S = 'b0100100;
5'b01101: S = 'b0100000;
5'b01111: S = 'b0001111;
5'b10001: S = 'b0000000;
5'b10011: S = 'b0000100;
5'b10101: S = 'b0001000;
5'b10111: S = 'b1100000;
5'b11001: S = 'b0110001;
5'b11011: S = 'b1000010;
5'b11101: S = 'b0110000;
5'b11111: S = 'b0111000;
default: S = 'b0000000; // change to some error code
endcase
end
このソリューションの利点は、ということですあなたのコードの目標ははるかに明確です。En
が真でない場合、残りのシグナルは問題になりません。我々はディスプレイをクリアする。これは他の解決策でも起こりますが、この構造により、何が起こっているのかがより明確になります。
default
ここでは技術的には必要ありません。列挙されていないEn
が真である場合はありません。しかし、それは多くの数字を入力することです。タイプミスをした場合、そのような場合、エラー表示を強制するデフォルト(7segディスプレイの中心線など)を持つと、バグを識別するのに役立ちます。
他のいくつかの注意事項:
あなたは変数名としてX
とZ
を使用しないようにしてください。彼らは "気にしない"と "高いインピーダンス"のために混乱するかもしれません。それは、必要以上にコードを追跡するのを困難にします。
感性リストを変更しました。 Greg correctly pointed out入力がW
,X
,Y
およびZ
に変更されたときに正しく出力されるようにするには、変更時にalways
ブロックがトリガーされる必要があります。 *
演算子は、always
ブロックの内容に基づいて正しい感度リストを推論するようにVerilogコンパイラに指示します。
すべてのビットパターンをparametersに入れてコードを読みやすくすることを強くお勧めします。
私はあなたが言っていることを見ていますが、あなたが言及した節に入れても、それでも8を表示しませんか?デフォルトの原因は、ケースと同じ出力を作成します。5'b10001 – Zebs
申し訳ありませんが、誤って入力するのが早すぎます。コメントを編集しました – Zebs
出力エンコードが何であるか分かりません。 "何も表示しない"という意味に変更してください。 – skrrgwasme