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

Приём PS/2

Кадр клавиатуры 11 бит по спаду PS2_CLK

Задача

Принять скан-код клавиатуры PS/2: старт, 8 бит данных, чётность, стоп.

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

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

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

Данные защёлкиваются по спадающему фронту PS2_CLK (устройство меняет их по спаду). После 11 бит извлекаются 8 бит данных и поднимается ready.

Код на AHDL

ahdl_32_ps2_priem.tdf↓ скачать .tdf
% Проект 32: приём кадра PS/2 (11 бит) %
SUBDESIGN ahdl_32_ps2_priem
(
    clk, clrn : INPUT;
    ps2_clk   : INPUT;
    ps2_data  : INPUT;
    scancode[7..0] : OUTPUT;
    ready     : OUTPUT;
)
VARIABLE
    clk_s[2..0] : DFF;
    sh[10..0]   : DFF;
    bitc[3..0]  : DFF;
    rdy         : DFF;
    fall        : NODE;
BEGIN
    clk_s[].clk = clk; clk_s[].clrn = clrn;
    sh[].clk    = clk; sh[].clrn    = clrn;
    bitc[].clk  = clk; bitc[].clrn  = clrn;
    rdy.clk     = clk; rdy.clrn     = clrn;

    clk_s[].d = (clk_s[1..0].q, ps2_clk);
    fall = clk_s[2].q & !clk_s[1].q;

    IF fall THEN
        sh[].d   = (ps2_data, sh[10..1].q);
        bitc[].d = bitc[].q + 1;
    ELSE
        sh[].d   = sh[].q;
        bitc[].d = bitc[].q;
    END IF;

    IF bitc[].q == 11 THEN
        rdy.d    = VCC;
        bitc[].d = 0;
    ELSE
        rdy.d = GND;
    END IF;

    scancode[] = sh[8..1].q;
    ready = rdy.q;
END;

Пояснения

Клавиатура PS/2 — ведущее устройство тактирования при передаче к хосту. Байт передаётся младшим битом вперёд, поэтому сдвиг вправо.

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

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

Что дальше

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