私は各ステージで入力信号の偶数/奇数ラインを選択する多段マルチプレクサを実装しようとしています。たとえば、私は8つの入力[a(0)a(2)a(3)a(4)a(5)a(6)a(7)]と3つの入力信号[s )s(2)]。マルチプレクサは、s(0)= 0の場合、最初のステージは[a(0)a(2)a(4)a(6)]を通過し、そうでなければ奇数エレメント[a 3)a(5)a(7)]。私はこのような奇数と偶数の要素に入力信号をスライスしようとしていますこれを行うには:VHDLの偶数/奇数要素をスライス
entity mux is
port(
s : in std_logic_vector(0 to 3);
vline : in std_logic_vector(0 to 8);
output : out std_logic
);
end mux;
architecture multistage of mux32 is
signal level0even : std_logic_vector(0 to 3);
signal level0odd : std_logic_vector(0 to 3);
signal temp0 : std_logic_vector(0 to 3);
signal level1even : std_logic_vector(0 to 1);
signal level1odd : std_logic_vector(0 to 1);
signal temp1 : std_logic_vector(0 to 1);
signal level2even : std_logic;
signal level2odd : std_logic;
signal temp2 : std_logic;
begin
-- Slicing level0
for k in 0 to 3 loop
level0even(k) <= vline(2*k);
level0odd(k) <= vline(2*k+1);
end loop;
with s(0) select
temp0 <= level0even when "0",
level0odd when "1",
"----" when others;
-- Slicing level1
for k in 0 to 1 loop
level1even(k) <= temp0(2*k);
level1odd(k) <= temp0(2*k+1);
end loop;
with s(1) select
temp1 <= level1even when "0",
level1odd when "1",
"----" when others;
[...]
end multistage;
をしかし、以前のコードを記述する際のMultisimは私にレベル0のスライスでエラー「不正同時声明」を与えます。問題は、ベクトルの偶数/奇数要素をスライスするよりエレガントでコンパクトな方法はありますか?
さらに、より大きな入力ベクトルに使うために、パラメトリックな方法でコードを書こうとしていますが、私は一時的なベクトル(levelxodd/even)を宣言する必要があるので、一つずつ。誰にどのようにこれを行うにはどのような提案がありますか?
あなたのコードは[、最小限の完全かつ検証可能な例]ではありません(https://stackoverflow.com/help/mcve)が存在していないだけで構文エラーは、[...]がありますループ・ステートメントは、プロセス・ステートメントまたはサブプログラムのいずれかに進む順次ステートメントです。どちらの答えも、それを知っている人からのものであり、どちらも解決策が証明されていないことに注意してください。 – user1155120
'temp1 <= [...]" ---- "他の場合は';あなたが「気にしないで」使っていることを達成したいと思いますか?ところで "0" - > "0"。最初は 'std_logic_vector'、2番目は' std_logic'です。 – JHBonarius
P.あなたは2つの質問をしていますが、それは全く異なる回答をします。 IMHOを分ける方が良い。 しかし、なぜマルチプレクサツリー全体をVHDLで構築していますか?あなたはそれがFPGAで完全に異なって実装されることを知っていますか? – JHBonarius