[an error occurred while processing this directive]
|
Написал простой приемник для RS232C. Прием начинается с отрицательного перепада на RXD, после чего запускается счетчик. При определенных его состояниях читаются биты с линии и помещаются на выход Q7 .. Q0. Синхроимпульсы идут в 8 раз чаще, чем биты в порт.
На практике выходит вот что. При нужных состояниях счетчика биты Q7 .. Q0 действительно правильно устанавливаются, но в следующем же такте ... сбрасываются ! Почему ? Вот мой код, гонял на симуляторе.
Спасибо.
SUBDESIGN simple_da_5
(
rxd, clk, clear : INPUT;
load, q[7..0] : OUTPUT;
)
VARIABLE
ss : machine with states (s0, s1);
count [6..0] : dffe;
BEGIN
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 => q [0] = rxd; count [].d = count [].q + 1;
when 20 => q [1] = rxd; count [].d = count [].q + 1;
when 28 => q [2] = rxd; count [].d = count [].q + 1;
when 36 => q [3] = rxd; count [].d = count [].q + 1;
when 44 => q [4] = rxd; count [].d = count [].q + 1;
when 52 => q [5] = rxd; count [].d = count [].q + 1;
when 60 => q [6] = rxd; count [].d = count [].q + 1;
when 68 => q [7] = rxd; count [].d = count [].q + 1;
when 76 => load = vcc; ss = s0;
when others => count [].d = count [].q + 1;
end case;
end case;
END;
E-mail: info@telesys.ru