Projeto final desenvolvido na disciplina prática de arquitetura de computadores com o objetivo de implementar um co-processador que realiza operações matriciais (MPU).
A Unidade de Processamento Matricial (MPU) será desenvolvida como um periférico mapeado em memória.
- O tamanho da MPU é de 64 endereços.
- Cada endereço comportará um dado de 16 bits, utilizando o formato complemento de 2 para representar números inteiros.
- Região de Comando (Comunicação com a CPU): Endereços 0 a 15.
- Matriz C[4:4] (Resultado): Endereços 16 a 31.
- Matriz A[4:4] (Entrada 1): Endereços 32 a 47.
- Matriz B[4:4] (Entrada 2): Endereços 48 a 63.
A MPU deverá suportar os seguintes comandos:
-
Operações Matriciais:
add: ExecutaC[4:4] = A[4:4] + B[4:4].sub: ExecutaC[4:4] = A[4:4] - B[4:4].mul: ExecutaC[4:4] = A[4:4] * B[4:4](produto matricial).mac: ExecutaC[4:4] = C[4:4] + A[4:4] * B[4:4](produto acumulado).
-
Manipulação de Matrizes:
fill M, n: Preenche a matrizM[4:4]com o valor inteiron.identity M, n: Define a matrizM[4:4]como uma matriz identidade, multiplicada pelo valorn.
-
Leitura e Escrita:
- Load: Lê o dado de uma matriz qualquer (A, B ou C) através do endereço passado pela CPU.
- Store: Escreve o dado de uma matriz qualquer (A,B ou C) através do endereço passado pela CPU.
- Instrução
INTR Rs1:- Ativa o sinal
intr_inno processador. - O registrador
Rs1contém o endereço do tratamento da exceção. - A interrupção só é tratada se o conteúdo de
Rs1for diferente de zero. - Quando tratada:
- O endereço
PC+1é armazenado na pilha. - O processador salta para o endereço contido em
Rs1. - Após o tratamento o registrador é zerado.
- O endereço
- Ativa o sinal
- A CPU se comunica com a MPU utilizando os sinais:
address,data,ce_n,we_neoe_n. - As operações são realizadas com base nos endereços enviados pela CPU para a MPU.
- Foi desenvolvido um código em assembly para realizar o cálculo:
Z[4:4] = ((k1 * X[4:4]) * Y[4:4]) + (k2 * Z[4:4]) - Os valores das matrizes
Z,X,Ye das variáveisk1ek2são números inteiros randomizados, gerados em um site, e armazenados na memória RAM do projeto. - O código completo em assembly está disponível no arquivo
Code_R8no repositório.
Observação: A interrupção não foi utilizada nesse cálculo.
O processador R8 foi desenvolvido na PUC-RS, e todas os recursos do projeto estão disponíveis no site oficial: R8 Processor Core