[an error occurred while processing this directive]
|
Ну теоретически я знаю что микропрограмный автомат это ПЗУ с нужными упр сигналами в определенный момен времени
Автмат Мили это автомат у которого выходное состояние зависит от предыдущего и от входных сигналов
А Мура - только от входных сигналов.
Но вот как написать это на VHDL и какой из этих автоматов применить в данном конкретном случае - помоему это вопрос интуиции и практического опыта.
А по поводу синхронности то ИМХО луше синхронный - т. к. асинхронные тригера это не контролируемые задержки в линиях сигналов. А мне необходим самый быстрый вариант - скорость порядка 150 - 180 MHz
Не знаю какой автомат у меня получился на структура написания такая:
ST - состояния
UP - управляющие сигналы
if STATE=ST1 then
if UP1 ='0' then
NXT_STATE<=ST1;
elsif UP_CMD=CMD1 then
NXT_STATE<=ST2;
elsif UP_CMD=CMD2 then
NXT_STATE<=ST5;
else
NXT_STATE<=ST1;
end if;
elsif STATE=ST2 then
if UP2='1' then
NXT_STATE<=ST1;
else
NXT_STATE<=ST4;
end if;
elsif STATE=ST4 then
if UP2='1' then
NXT_STATE<=ST1;
else
NXT_STATE<=ST4;
end if;
elsif STATE=ST2 then
NXT_STATE<=ST5;
elsif STATE=ST5 then
if UP3='1' then
NXT_STATE<=ST6;
else
NXT_STATE<=ST5;
end if;
elsif STATE=ST6 then
if UP4='1' and UP2='1' then
NXT_STATE<=ST7;
else
NXT_STATE<=ST6;
end if;
elsif STATE=ST7 then
if UP2='0' then
NXT_STATE<=ST8;
else
NXT_STATE<=ST7;
end if;
elsif STATE=ST8 then
if UP2='0' then
NXT_STATE<=ST1;
else
NXT_STATE<=ST8;
end if;
else
NXT_STATE<=ST1;
end if;
-- Процес перехода в следующее состояние
CHANGE_STATE : process (CLK, RST)
begin
if CLK='1' and CLK'event then
if RST='0' then
STATE <= ST1;
else
STATE<=NXT_STATE;
end if;
end if;
end process;
UP2 - сигнал окончания операции и перехода в следующее состояние.
В синтезированной схеме получается очень много (до 4х) последователно вкюченных мультиплексоров.
Чтобы бы вы посоветовали для улучшения скорости?
E-mail: info@telesys.ru