Задача
Принять байт из последовательной линии в формате 8N1 и выставить признак готовности.
Тип схемы и среда
Последовательная схема: детект старт-бита, сдвиговый приём 8 бит, флаг готовности.
Алгоритм работы
При обнаружении старт-бита (rx=0) активируется приём. По стробам скорости в сдвиговый регистр заходят 8 бит; по завершении данные выставляются и поднимается ready.
Код на AHDL
% Проект 17: приёмник UART 8N1 (упрощённый, по baud_en) % SUBDESIGN ahdl_17_uart_priemnik ( clk, clrn : INPUT; baud_en : INPUT; rx : INPUT; data[7..0]: OUTPUT; ready : OUTPUT; ) VARIABLE shifter[7..0] : DFF; bitcnt[3..0] : DFF; active : DFF; rdy : DFF; BEGIN shifter[].clk = clk; shifter[].clrn = clrn; bitcnt[].clk = clk; bitcnt[].clrn = clrn; active.clk = clk; active.clrn = clrn; rdy.clk = clk; rdy.clrn = clrn; IF !active.q THEN rdy.d = GND; IF !rx THEN active.d = VCC; bitcnt[].d = 8; ELSE active.d = GND; bitcnt[].d = bitcnt[].q; END IF; shifter[].d = shifter[].q; ELSIF baud_en THEN IF bitcnt[].q == 0 THEN active.d = GND; rdy.d = VCC; shifter[].d = shifter[].q; bitcnt[].d = 0; ELSE shifter[].d = (rx, shifter[7..1].q); bitcnt[].d = bitcnt[].q - 1; active.d = VCC; rdy.d = GND; END IF; ELSE shifter[].d = shifter[].q; bitcnt[].d = bitcnt[].q; active.d = active.q; rdy.d = rdy.q; END IF; data[] = shifter[].q; ready = rdy.q; END;
Пояснения
В полной реализации строб выборки смещают на середину бита. Здесь темп задаёт внешний baud_en для наглядности логики.
Инструменты и справочники по теме
📦 help-user.ru — скупка и ремонт компьютерной техники. Продать ноутбук, ПК, комплектующие — help-user.ru.
Что дальше
Скачайте ahdl_17_uart_priemnik.tdf, создайте проект в MAX+PLUS II или Quartus,
назначьте выводы под свою плату и скомпилируйте. Остальные 49 разработок — в
разделе проектов на AHDL.