2. Simulação usando o ModelSim

Propaganda
Aula Prototipação – 02/abril
Objetivos da aula
- Simulação nível de ciclo
- Simulação com o ModelSim
- Prototipação com o novo programa
1. Simulação nível de ciclo



Baixar novamente os fontes da aula - fontes cleo 2
Extrair o arquivo. Reparar a existência de um diretório com o simulador do processador Cleópatra.
Analisar o nova aplicação conta2.asm

Abrir o simulador Cleosim.exe e carregar o conta2.asm
1 2

Executar a montagem, clicando sobre o círculo 1 em destaque na figura acima. Se o programa está
corretamente escrito aparecerá no canto inferior esquerdo a mensagem “sucesso”.

Depois do programa corretamente
montado, pode-se simulá-lo, clicandose sobre o círculo 2 da figura acima,
causando a abertura da janela do
simulador, ao lado.

Pode-se observar o estado da memória,
dos registradores, e executar passo-apasso.

No anexo a este documento encontrase um resumo do processador.

Geração do arquivo em código objeto. Selecionar o formato listagem VHDL (com abaixo) e realize
novamente a montagem.

No diretório de trabalho é criado o arquivo “conta2.txt”, contendo:
00 44
01 42
02 50
03 01
04 24
05 42
06 94
07 1B
.....
;
;
;
;
;
;
;
;
LDA #42H
ADD #1
STA #42H
JC #1BH
Este arquivo indica na primeira coluna o endereço, na segunda coluna o código da instrução, e
nas colunas subseqüentes, após o ponto e virgula, um comentário com a instrução.
2. Simulação usando o ModelSim
1) O primeiro passo é trabalhoso (manual), que consiste em copiar a segunda coluna do conta2.txt para
o obj_code.vhd.
obj_code.vhd original
obj_code.vhd MODIFICADO
--------------------------------------------------------Package com o código objeto
--------------------------------------------------------library IEEE;
use IEEE.Std_Logic_1164.all;
--------------------------------------------------- Package com o código objeto
-------------------------------------------------library IEEE;
use IEEE.Std_Logic_1164.all;
package object_code is
package object_code is
type ram is array (0 to 255) of std_logic_vector(7
downto 0);
type ram is array (0 to 255) of std_logic_vector(7
downto 0);
signal memoria : ram := (
x"44",
x"5D",
x"54",
x"5F",
x"24",
x"61",
x"94",
x"37",
x"44",
x"5E",
x"54",
x"60",
x"24",
x"62",
x"9C",
....
signal memoria : ram := (
x"44",
x"42",
x"50",
x"01",
x"24",
x"42",
x"94",
x"1B",
x"44",
x"43",
x"24",
x"FF",
x"44",
x"42",
x"24",
x"FE",
x"44",
…….

Sugestão: apague a coluna original até a linha 112. Inserir o novo código objeto. Remover as colunas
excedentes (82-112). O final do arquivo deve ser:
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.

x"FA",
x"8C",
x"E6",
x"D0",
x"00",
x"00",
x"00",
x"FF",
others => x"00");
end object_code;
Importante: apenas para simulação, troque o “FF” da linha 81 por “02”, pois este número indica o
tempo da rotina que fica em laço exibindo os dados da contagem.
2) Localize a ferramenta de Simulação ModelSim, e mude para o diretório onde foram gravados os
arquivos de simulação.
prompt do shell
Se houver problema de licença, inclua a variável de ambiente correspondente:
- Start  run  control  system  advanced  environment variables
Variable name: MGLS_LICENSE_FILE
Variable value: [email protected]
3) O shell do ModelSim aceita comandos. Por exemplo, digite “pwd”. Deve-se obter o diretório de
trabalho.
4) Olhe o arquivo de comandos “compila.do”:
1)
2)
3)
4)
5)
6)
7)
8)
9)
#vdel -all -lib work
vmap unisim C:/Modeltech_6.1f/unisim
vlib work
vmap work work
vcom obj_code.vhd modulos.vhd cleopatra.vhd top.vhd cleo_tb.vhd
vsim
work.tb
do wave.do
set StdArithNoWarnings 1
run 1500 us



