|
組合わせ回路の記述はalways文,function文でも記述可能です。 但し、各々特徴がありますので注意が必要です。
*always文による組合せ回路
- if,case,casexが使用できるので表現自由度が高い。
- 全条件を書かないとラッチ回路になる。
- reg宣言を行なうのでレジスタとの区別がつきにくい
alwaysによる 4 to 1 セレクタ
module SEL4TO1 (in, sel , out );
input [3:0] in;
input [1:0] sel;
output out;
reg out;
イベント式にalwaysに入力される信号をすべて記述 always @(sel
or in)begin if (sel == 2'h0) out = in[0]; // if
SEL=0ならばin[0] else if (sel == 2'h1) out = in[1];
// else if SEL=1ならばin[1] else if (sel == 2'h2)
out = in[2]; // else if SEL=2ならばin[2] else if
(sel == 2'h3) out = in[3]; // else if SEL=3ならばin[3]
else out = 0; // 上記以外なら'0' end
endmodule
全条件を書かないとラッチになる記述
module SEL4TO1 (in, sel , out );
input [3:0] in;
input [1:0] sel;
output out; reg out;
always (sel or in)begin if (sel == 2'h0)
out = in[0]; // if SEL=0ならばin[0] else if (sel ==
2'h1) out = in[1]; // else if SEL=1ならばin[1] else if
(sel == 2'h2) out = in[2]; // else if SEL=2ならばin[2]
else if (sel == 2'h3) out = in[3]; // else if
SEL=3ならばin[3] end
endmodule
*function文による組合せ回路
- if,case,casexが使用できるので表現自由度が高い。
- 関数のため再利用ができる。
- 回路規模が大きくなることもあり、ユーザーにより使用について限定している。
module DEC2TO4 (in1,in2,out1,out2);
input [1:0] in1;
input [1:0] in2;
output [3:0] out1;
output [3:0] out2;
//関数
function [3:0] dec;
input [1:0] in;
begin
case( in )
0: dec = 4'b0001;
1: dec = 4'b0010;
2: dec = 4'b0100;
3: dec = 4'b1000;
endcase
end
endfunction
assign out1 = dec ( in1 );
assign out2 = dec ( in2 );
endmodule
|