Escolar Documentos
Profissional Documentos
Cultura Documentos
Engenharia de Computação
Laboratório de Arquitetura e Organização de Computadores I
1º Trabalho Prático. Data de Entrega: 08/02. Valor: 20 pontos.
A adição ou subtração é realizada pelo uso do multiplexador num primeiro momento, permitindo
a cópia do primeiro operando, um número de 16 bits, para o registrador A. Realizado este passo,
o segundo número de 16 bits é colocado no barramento, o somador/subtrator realiza a operação
e o resultado é carregado no registrador G. Finalmente o dado em G podem ser transferido para
algum dos outros registradores.
Figura 1
O sistema pode realizar diferentes operações em cada ciclo de clock de acordo com a
determinação da unidade de controle. Esta determina quando um dado é colocado no barramento
e determina também em qual dos registradores o dado deve ser escrito. Exemplificando: se a
unidade de controle atribui os sinais R0out e Ain, então o multiplexador deverá colocar o conteúdo
do registrador R0 no barramento e este dado deverá ser carregado na próxima borda ativa de
clock no registrador A.
Cada instrução pode ser armazenada no registrador IR e é codificada da seguinte forma: Palavra
de 9 bits IIIXXXYYY onde III representa o opcode, XXX o endereço do registrador X e YYY o
endereço do registrador Y.
Apesar de serem necessários somente 2 bits para codificar as 4 instruções, serão usados 3 bits
para possam ser adicionados outras instruções no futuro. Dado o comprimento da instrução, é
necessário que a entrada de IR seja ligada a apenas 9 dos 16 bits de DIN conforme indicado na
figura 1. Para a instrução mvi o campo YYY não tem significado e o imediato, #D é fornecido na
entrada DIN logo após a instrução mvi ser armazenada no registrador IR.
Algumas instruções, como a soma e a subtração levam mais de um ciclo de clock para completar
porque muitas transferências tem de ser feitas utilizando-se o barramento. O processador começa
a execução da instrução na porta DIN quando o sinal RUN é ativado. O processador por sua vez
ativa o sinal DONE quando a instrução é terminada. A tabela 2 indica os sinais de controle que
são atribuídos a cada passo de tempo para a implementação da tabela 1. Note que o único sinal
de controle atribuído no passo 0 é o IRin e que este passo não é apresentado na tabela.
T1 T2 T3
(mv): I0 RYout, RXin, Done
(mvi): I1 DINout, RXin, Done
(add): I2 RXout, Ain RYout, Gin Gout, RXin, Done
(sub): I3 Rxout, Ain RYout, Gin, AddSub Gout, Rxin, Done
Tabela 2
Parte I
Parte II
Figura 4
1. Crie um novo projeto no Quartus II para testar o circuito.
2. Crie um arquivo Verilog que instancie o processador, a memória e o contador. Use o
Quartus II MegaWizard Plug-In para criar um módulo de memória a partir da biblioteca
de módulos parametrizáveis da Altera. O módulo está na categoria Memory Compiler e
chama-se ROM:1-PORT. Siga as instruções do wizard para criar a memória que tenha uma
porta de leitura de dados de 16 bits e 32 posições diferentes.
Para inserir instruções na memória é necessário a especificação de valores iniciais. Isto poderá
ser feito no wizard executado no momento da criação do módulo de memória através da
indicação de um arquivo do tipo MIF (memory initialization file). Use o help do Quartus para
aprender sobre o formato do MIF e como criar um arquivo que tenha instruções suficientes para
testar o seu circuito.
3. Faça um simulação funcional para testar o circuito.
Figura 5
Figura 6
Parte III
Tabela 1
A unidade de controle imprementa o PC através do uso de um sinal incr_PC que nada mais é do
que um enable para o próprio contador. Também é possível caregar diretamente o endereço no
PC (R7) fazendo com que o processador execute uma instrução mv ou mvi na qual o registrador
de destino seja especificado com R7. Neste caso a unidade de controle realiza um carregamento
paralelo no contador. Desta maneira o processador pode executar instruções de qualquer
endereço da memória. De maneira similar o conteúdo do PC pode ser copiado em qualquer outro
registrador através do uso da instrução mv. Um exemplo de código que utilize o registrador PC
para a implementação de um loop é apresentado abaixo, os textos depois do caracter "%" são
apenas comentários. A instrução mv R5, R7 coloca no R5 o endereço de memória da instrução
sub R4, R2. Então a instrução mvnz R7, R5 provoca a execução da instrução sub até que o valor
em R4 seja 0.
mvi R2,#1
mvi R4,#10000000 % binary delay value
mv R5,R7 % save address of next instruction
sub R4,R2 % decrement delay count
mvnz R7,R5 % continue subtracting until delay count gets to 0
Figura 1
A figura 1 mostra dois registradores no processador que são usados para transferencia de dados.
O registrador ADDR é usado para enviar o endereço à um dispositivo externo como um módulo
de memória, por exemplo, e o registrador DOUT é usado pelo processador para prover os dados
que serão armazenados fora do processador. Um dos usos do registrador ADDR é para a leitura
ou busca de instruções da memória; quando o processador precisa buscar uma instrução, o
conteúdo do PC (R7) é transferido no barramento e carrehado em ADDR. Este endereço é então
provido à memória. Além da busca de instruções, o processador pode ler dados de qualquer
posição de memória através da utilização deste mesmo registrador ADDR. Tanto dados quanto
instruções são recebidos no processador pela entrada DIN. O processador pode escrever dados
em um dispositivo externo através do armazenamento do endereço no registrador ADDR, do
armazenamento dos dados no registrador DOUT e da habilitação do sinal W (write).