Aperfeiçoar conhecimentos de VHDL sintetizável e coletar características do circuito gerado (área e desempenho).
Um contador de quadratura é um circuito utilizado para, em conjunto com uma roda dentada e dois sensores, medir movimento de rodação. A figura abaixo indica a disposição dos dois sensores em relação à roda dentada. Assumindo que os sensores ficam ativos quando pode passar luz entre os dentes da roda, se o sensor A ficar ativo e, logo em seguir, o sensor B ficar ativo, isso significa que a roda da figura abaixo girou no sentido horário.
Um mouse mecânico é formado por dois sensores de quadratura para detectar o movimento, 3 botões e um terceiro sensor de quadratura para detectar movimentos de scroll. Você deve implementar, em VHDL sintetizável (RTL) o circuito de controle desse mouse. A entidade implementada deve ser exatamente:
entity Quadratura isSeu circuito deve interpretar todos os sensores e guardar uma totalização dos movimentos das rodas e dos estados dos botões. Os valores guardados devem ser fornecidos sempre que o sinal leitura for ativado. O sinal leitura indica que, no próximo ciclo de clock a saída deve ser válida (por apenas um ciclo de clock), com os valores disponíveis no ciclo atual.
generic (debounce : natural := 7);
port (clk,
reset,
leitura,
horizontalA,
horizontalB,
verticalA,
verticalB,
scrollA,
scrollB,
botaoE,
botaoM,
botaoD : in std_logic;
alterado : out std_logic;
x,
y,
scroll : out integer;
botoes : out std_logic_vector(5 downto 0));
end entity Quadratura;
Seu circuito deve efetuar um debounce de todos os sinais de entrada pelo número de ciclos informados através do parâmetro generic (o valor padrão é 7).
Os sinais x, y e scroll devem conter a quantidade de movimento desde a última vez que o sinal leitura foi ativado. A seqüência de ativação do sensor A seguido pelo sensor B significa um incremento no valor dos contadores internos. Uma seqüência contrária indica um decremento do sensor.
O sinal reset zera todos os contadores e acumuladores de estado internos do circuito.
O sinal botoes contém 3 conjuntos de 2 campos na seqüência: botão esquerdo apertado, botão esquerdo solto, botão do meio apertado, botão do meio solto, botão direito apertado e botão direito solto. Observe que o vetor está indexado de 5 até 0. Esses estados também devem ser computados desde a última leitura do valor.O sinal alterado indica que algum dos valores internos dos contadores ou acumuladores de estado foram alterados desde a última leitura.
Seu circuito deve ser sensível à borda de subida do sinal clk (clock).
A figura abaixo é um exemplo dos valores de saída considerando debounce = 7.
Cada aluno, individualmente e sem consulta ao trabalho de outro aluno, deve realizar as seguintes atividades:
Os alunos estão autorizados a
testarem seus modelos com os testbenches
dos outros alunos da sala.
A entrega deve ser feita por email até as 8:00 de 28/04/06. Assunto do email: MO801: Entrega T1 - numero_do_RA
Todos os trabalhos serão executados num ambiente de avaliação automática utilizando ghdl. Por isso, é necessário que todos os passos da entrega sejam cumpridos corretamente sob o risco do teste indicar erro de forma incorreta. Um gabarito será incluído no conjunto de trabalhos entregues e todos os trabalhos serão avaliados contra todos os testbenches. Esse resultado servirá de base para a avaliação. Os dados do Quartus II serão verificados e o melhor trabalho em termos de área e desempenho ganhará um bônus na nota. O conteúdo da implementação será avaliado. O relatório também será avaliado.