MO801 / MC912

Tópicos em Arquitetura e Hardware

Primeiro Trabalho

O primeiro trabalho consiste em implementar um árbitro com 4 entradas. O árbitro deve usar a disciplina round-robin para gerenciar as prioridades. Utilize a entidade abaixo:
entity arbiter is
port (clk : in bit;
resetn : in bit;
request : in bit_vector (0 to 3);
acknowledge : out bit_vector (0 to 3)
);
end entity arbiter;

Todos os nomes devem ser idênticos aos descritos acima. Use a seguinte convenção para os sinais:
clk
Clock ativo em borda de subida
resetn
Reset do circuito, ativo em zero. Quanto ocorrer, o request(0) recebe prioridade
request
Vetor de solicitações de barramento
acknowledge
Vetor de resposta às solicitações de barramento

Seu código deve ser compilado e simulado através das ferramentas da Mentor (qvhcom e qhsim). No seu circuito deve existir sempre uma linha do barramento com prioridade máxima e a prioridade decairá seqüencialmente a partir dela para todos os outros sinais. Toda vez que um acknowledge for fornecido, a linha de maior prioridade mudará. Veja alguns exemplos:
Linha de
maior prioridade
Request
(0, 1, 2, 3)
Acknowledge
(0, 1, 2, 3)
Nova linha de
maior prioridade
0
1000
1000
1
1
1100
0100
2
2
1100
1000
1
1
1100
0100
2
2
1111
0010
3
3
1111
0001
0

Observe que só há no máximo um sinal no barramento acknowledge ativo a cada instante.

Testbench

O Testbench é composto pelos seguintes arquivos:
Para executar o Testbench, coloque todos os arquivos acima num diretório juntamente com o seu módulo vhdl, que deve ser chamado de arbiter.vhd, e execute make testbench. Várias mensagens de compilação e simulação aparecerão na sua tela.
Ao final do processo deve aparecer a mensagem: "0 erro(s) na simulação". Caso apareça algum erro, olhe o arquivo arbiter.output que foi gerado pelo Testbench e veja a diferença entre ele e o arbiter.expected. Rode o simulador (qhsim) manualmente e veja as formas de onda para depurar seu módulo.