Feedback Lab. 6 Turma A

3 views
Skip to first unread message

Rafael Auler

unread,
Jun 11, 2010, 2:45:34 PM6/11/10
to mc613_duvi...@googlegroups.com
Turma A,

Como alguns alunos comentaram comigo, acho importante que vocês recebam informação sobre onde erraram e perderam ponto nos projetos do último lab. Assim, vocês podem corrigir alguma má prática ou maneira incorreta de se implementar as coisas em VHDL, com o intuito de fazer um projeto final sem dores de cabeça e de maior qualidade. Procurei reunir os erros encontrados no laboratório 6 (que já está corrigido, com exceção dos grupos 6 e 8 que não entregaram ainda) e preparei um pequeno texto explicando sobre o erro, porque não fazer assim, o que você deve mudar no seu estilo de VHDL, etc. Neste texto eu também identifico os grupos que cometeram os erros citados, para que os autores estejam cientes de onde perderam pontos.

O documento está em anexo.

--
Rafael Auler
Computer Engineer
MSc Student
Computer Systems Laboratory (LSC)
IC - UNICAMP
Erros Lab6.pdf

Victor Macedo / Conlei

unread,
Jun 11, 2010, 10:07:13 PM6/11/10
to mc613_duvi...@googlegroups.com
valeu pelo texto!

com isso aprendi várias coisas que poderia sair da disciplina sem
saber por falta dos feedbacks...

---------------------------------------------
Victor "Conlei"
Engenharia da Computacao 08
Unicamp

Henrique Baggio

unread,
Jun 11, 2010, 11:33:28 PM6/11/10
to mc613_duvi...@googlegroups.com
Rafael,

Gostei da idéia do feedback. Como conversamos com vc na última aula, essa prática ajuda muito a corrigir os erros nos labs.

Por exemplo, ao ver seu comentário sobre o erro no exercício 4 do meu grupo (10), que inferia muitos latches por não usar um clock'event, foi que percebi que isso atrapalhou bastante.

Alguns labs atrás, tive o problema de tentar controlar um processo usando dois sinais e pegar eventos nos dois, exatamente o que acontece no caso do datapath do exercício, no meu caso, eu tenho dois sinais, KEY(0) e KEY(1), que são o clock e o reset assincrono do circuito. Meu processo ficou assim:

process(KEY(0), KEY(1))
begin
    if (KEY(1) = '0') then         -- reset assincrono
        ...
    elsif (KEY(0) = '0') then      -- processa instrucao
        ...
    end if;
end process;

Tanto no if como no elsif os mesmos sinais são alterados. Só não coloquei aqui para simplificar.

Como vc disse, essa lógica infere uma tonelada de latches. Só que ao tentar usar a sua dica, e colocar no if um 'event para cada sinal,  o quartus informa uma série de erros como esse:
Error (10820): Netlist error at datapath.vhd(36): can't infer register for LEDG[0] because its behavior depends on the edges of multiple distinct clocks

Foi por isso que não coloquei os events no if. Entendi que sem eles a lógica fica errada e gera latches, mas não consegui resolver. Separar o if em dois processos, um para cada sinal KEY, também não funcionou.

Já estava quase mandando esse e-mail pedindo para que vc explicasse como fazer, quando resolvi buscar nos slides das aulas algum exemplo (que eu sabia ter visto) de um caso parecido. E achei mesmo: um contador de 4 bits com reset assincrono. Ai percebi que o certo era ter feito um event em apenas um dos sinais. Teste no meu projeto e não tem um latch sequer! \o/

Enfim, agora já estamos caminhando pra parte final da disciplina. Mas fica a dica que que esse tipo de retorno sobre a correção dos labs ajuda muito. Obviamente, cada grupo poderia entrar em contato e pedir para explicar o que deu errado, mas acho que ambos os caminhos são bons. =)
Reply all
Reply to author
Forward
0 new messages