[an error occurred while processing this directive]
|
SUBDESIGN simple_da_5
(
rxd, clk, clear : INPUT;
load, q[7..0] : OUTPUT;
)
VARIABLE
ss : machine with states (s0, s1);
count [6..0] : dffe;
qt [7..0] : dffe;
BEGIN
qt [].clk = clk;
qt [].d = rxd;
qt[].clrn=clear;
count [].clrn = clear;
count [].clk = clk;
ss.clk = clk;
ss.reset = !clear;
case ss is
when s0 =>
load = gnd;
count [].d = 0;
if !rxd then ss = s1;
end if;
when s1 =>
case count [].q is
when 12 => qt[0].ena = vcc; count [].d = count [].q + 1;
when 20 => qt[1].ena = vcc; count [].d = count [].q + 1;
when 28 => qt[2].ena = vcc; count [].d = count [].q + 1;
when 36 => qt[3].ena = vcc; count [].d = count [].q + 1;
when 44 => qt[4].ena = vcc; count [].d = count [].q + 1;
when 52 => qt[5].ena = vcc; count [].d = count [].q + 1;
when 60 => qt[6].ena = vcc; count [].d = count [].q + 1;
when 68 => qt[7].ena = vcc; count [].d = count [].q + 1;
when 76 => load = vcc; ss = s0;
when others => count [].d = count [].q + 1;
end case;
end case;
q[]=qt[];
END;
Замечания:
1. На симуляторе не гонял, только посмотрел уравнения для q[]. Вроде
правильные.
2. q[] должно держаться до следующего цикла.
3. load не переделывал, будет держаться всего один такт
4. Нет ожидания прихода stop, хотя надо бы.
P.S. Если не работает, сильно не ругайте.
E-mail: info@telesys.ru