Leon2
description
Transcript of Leon2
Leon2
MO801/MC912
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 (Linux)make wconfig (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.vhdread -dont_elaborate ../leon/target.vhdread -dont_elaborate ../leon/device.vhdread -dont_elaborate ../leon/config.vhdread -dont_elaborate ../leon/sparcv8.vhdread -dont_elaborate ../leon/iface.vhdread -dont_elaborate ../leon/macro.vhd...read -dont_elaborate ../leon/mcore.vhdread -dont_elaborate ../leon/leon.vhdelaborate leon -architecture rtl
Síntese (cont.)
• Informações sobre tecnologia no início do arquivo– FPGA Xilinx XCV800 do kit da XESS
set part v800hq240set process 4set wire_table xcv800-4_wcload_library xcv
Síntese (cont.)read -dont_elaborate ./xsv800.vhd elaborate xsv800 -architecture rtlset xilinx_exec_path /home/lsc/xilinx/bin/solset edif_write_arrays FALSE
# Comandos para contornar incompatibilidades com a Xilinx
set register2register 80set input2register 80set register2output 80optimize .work.xsv800.rtl -target xcv -chip -delay -effort quickoptimize_timing .work.xsv800.rtl
# Outputreport_area xsv800.area -cell_usage -all_leafsreport_delay xsv800.delay -num_paths 1 -critical_paths -
clock_frequencyauto_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ções0 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
CALL op disp30
i1 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 unused rs2
i1 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
ADD op rd op3 rs1 simm13
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 xunused opf rs2FADDs op rd op3
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 xrs1 opc rs2CPop1 op rd op3
a0 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
BE op cond op2 disp22
i1 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
rd op3 rs1 asi rs2LD op
i1 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
ADDcc op rd op3 rs1 unused rs2
Instruções (notação)
• rs1 e rs2 são as origens• rd é o registrador destino• ADD rs1, rs2, rd
rd = rs1 + rs2Ex.: ADD %i3, %i4, %o0
• ADD rs1, 100, rdrd = rs1 + 100Ex.: ADD %i3, 100, %o0
Registradores
• Banco de registradores organizado em janelas
r[24]..r[31] (in)
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) r[24]..r[31] (in)
r[16]..r[23] (local)
r[08]..r[15] (out)
r[0]..r[7] (global)CWP + 1
CWPCurrent Window
CWP - 1
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 LeonIntervalo Tamanho Conteúdo Controlador
0x00000000 – 0x1FFFFFFF 512Mb PROMControlador de
Memória0x20000000 – 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
Alguns Registradores on-chipEndereço Significado0x80000000 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 RegisterBit Significado30 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)
Código Fonte• Configuração
– target.vhd– device.vhd– config.vhd
• Interfaces– iface.vhd
• Módulo principal– leon.vhd, leon_eth.vhd,
leon_pci.vhd, leon_eth_pci.vhd
• Controlador de Memória– mctrl.vhd
• Processador– mcore.vhd
• Unidade de Inteiros– iu.vhd
• Biblioteca de tecnologia– tech_virtex.vhd,
tech_virtex2.vhd• AMBA
– amba.vhd