Допуская rdsor
эквивалентен ваш теоретическую var
и делители эквивалентного foo
вы могли бы использовать два задание в процессе заявления:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity jsevillamol is
end entity;
architecture fum of jsevillamol is
constant M: natural := 42;
constant N: natural := 23;
signal rdsor: signed (M - 1 downto 0);
signal divisor: std_logic_vector (N - 1 downto 0);
begin
-- rdsor <= signed('0' & divisor & others=>'0');
process (divisor)
begin
rdsor <= (others => '0');
rdsor (rdsor'LEFT downto rdsor'LEFT - divisor'LENGTH)
<= signed('0' & divisor);
end process;
end architecture;
Это работает, потому что каждый элемент rdsor
отдельный знак al и есть только одно значение для любого конкретного времени в прогнозируемом выходном сигнале . Не создавая after
time_expression в элементе формы сигнала второго присвоения элементам срезу будут присвоены значения значений второго присваивания. (Элементы первого присваивания вытесняются вторым). Этот метод перезаписи прогнозируемого выходного сигнала обычно используется для предоставления значений по умолчанию до покрытия неполного условия с помощью операторов if.
Этот пример анализирует, разрабатывает и моделирует, не делая ничего интересного, демонстрируя, что диапазоны индексов строятся правильно.
Обратите внимание, что это избегает вопроса о конкатенации или агрегации, вызванной ответом Мэтью Тейлора.
Для одного присвоения сигнала в методе не чувствителен к пересмотру VHDL инструмента:
architecture fie of jsevillamol is
constant M: natural := 42;
constant N: natural := 23;
signal rdsor: signed (M - 1 downto 0);
signal divisor: std_logic_vector (N - 1 downto 0);
subtype other is signed (rdsor'LEFT - divisor'LENGTH - 1 downto 0);
begin
-- rdsor <= signed('0' & divisor & others=>'0');
rdsor <= '0' & signed(divisor) & other'(others => '0');
end architecture;
Это использует конкатенацию и вбирает в others
в агрегат. Существует объявление подтипа для конечной части «0», чтобы агрегированное выражение могло быть целевым для квалифицированного выражения.
Эта архитектура также анализирует, разрабатывает и моделирует доказательную арифметику индекса.
Вы не предоставили декларацию для 'divisor,' или 'rdsor', необходимых для предоставления решения. Обратите внимание, что в вашем одном фрагменте строки не отображаются ни 'var', ни' foo'. Вы также не указали, какую версию VHDL вы планируете ожидать. – user1155120