MO801/MC912 - Trabalho 1

Informações Gerais

Objetivo

Aperfeiçoar conhecimentos de VHDL sintetizável e coletar características do circuito gerado (área e desempenho).

Descrição

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.

Roda dentada

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 is
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 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.

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.

Exemplo de forma de onda do contador de quadratura

Atividades a serem feitas

Cada aluno, individualmente e sem consulta ao trabalho de outro aluno, deve realizar as seguintes atividades:

  • Implementar, em VHDL, o circuito especificado acima, utilizando quantos arquivos forem necessários
  • Definir e implementar um testbench para o circuito
  • Utilizar o ghdl para testar a implementação
  • Garantir que seu circuito passe pelo seu testbench
  • Sintetizar o circuito utilizando o Quartus II utilizando uma FPGA Cyclone II
  • Gerar um relatório resumido sobre o trabalho (1 página, seguindo as mesmas especificações dos resumos) contendo a área e a freqüência máxima de operação do circuito

Os alunos estão autorizados a testarem seus modelos com os testbenches dos outros alunos da sala.

Entrega

Cada aluno deve entregar seu trabalho por email, com apenas um arquivo em anexo, nomeado XXXXXX.tgz, onde XXXXXX são os 6 dígitos do seu RA (não incluir as letras RA no nome do arquivo). Dentro desse arquivo deve existir um diretório cujo nome será os 6 dígitos do seu RA (sem as letras RA). Dentro desse diretório devem estar:
  • O relatório no formato dos resumos
  • Os arquivos da implementação do circuito
  • O testbench do circuito
  • O arquivo principal tem que se chamar quadratura.vhd e o arquivo do testbench tem que se chamar tb_quadratura.vhd
  • Três scripts, um para compilar seu circuito sem o testbench (compila.sh), outro para compilar o testbench (compila_tb.sh) e o terceiro para executar o testbench (executa.sh). O script de execução deve criar um arquivo chamado ERRO em caso de erro de execução e não deixar que ele exista (apaga-lo) caso não aconteça nenhum erro.

A entrega deve ser feita por email até as 8:00 de 28/04/06. Assunto do email: MO801: Entrega T1 - numero_do_RA

Correção

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.

Retornar à página principal.