O Processador Leon
Rodolfo Jardim de Azevedo
Características Básicas
•
•
•
•
•
Processador RISC
Padrão SPARC V8 (IEEE-1754)
Palavra de 32 bits
Descrição em VHDL-87
Barramento AMBA (AHB e APB) para
interligação de periféricos
• Controlador de memória (SRAM e
DRAM)
Configuração do Processador
• Duas alternativas
– Interface gráfica
make xconfig
make wconfig
(Linux)
(Windows + cygwin)
– Edição manual dos arquivos device.vhd e
target.vhd
Interface Gráfica
• Interface de configuração similar ao do
kernel do Linux
Opções de Síntese
Processador e Cache
Unidade de Inteiros
Configuração Manual
• target.vhd
– Declara as estruturas de configuração
• device.vhd
– Cria a estrutura conf que armazena a
configuração do leon
• A constante tkconfig é gerada
automaticamente pela interface gráfica.
Síntese
• O diretório syn possui scripts de síntese para
diversas ferramentas
• Arquivo para Leonardo: leon.tcl (sem
informações sobre tecnologia)
read -dont_elaborate ../leon/amba.vhd
read -dont_elaborate ../leon/target.vhd
read -dont_elaborate ../leon/device.vhd
read -dont_elaborate ../leon/config.vhd
read -dont_elaborate ../leon/sparcv8.vhd
read -dont_elaborate ../leon/iface.vhd
read -dont_elaborate ../leon/macro.vhd
...
read -dont_elaborate ../leon/mcore.vhd
read -dont_elaborate ../leon/leon.vhd
elaborate leon -architecture rtl
Síntese (cont.)
• Informações sobre tecnologia no início
do arquivo
– FPGA Xilinx XCV800 do kit da XESS
set part v800hq240
set process 4
set wire_table xcv800-4_wc
load_library xcv
Síntese (cont.)
read -dont_elaborate ./xsv800.vhd
elaborate xsv800 -architecture rtl
set xilinx_exec_path /home/lsc/xilinx/bin/sol
set edif_write_arrays FALSE
# Comandos para contornar incompatibilidades com a Xilinx
set register2register 80
set input2register 80
set register2output 80
optimize .work.xsv800.rtl -target xcv -chip -delay -effort quick
optimize_timing .work.xsv800.rtl
# Output
report_area xsv800.area -cell_usage -all_leafs
report_delay xsv800.delay -num_paths 1 -critical_paths clock_frequency
auto_write -downto xcv xsv800.edf
Ferramentas da Xilinx
• Ferramentas de linha de comando:
ngdbuild -p xcv800-4-hq240 -uc xsv800.ucf xsv800.edf
xsv800.ngd
map -p xcv800-4-hq240 -o xsv800.ncd xsv800.ngd
xsv800.pcf
par
-w xsv800.ncd xsv800.ncd xsv800.pcf
trce -skew xsv800.ncd xsv800.pcf -o xsv800.twr -xml
xsv800.twx
bitgen xsv800.ncd -d -w
Simulação
• Utilizando o ModelSim basta executar o
comando make no diretório raiz da
distribuição e chamar o simulador
• Diretórios:
– tbench: Código VHDL do Test Bench do
Leon
– tsource: Código em C para teste do
processador
– leon: Descrição VHDL do processador
Kit da XESS
• Utilitários com interface gráfica para
Windows e versões de linha de
comando para Linux
– gxsload ou xsload: Transferência de
arquivos para a placa através da interface
paralela
– gxsetclk ou xsetclk: Altera a freqüência do
clock da placa (entre 10KHz e 100MHz)
Características SPARC
• Conjunto maior de instruções
– Mais instruções de salto
– Instruções para ativar código de condição
(cc)
• Suporte a regiões específicas de
memória (ASI – Address Space
Identifier)
• Imediato de 30 bits no CALL
• Big endian
Formato das Instruções
CALL
op
disp30
0 1 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
ADD
op
rd
op3
rs1
i
unused
rs2
1 0 x x x x x 0 0 0 0 0 0 x x x x x 0 0 0 0 0 0 0 0 0 x x x x x
ADD
op
rd
op3
rs1
i
simm13
1 0 x x x x x 0 0 0 0 0 0 x x x x x 1 x x x x x x x x x x x x x
ADDcc
op
rd
op3
rs1
i
unused
rs2
1 0 x x x x x 0 1 0 0 0 0 x x x x x 0 0 0 0 0 0 0 0 0 x x x x x
BE
op a
cond
op2
disp22
0 0 x 0 0 0 1 0 1 0 x x x x x x x x x x x x x x x x x x x x x x
LD
op
rd
op3
rs1
i
asi
rs2
1 1 x x x x x 0 0 0 0 0 0 x x x x x 0 0 0 0 0 0 0 0 0 x x x x x
FADDs
op
rd
op3
unused
opf
rs2
1 0 x x x x x 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 x x x x x
CPop1
op
rd
op3
rs1
opc
rs2
1 0 x x x x x 1 1 0 1 1 0 x x x x x x x x x x x x x x x x x x x
Instruções (notação)
• rs1 e rs2 são as origens
• rd é o registrador destino
• ADD rs1, rs2, rd
rd = rs1 + rs2
Ex.: ADD %i3, %i4, %o0
• ADD rs1, 100, rd
rd = rs1 + 100
Ex.: ADD %i3, 100, %o0
Registradores
• Banco de Registradores organizado em
janelas
r[0]..r[7] (global)
CWP + 1
r[24]..r[31] (in)
CWP
Current Window
r[16]..r[23] (local)
r[08]..r[15] (out)
r[24]..r[31] (in)
CWP - 1
r[16]..r[23] (local)
r[08]..r[15] (out)
r[24]..r[31] (in)
r[16]..r[23] (local)
r[08]..r[15] (out)
Restore,
RETT
SAVE,
trap
Registradores (convenções)
Registrador
Uso
%i7 = %r31
Endereço de retorno
%fp = %i6 = %r30
Frame pointer
%i0 = %r24
Primeiro parâmetro de entrada e valor de retorno
%o7 = %r15
Endereço do CALL
%sp = %o6 = %r14
Stack pointer
%o0 = %r8
Primeiro parâmetro de saída e valor retornado
%g7, %g6, %g5
Reservados
%g1 = %r1
Valor temporário
%g0 = %r0
0 (zero)
Memória do Leon
Intervalo
Tamanho
Conteúdo
Controlador
0x00000000 – 0x1FFFFFFF
512Mb
PROM
0x20000000 – 0x3FFFFFFF
512Mb
I/O em Memória
0x40000000 – 0x7FFFFFFF
1Gb
SRAM e/ou SDRAM
0x80000000 – 0x8FFFFFFF
256Mb
Registradores on-chip
Barramento APB
0x90000000 – 0x9FFFFFFF
256Mb
Unidade de depuração
DSU
Controlador de
Memória
Alguns Registradores on-chip
Endereço
Significado
0x80000000
Memory Configuration Register 1
0x80000004
Memory Configuration Register 2
0x80000008
Memory Configuration Register 3
0x80000010
AHB Status Register
0x80000014
Cache Control Register
0x80000018
Power-down Register
0x800000024
Leon Configuration Register
0x800000040
Timer 1 Counter Register
0x800000044
Timer 1 Reload Register
0x800000048
Timer 1 Control Register
0x800000070
UART 1 Data Register
0x800000074
UART 1 Status Register
0x800000078
UART 1 Control Register
0x80000007C
UART 1 Scalar Register
Leon Configuration Register
Bit
Significado
30
Debug suport unit present
29
SDRAM controller present
28:26
Number of implemented Watchpoints
25
UMAC/SMAC instruction implemented
24:20
Number of register windows – 1
19:17
Log2(instruction cache size) in Kb
16:15
Log2(instruction cache line size) in 32bit words
14:12
Log2(data cache size) in Kb
11:10
Log2(data cache line size) in 32bit words
9
UDIV/SDIV instruction implemented
8
UMUL/SMUL instruction implemented
7
Watchdog present
6
Memory status and failing address register present
5:4
FPU type (00 = none, 01 = Meiko)
3:2
PCI core type (00 = none, 01 = InSilicon, 10 = ESA, 11 = Other)
1:0
Write protection type (00 = none, 01 = standard)
Download

O Processador Leon