私は知っている、変数はプロセスでのみ許可されていますが、なぜあなたはそれらをループで使用することはできません。 このような構造を合成する際には、前に評価されているため問題はありません。VHDL - なぜあなたはループを生成する変数を使用することができません
この制限がなくてもコードを読みやすくすることができます。
lbl1: for i in data_out'range generate
lbl2a: component comp_a
port map(
clk => clk,
out => out(0)(i)
in_a => data_in(i*w + offset to i*w + w + offset));
lbl2b: component comp_b
port map(
clk => clk,
out => out(1)(i)
in_b => data_in(i*w + offset to i*w + w + offset));
.
.
.
lbl2n: component comp_n
port map(
clk => clk,
out => out(n)(i)
in_n => data_in(i*w + offset to i*w + w + offset));
end generate lbl1;
それとも
lbl1: for i in data_out'range generate
variable lower : integer := i*w + offset;
variable upper : integer := i*w + w + offset;
lbl2a: component comp_a
port map(
clk => clk,
out => out(0)(i)
in_a => data_in(lower to upper));
lbl2b: component comp_b
port map(
clk => clk,
out => out(1)(i)
in_b => data_in(lower to upper));
.
.
.
lbl2n: component comp_n
port map(
clk => clk,
out => out(n)(i)
in_n => data_in(lower to upper));
end generate lbl1;
コードを書く任意の例からではない、それがどの時点で失敗する可能性がありますが、私はあなたが私のポイントを得ると思います。読んだり維持したりする方が簡単です。生成された変数は、生成プロセス外のスコープから外れる可能性があります。
これはなぜ許可されていないのですか、それとも以前のvhdl標準の歴史的な成果ですか?
あなたの例では変数を使用する理由はありません。定数を使うと仕事ができ、構文的にはOKです。 (編集:宣言の後に 'begin'を使用する必要があります) – Juergen
変数は、順次VHDL構造の宣言領域でのみ宣言できます。 – Paebbels