Что-то не как опрос клавиатуры не работает в мониторе. Напоминаю что наверное используется не реализованный опрос, когда все выводы ВВ55 предназначенные для клавиатуры программируются на ввод. Пересечение клавиши - два нуля, соответствующие строке и столбцу нажатой клавиши. Вот выдержки кода:
Драйвер клавиатуры:Код:... if res_n = '0' then metod <= "00"; ... elsif (u7rd = '1') then -- запись в порты клавиатуры if a_buff (1 downto 0) = "00" then -- порт А клавиатуры if metod = "00" then dataI <= scan_out0 (7 downto 0); -- код ответа else dataI <= scan_out (7 downto 0); -- код ответа end if; end if; if a_buff (1 downto 0) = "01" then -- порт В клавиатуры if metod = "00" then dataI <= scan_out0 (13 downto 8) & not shift & '0'; -- код ответа else dataI <= scan_out (5 downto 0) & not shift & '0'; -- код ответа end if; end if; if a_buff (1 downto 0) = "10" then -- порт С клавиатуры if metod = "00" then dataI <= "0000" & scan_out0 (17 downto 14); -- код ответа else dataI <= "0000" & scan_out (11 downto 8);-- код ответа end if; end if; ... spetskey:spetskeyboard port map( ... metod => metod,-- метод опроса sp_kb_out0 => scan_out0, -- код ответа для метода №0 ...
Принцип прост: при считывании с одного из портов ВВ55 считывается код с двумя нулями, соответствующий скан-коду PS/2 клавиатуры.Код:always @(posedge clk) begin if (reset) case (metod) 0: begin sp_kb_out0_ <= 18'h00; end ... else begin if (strobe) case (metod) 0: begin case (sp_kb[7:0]) 9'h005: sp_kb_out0_ <= 18'b011101111111111111; //F1 9'h006: sp_kb_out0_ <= 18'b101101111111111111; //F2 9'h004: sp_kb_out0_ <= 18'b110101111111111111; //F3 9'h00c: sp_kb_out0_ <= 18'b111001111111111111; //F4 9'h003: sp_kb_out0_ <= 18'b111101111101111111; //F5 9'h00b: sp_kb_out0_ <= 18'b111101111110111111; //F6 9'h083: sp_kb_out0_ <= 18'b111101111111011111; //F7 9'h00a: sp_kb_out0_ <= 18'b111101111111101111; //F8 9'h001: sp_kb_out0_ <= 18'b111101111111110111; //F9 9'h009: sp_kb_out0_ <= 18'b111101111111111011; //ЧФ 9'h078: sp_kb_out0_ <= 18'b111101111111111101; //БФ 9'h007: sp_kb_out0_ <= 18'b111101111111111110; //СТР ... и так далее на все 12х6 клавиш




Ответить с цитированием