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)