Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Люди, помогите разобраться с VHDL...
Отправлено
GW 20 августа 2009, г. 18:38
До этого, если и приходилось иметь дело с ПЛИС, то только на уровне схемного редактора. Решил освоить более прогрессивный метод и на простейшей задаче встал в тупик. Видимо, чего-то не понимаю в самой идеологии VHDL.
Берем простейшую задачу: при подаче на вход А положительного фронта (допустим, уже синхронизированного с клоком) сформировать некую последовательность импульсов на выходах В и С . Само формирование последовательности проблем не вызывает, написал простейший автомат и все заработало.
entity automat is
Port ( clk : in STD_LOGIC;
A : in STD_LOGIC;
BC : out STD_LOGIC_VECTOR (1 downto 0));
end automat;
architecture Behavioral of automat is
type TState is (s1,s2,s3);
signal state,next_state:TState;
begin
process(state)
begin
case state is
when s1 =>
next_state <= s2;
BC <= "00";
when s2 =>
next_state <= s3;
BC <= "01";
when s3 =>
next_state <= s1;
BC <= "10";
end case;
end process;
state <= next_state when clk'event and clk = '0';
end Behavioral;
А вот как заставить этот автомат формировать последовательность однократно по приходу фронта на А?
Если переход из состояния 1 в 2 сделать по условию прихода фронта, то компилятор ругается «Signal next_state cannot be synthesized, bad synchronous description.»
process(state,А)
begin
case state is
when s1 =>
if(A'event and A='1') then
next_state <= s2;
end if;
BC <= "00";
….
Второй путь, который приходит в голову – не зацикливать автомат, пусть он остается в состоянии 3, но сбрасывать его по фронту А в начальное состояние. Но и это не проходит, поскольку сбрасывать придется в другом процессе, а это «multi source».
…
begin
process(А)
begin
if(А'event and А = '1') then
state <= s1;
end if;
end process;
…
state <= next_state when clk'event and clk = '0';
end Behavioral;
Понимаю, что мыслю как-то совсем не туда, объясните, куда надо?
Составить ответ | Вернуться на конференцию.
Ответы