Задача
Принять скан-код клавиатуры PS/2: старт, 8 бит данных, чётность, стоп.
Тип схемы и среда
Последовательная схема: синхронизатор PS2_CLK, детект спада, сдвиговый приём 11 бит.
Алгоритм работы
Данные защёлкиваются по спадающему фронту PS2_CLK (устройство меняет их по спаду). После 11 бит извлекаются 8 бит данных и поднимается ready.
Код на AHDL
% Проект 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.