Я часто задавался почему VHDL variable
может быть объявлена как на process
, а также уровень architecture
(как shared
), в то время как signal
может быть объявлена только на architecture
уровне - даже если это просто используется в рамках одного process
.сигнала локальной обработки Объем
Декларирование вещи (например signals
или variable
S) в рамках как можно более узким и как можно ближе к месту, они используются, действительно увеличивает читаемость совсем немного, на мой взгляд.
Следовательно, мой вопрос: есть ли какая-либо причина, присущая дизайну языка VHDL, почему следующее невозможно сделать?
architecture does_not_compile of test is
signal a, d : std_logic_vector(15 downto 0);
-- This would work, but does not need to be here:
-- signal c : std_logic_vector(15 downto 0);
begin
process (clk)
variable b : std_logic_vector(15 downto 0);
-- This would be nice, but is not permitted:
signal c : std_logic_vector(15 downto 0);
begin
if (rising_edge(clk)) then
b := foo_operation(a); -- could just be used to store an intermediary value
c <= bar_operation(b); -- could e.g. be a pipeline register
d <= baz_operation(c); -- the "output register" of this process
end if;
end process;
-- somewhere else:
a <= input_xyz;
output_xyz <= d
end architecture;
И на всякий случай: я сделать понять разницу между signal
и variable
...
Вы можете обернуть свой процесс или несколько процессов в блок или сгенерировать оператор, чтобы объявлять сигналы с меньшей областью. – Paebbels
Возможно, вам стоит посетить http://www.eda.org/twiki/bin/view.cgi/P1076/WebHome, присоединиться к рабочей группе и отстаивать это дополнение. Я не вижу причин не делать этого, и хотя метод @Paebbels был бы подробным способом обработки процесса, он вообще не работал бы в процедуре. –