AFON//Радиотехник
AHDL · проект 16/50

Передатчик UART

Формат 8N1, сдвиг по стробу скорости

Задача

Передавать байт по последовательному интерфейсу в формате 8N1: старт-бит, 8 бит данных, стоп-бит.

Тип схемы и среда

Последовательная схема: сдвиговый регистр кадра + счётчик битов, темп задаёт внешний строб baud_en.

Алгоритм работы

По start кадр (стоп, данные, старт) загружается в сдвигатель. Каждый строб скорости выдвигает младший бит на линию tx и уменьшает счётчик. Линия покоя — единица.

Код на AHDL

ahdl_16_uart_peredatchik.tdf↓ скачать .tdf
% Проект 16: передатчик UART 8N1 %
SUBDESIGN ahdl_16_uart_peredatchik
(
    clk, clrn : INPUT;
    baud_en   : INPUT;   % импульс на скорости передачи %
    start     : INPUT;
    data[7..0]: INPUT;
    tx        : OUTPUT;
    busy      : OUTPUT;
)
VARIABLE
    shifter[9..0] : DFF;   % стоп, данные[7..0], старт %
    bitcnt[3..0]  : DFF;
    active        : DFF;
BEGIN
    shifter[].clk = clk;  shifter[].clrn = clrn;
    bitcnt[].clk  = clk;  bitcnt[].clrn  = clrn;
    active.clk    = clk;  active.clrn    = clrn;

    IF !active.q THEN
        active.d   = start;
        shifter[].d = (VCC, data[], GND);
        bitcnt[].d = 10;
        IF start THEN active.d = VCC; END IF;
    ELSIF baud_en THEN
        shifter[].d = (VCC, shifter[9..1].q);
        bitcnt[].d  = bitcnt[].q - 1;
        IF bitcnt[].q == 1 THEN active.d = GND; END IF;
    ELSE
        shifter[].d = shifter[].q;
        bitcnt[].d  = bitcnt[].q;
        active.d    = active.q;
    END IF;

    tx   = !active.q # shifter[0].q;
    busy = active.q;
END;

Пояснения

Внешний генератор baud_en задаёт скорость (например, из делителя). Порядок бит UART — младшим вперёд, поэтому сдвиг вправо.

Инструменты и справочники по теме

📦 help-user.ru — скупка и ремонт компьютерной техники. Продать ноутбук, ПК, комплектующие — help-user.ru.

Что дальше

Скачайте ahdl_16_uart_peredatchik.tdf, создайте проект в MAX+PLUS II или Quartus, назначьте выводы под свою плату и скомпилируйте. Остальные 49 разработок — в разделе проектов на AHDL.