A linha 2 deve ser alterada conforme a instalação do ModelSim na máquina.
A linha 5 indica para compilarmos os 5 arquivos fontes do projeto.
A linha 9 indica o tempo de simulação
5) Execute o script de simulação digitando no shell: “do compila.do”. O resultado deve ser:
Clique no botão destacado na figura acima para “liberar” (unlock) a janela de formas de onda
(wave) e no botão de zoom área destaque a região entre 1180us e 1280us.
3. ISE

Troque para “FF” a linha do tempo e proceda à prototipação como na aula passada.

Na execução irão perceber que os dígitos do display de sete segmentos estão trocados.
Inverter.
 Realizar o trabalho do cronômetro para a próxima aula.
ARQUITETURA CLEÓPATRA 3.0 - RESUMO
Endereçamento (addressing mode), no campo ME, a ser usado. Os 2
últimos bits da primeira palavra de 1 instrução são sempre 00, não sendo
utilizados. O formato é o seguinte:
INS
ME
Não usados
IIII
AA
00
Conjunto de Registradores:
1 Registrador Acumulador
1 Contador de Programa
1 Registrador de Subrotina
4 Biestáveis de Estado -
Vai-um
Transbordo
Negativo
Zero
AC
PC
RS
C
V
N
Z
Modos de Endereçamento:
 00 - Imediato (Operando é o dado de 8 bits junto à instrução);
 01 - Direto (Operando é endereço de memória de 8 bits. Diz onde se
encontra o dado);
 10 - Indireto (Operando é endereço de memória de 8 bits. Diz onde se
encontra o endereço do dado);
 11 - Relativo (Operando é deslocamento de 8 bits em complemento de 2,
para ser adicionado ao valor atual do PC, gerando assim o endereço do
dado).
Linguagem de Montagem (Assembly) - Sintaxe:






Instruções:
Código
Mnemônico
000x
NOT
001x
STA oper
0100
LDA oper
0101
ADD oper
0110
OR oper
0111
AND oper
1000
JMP oper
1001
JC oper
1110
JV oper
1010
JN oper
1011
JZ oper
1100
JSR oper
1101
RTS
1111
HLT
Operação
Complementa (inverte) todos os bits de
AC.
Armazena AC na memória dada por oper.
Carrega AC com conteúdos de memória
da posição dada por oper.
Adiciona AC a conteúdo da memória dada
por oper.
Faz OU lógico do AC com conteúdo da
memória dada por oper.
Faz E lógico do AC com conteúdo da
memória dada por oper.
PC recebe dado especificado por oper.
Se C=1, então PC recebe valor dado por
oper.
Se V=1, então PC recebe valor dado por
oper.
Se N=1 então PC recebe valor dado por
oper.
Se Z=1, então PC recebe valor dado por
oper.
RS recebe conteúdo de PC e PC recebe
dado de oper.
PC recebe conteúdos de RS.
Suspende processo de busca e execução
de instruções.
Observações:






oper - operando que depende do modo de endereçamento para ser
determinado;
Instruções lógicas (NOT, AND e OR) e LDA - afetam os códigos de
condição N e Z;
ADD - Afeta C, V, N e Z;
Instruções restantes (STA, JMP, JC, JV, JN, JZ, JSR, RTS HLT) - não
alteram códigos de condição;
Nas instruções sem operando (NOT, RTS e HLT), o campo de modo
de endereçamento não é utilizado;
Para as instruções de desvio (JMP, JC, JV, JN, JZ, JSR) e STA, os
modos de endereçamento direto e imediato são idênticos (possuem o
mesmo efeito).
Formatos de Instrução:
-
Existem dois tipos de instrução: com e sem operando;
Instruções com operando ocupam 2 bytes da memória de programa,
enquanto que instruções sem operando ocupam apenas 1 byte. A
seguir, descreve-se o formato da primeira palavra de qualquer
instrução.
Formato da primeira palavra de uma instrução
Os quatro primeiros bits contêm o código da operação (operation code, ou
OPCODE), no campo INS, e os dois bits seguintes especificam o Modo de

