dポイントプレゼントキャンペーン実施中!

宿題の課題で7セグメントデコーダの回路をVerilog HDLというもので設計してきてくださいと言われて宿題をやったのですが、正直よくわからなくて教科書のものを映して提出してしまいました。

よくわからなかったというのは、Verilog HDL文の動作レベルでの記述で何が何のことを言っているのかわかりませんでした。だれか下の動作レベルでの記述はここではこうなんだよと教えてくれると助かります。

`define SEG_OUT_0 7'b011_1111
`define SEG_OUT_1 7'b000_0110
`define SEG_OUT_2 7'b101_1011
`define SEG_OUT_3 7'b100_1111
`define SEG_OUT_4 7'b110_0110
`define SEG_OUT_5 7'b110_1101
`define SEG_OUT_6 7'b111_1101
`define SEG_OUT_7 7'b010_0111
`define SEG_OUT_8 7'b111_1111
`define SEG_OUT_9 7'b110_1111
`define SEG_OUT_ERR 7'b111_1001


/*7SEG_DECODER*/
module SEG7_DEC (IN,OUT);
input [3:0]   IN;
output [6:0] OUT;
assign OUT = FUNC_SEG7_DEC (IN);

function[6:0] FUNC_SEG7_DEC ;
input [3:0] IN;
case(IN)
0:  FUNC_SEG7_DEC = `SEG_OUT_0;
1:   FUNC_SEG7_DEC = `SEG_OUT_1;
2:  FUNC_SEG7_DEC = `SEG_OUT_2;
3:   FUNC_SEG7_DEC = `SEG_OUT_3;
4:   FUNC_SEG7_DEC = `SEG_OUT_4;
5:   FUNC_SEG7_DEC = `SEG_OUT_5;
6:   FUNC_SEG7_DEC = `SEG_OUT_6;
7:   FUNC_SEG7_DEC = `SEG_OUT_7;
8:   FUNC_SEG7_DEC = `SEG_OUT_8;
9:   FUNC_SEG7_DEC = `SEG_OUT_9;
default: FUNC_SEG7_DEC = `SEG_OUT_ERR;

endcase
endfunction

endmodule

A 回答 (1件)

> `define SEG_OUT_0 7'b011_1111


これは、SEG_OUT_0という変数に011_1111という値を割り当てている(数値内で使われるアンダースコアはVerilogでは無視されるので、7'b011_1111は0111111と等価)。これは、後々011_1111を引用するときに、011_1111という意味不明の数字を使うのではなく、SEG_OUT_0という変数を使うことにより、コードが読みやすくなるため。

> module SEG7_DEC(IN, OUT);
ブロック名の宣言.

> input [3:0]   IN;
> output [6:0] OUT;
ポートの宣言。入力ポートINは4ビット、出力ポートOUTは7ビット。

functionとendfunctionで挟まれた部分はいわばサブルーチンのようなもので、、
INが0000であれば、FUNC_SEG7_DECにSEG_OUT_0、つまり011_1111を代入、INが0001であればFUNC_SEG7_DECにSEG_OUT_1,つまり000_0110を代入、INが0010であればFUNC_SEG7_DECにSEG_OUT_2を代入,,.....というサブルーチン処理を定義してると考えればよい。
最後のdefaultはINが0から9のどれにも一致しなかった場合に実行されるブロックで、論理合成をするときにラッチを作るのを避けるためのもの。

でそのfunctionを呼び出しているのが、
assign OUT = FUNC_SEG7_DEC (IN);


このブロック全体で行っている処理は、
IN=0000ならOUT=0111111
IN=0001ならOUT=0000110
IN=0010ならOUT=1011011
...
..
    • good
    • 0
この回答へのお礼

返事が遅れてしまいすみませんでした。
凄く詳しい回答ありがとうございました。どこがどういう機能か前よりも理解することができました。

お礼日時:2014/11/30 22:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!