私はあなたが達成しようとしているもので、推測を取っていますが、あなただけのベクトルの一部をつかむしたい場合は、これがケースでも、を行うことができます
module test
#(
parameter x = 4,
parameter y = 4*x
)
(
input [y-1:0] MULTICHANNEL_INPUT,
input [1:0] channelNumberIn,
output [x-1:0] channelDataIn
)
assign channelDataIn = MULTICHANNEL_INPUT[x*channelNumberIn +: x];
endmodule
を選択し、インデックス付きの部分を使用することができます声明:それはalways
ブロック内で駆動するので、私は出力reg
をしなければならなかった
module test
#(
parameter x = 4,
parameter y = 4*x
)
(
input [y-1:0] MULTICHANNEL_INPUT,
input [1:0] channelNumberIn,
output reg [x-1:0] channelDataIn
)
always_comb begin
case(channelNumberIn)
2'd0: channelDataIn = MULTICHANNEL_INPUT[1*x-1:0*x];
2'd1: channelDataIn = MULTICHANNEL_INPUT[2*x-1:1*x];
2'd2: channelDataIn = MULTICHANNEL_INPUT[3*x-1:2*x];
2'd3: channelDataIn = MULTICHANNEL_INPUT[4*x-1:3*x];
endcase
end
endmodule
注意してください。しかし、これは何も変わらない。これらの2つのモジュールは同じゲートに合成する必要があります。私はエラーが起こりにくいので、最初のソリューションがより好きです:2番目のタイプミスは、重複するパートの選択につながります。
もうひとつの楽しみのためのオプションです。私は何が起こっているのか非常に明確ではありませんので、この限り好きではない、あなたは(私は実際に右ここでそれをやったかわからない)逆方向の寸法を得ることのリスクを実行します。
wire [3:0][x-1:0] input_2d;
assign input_2d = MULTICHANNEL_INPUT;
assign channelDataIn = input_2d[channelNumberIn];
コンパイルエラーは次のとおりです。channelDataInは正当なregまたは可変長の値ではありません。 - 私は理解しているが、私が望むのは、2本の線を持つマルチプレックスである:Dをregに変換しないこと。 – toomanychushki
'x'と' y'は何ですか?パラメーター? Genvars?入力? – nguthrie
変数を 'reg'として宣言しても、それがあなたが心配しているものならば、フリップフロップを推測することはありません。 – nguthrie