Os códigos de operação são reservados, correspondendo aos 14
mnemônicos mencionados acima, no item Instruções;
Rótulos podem denotar posições da memória de programa, quando
precederem algum dos 14 mnemônicos, ou da memória de dados,
quando precederem a diretiva “DB”;
Rótulos são especificados por qualquer texto diferente de um
mnemônico, sucedido do caracter “:”;
Comentários vão do primeiro caracter “;” até o final da linha;
Formato para os operandos é o seguinte:
#<rótulo> ou #<número>; <rótulo> ou <número>;
<rótulo>,I ou <número>,I; <rótulo>,R ou <número>,R
Os símbolos “#”, “I” e “R” indicam o modo de endereçamento a usar
na interpretação do operando, correspondendo aos modos Imediato,
Indireto e Relativo, respectivamente. O modo Direto é assumido se
nenhum dos outros for fornecido. <rótulo> representa qualquer rótulo
como especificado acima, sem o caracter delimitador “:”. <número>
representa um número em um de três formatos, hexa binário ou
decimal:
<numhexa>H / <numbin>B / <numdec>
Diretivas de montagem não são instruções do processador, mas
ordens para o programa montador. Por exemplo, a diretiva DB
(“define byte”) ordena a reserva de um byte de memória de dados
para uso pelo programa, quando em execução. Outras diretivas da
linguagem são .CODE e .ENDCODE, que delimitam o texto do
programa e .DATA e .ENDDATA, que delimitam a área de dados.
Finalmente, existe a diretiva ORG, que define o próximo endereço de
montagem, seja de dados, seja de instruções do programa.
Exemplos de Programas:
(Endereços da memória de programa e da memória de dados e código
objeto de cada linha são colocados como comentário.)
Exemplo: Este programa executa um algoritmo irrelevante, apenas serve
para ilustrar o formato da linguagem de montagem, a tradução de
linguagem de montagem para linguagem de máquina (em hexadecimal) e o
funcionamento dos modos de endereçamento. Note que o número das
linhas não faz parte do programa, está indicado apenas para fins didáticos.
Explanação: O programa inicia carregando o registrador acumulador AC
com o conteúdo da posição 90 de memória, na linha 3 (posição inicializada
com 30 pela diretiva DB na memória de dados); a este dado, a segunda
instrução soma o conteúdo da posição de memória 93 (dado 5B), colocando
o resultado da soma de volta no acumulador, obtendo o dado via
endereçamento indireto; a terceira instrução realiza o armazenamento do
conteúdo de AC na posição de memória END3 (endereço 92, inicialmente
contendo 00). Após, o mesmo dado é transformado pelo zeramento de seus
quatro bits mais significativos, pela instrução da linha 6, e o resultado volta
à AC. Se o resultado desta operação for 0, o programa pára, senão AC tem
todos os seus bits invertidos e só aí o programa pára. Identifique se, com os
dados fornecidos abaixo, a linha 8 da memória de programa é executada ou
não.
Memória de Programa:
Rótulo
Mnem
Operando
End Opcode Oper
1
.CODE
;Início do programa
2
ORG
#00H
;Monta a partir de 00H
3
INIT:
LDA
END1
;00
44
90
4
ADD
END2,I
;02
58
91
5
STA
END3
;04
24
92
6
AND
#0FH
;06
70
0F
7
JZ
FIM,R
;08
BC
01
8
NOT
;0A
00
9
FIM:
HLT
;0B
F0
10
.ENDCODE
;Fim do programa
Memória de Dados
Rótulo
Mnem
Operando
End
Dado
1
.DATA
;Início dos dados
2
ORG
#90H
;Monta a partir de 90H
3
END1:
DB
#30H
;90
30
4
END2:
DB
#END4
;91
93
5
END3:
DB
#00H
;92
00
6
END4:
DB
#5BH
;93
5B
7
.ENDDATA
;Fim dos dados
Download