📄 config.pl
字号:
CONFIG_MMU_D16 => 16, CONFIG_MMU_D32 => 32 ], # Memory controller CONFIG_MCTRL_8BIT => [CONFIG_MCTRL_8BIT => 1], CONFIG_MCTRL_16BIT => [CONFIG_MCTRL_16BIT => 1], CONFIG_MCTRL_5CS => [CONFIG_MCTRL_5CS => 1], CONFIG_MCTRL_WFB => [CONFIG_MCTRL_WFB => 1], CONFIG_MCTRL_SDRAM => [CONFIG_MCTRL_SDRAM => 1], CONFIG_MCTRL_SDRAM_INVCLK => [CONFIG_MCTRL_SDRAM_INVCLK => 1], # Peripherals CONFIG_PERI_LCONF => [CONFIG_PERI_LCONF => 1], CONFIG_PERI_AHBSTAT => [CONFIG_PERI_AHBSTAT => 1], CONFIG_PERI_WPROT => [CONFIG_PERI_WPROT => 1], CONFIG_PERI_WDOG => [CONFIG_PERI_WDOG => 1], CONFIG_PERI_IRQ2 => [CONFIG_PERI_IRQ2 => 1], # AHB CONFIG_AHB_DEFMST => [CONFIG_AHB_DEFMST => sub { my ($v) = @_; return $v;}], CONFIG_AHB_SPLIT => [CONFIG_AHB_SPLIT => 1], CONFIG_AHBRAM_ENABLE => [CONFIG_AHBRAM_ENABLE => 1], CFG_AHBRAM_SZ => [ CONFIG_AHBRAM_SZ1 => 1, CONFIG_AHBRAM_SZ2 => 2, CONFIG_AHBRAM_SZ4 => 3, CONFIG_AHBRAM_SZ8 => 4, CONFIG_AHBRAM_SZ16 => 5, CONFIG_AHBRAM_SZ32 => 6, CONFIG_AHBRAM_SZ64 => 7 ], # Debug CONFIG_DEBUG_UART => [CONFIG_DEBUG_UART => 1], CONFIG_DEBUG_IURF => [CONFIG_DEBUG_IURF => 1], CONFIG_DEBUG_FPURF => [CONFIG_DEBUG_FPURF => 1], CONFIG_DEBUG_NOHALT => [CONFIG_DEBUG_NOHALT => 1], CFG_DEBUG_PCLOW => [CONFIG_DEBUG_PC32 => 0], CONFIG_DEBUG_RFERR => [CONFIG_DEBUG_RFERR => 1], CONFIG_DEBUG_CACHEMEMERR => [CONFIG_DEBUG_CACHEMEMERR => 1], # DSU CONFIG_DSU_ENABLE => [CONFIG_DSU_ENABLE => sub { $ahbmst ++; return 1;} ] , ##; ahbmst ++;] CONFIG_DSU_TRACEBUF => [CONFIG_DSU_TRACEBUF => 1], CONFIG_DSU_MIXED_TRACE=> [CONFIG_DSU_MIXED_TRACE => 1], CFG_DSU_TRACE_SZ => [ CONFIG_DSU_TRACESZ64 => 64, CONFIG_DSU_TRACESZ128 => 128, CONFIG_DSU_TRACESZ256 => 256, CONFIG_DSU_TRACESZ512 => 512, CONFIG_DSU_TRACESZ1024 => 1024 ], # Boot CFG_BOOT_SOURCE => [ CONFIG_BOOT_EXTPROM => "memory", CONFIG_BOOT_INTPROM => "prom", CONFIG_BOOT_MIXPROM => "dual" ], CONFIG_BOOT_RWS => [CONFIG_BOOT_RWS => sub { my ($v) = @_; $v = hex ($v) & 0x3; return $v;} ], CONFIG_BOOT_WWS => [CONFIG_BOOT_WWS => sub { my ($v) = @_; $v = hex ($v) & 0x3; return $v;} ], CONFIG_BOOT_SYSCLK => [CONFIG_BOOT_SYSCLK => sub { my ($v) = @_; return $v;} ], CONFIG_BOOT_BAUDRATE => [CONFIG_BOOT_BAUDRATE => sub { my ($v) = @_; $v = hex ($v) & 0x3fffff; return $v;} ], CONFIG_BOOT_EXTBAUD => [CONFIG_BOOT_EXTBAUD => 1], CONFIG_BOOT_PROMABITS => [CONFIG_BOOT_PROMABITS => sub { my ($v) = @_; $v = hex ($v) & 0x3f; return $v;} ], # Ethernet CONFIG_ETH_ENABLE => [CONFIG_ETH_ENABLE => sub { $ahbmst++; return 1; } ], #; ahbmst++ CONFIG_ETH_TXFIFO => [CONFIG_ETH_TXFIFO => sub { my ($v) = @_; $v = hex ($v) & 0xffff; return $v;}], CONFIG_ETH_RXFIFO => [CONFIG_ETH_RXFIFO => sub { my ($v) = @_; $v = hex ($v) & 0xffff; return $v;}], CONFIG_ETH_BURST => [CONFIG_ETH_BURST => sub { my ($v) = @_; $v = hex ($v) & 0xffff; return $v;}], # PCI CONFIG_PCI_ENABLE => [CONFIG_PCI_ENABLE => 1], CFG_PCI_CORE => [ CONFIG_PCI_TARGET => sub { $ahbmst++; $pciahbmst = 1; $pciahbslv = 1; return "target_only"; }, CONFIG_PCI_OPENCORES => sub { $ahbmst++; $pciahbmst = 1; $pciahbslv = 1; return "opencores"; }, CONFIG_PCI_INSILICON => sub { $ahbmst+=2; $pciahbmst = 2; $pciahbslv = 1; return "insilicon"; } ], CONFIG_PCI_VENDORID => [ CONFIG_PCI_VENDORID => sub { my ($v) = @_; $v = hex ($v) & 0xffff; return $v;}], CONFIG_PCI_DEVICEID => [ CONFIG_PCI_DEVICEID => sub { my ($v) = @_; $v = hex ($v) & 0xffff; return $v;}], CONFIG_PCI_SUBSYSID => [ CONFIG_PCI_SUBSYSID => sub { my ($v) = @_; $v = hex ($v) & 0xffff; return $v;}], CONFIG_PCI_REVID => [ CONFIG_PCI_REVID => sub { my ($v) = @_; $v = hex ($v) & 0xff; return $v;}], CONFIG_PCI_CLASSCODE => [ CONFIG_PCI_CLASSCODE => sub { my ($v) = @_; $v = hex ($v) & 0x0ffffff; return $v;}], CFG_PCI_FIFO => [ CONFIG_PCI_FIFO2 => 1, CONFIG_PCI_FIFO4 => 2, CONFIG_PCI_FIFO8 => 3, CONFIG_PCI_FIFO16 => 4, CONFIG_PCI_FIFO32 => 5, CONFIG_PCI_FIFO64 => 6, CONFIG_PCI_FIFO128 => 7 ], CONFIG_PCI_PMEPADS => [ CONFIG_PCI_PMEPADS => 1 ], CONFIG_PCI_P66PAD => [ CONFIG_PCI_P66PAD => 1 ], CONFIG_PCI_RESETALL => [ CONFIG_PCI_RESETALL => 1 ], CONFIG_PCI_ARBEN => [ CONFIG_PCI_ARBEN => 1]); sub log2 { my ($x) = @_; my $i; $x--; for ($i=0; $x!=0; $i++) { $x >>= 1;} return $i;}sub sparc_config_file { my ($sparccfg) = @_; my %sparccfg = %{$sparccfg}; my $fn = "vhdl/sparc/leon_device.vhd"; my $fn_v = "vhdl/sparc/leon_device.v"; $sparccfg{CONFIG_FPU_ENABLE_CONFIG_FPU_REGS} = $sparccfg{CONFIG_FPU_ENABLE}*$sparccfg{CONFIG_FPU_REGS}; $sparccfg{CFG_ICACHE_LSZ_4} = int ($sparccfg{CFG_ICACHE_LSZ}/4); $sparccfg{CFG_DCACHE_LSZ_4} = int ($sparccfg{CFG_DCACHE_LSZ}/4); $sparccfg{CONFIG_AHB_DEFMST_ahbmst} = int ($sparccfg{CONFIG_AHB_DEFMST} % $ahbmst); $sparccfg{CFG_AHBRAM_SZ_7 } = 7 + $sparccfg{CFG_AHBRAM_SZ}; $sparccfg{CONFIG_PCI_VENDORID_4} = sprintf ("%04X",$sparccfg{CONFIG_PCI_VENDORID}); $sparccfg{CONFIG_PCI_DEVICEID_4} = sprintf ("%04X",$sparccfg{CONFIG_PCI_DEVICEID}); $sparccfg{CONFIG_PCI_SUBSYSID_4} = sprintf ("%04X",$sparccfg{CONFIG_PCI_SUBSYSID}); $sparccfg{CONFIG_PCI_REVID_2} = sprintf ("%02X",$sparccfg{CONFIG_PCI_REVID}); $sparccfg{CONFIG_PCI_CLASSCODE_6} = sprintf ("%06X",$sparccfg{CONFIG_PCI_CLASSCODE}); if ($sparccfg{CONFIG_AHBRAM_ENABLE} == 1) { $ahbram = 4; } else { $ahbram = 0;} if ($sparccfg{CONFIG_DSU_ENABLE} == 1) {$dsuen = 2;} else {$dsuen = 7;} if ($sparccfg{CONFIG_PCI_ENABLE} == 1) {$pcien = 3;} else {$pcien = 7;} if ($sparccfg{CONFIG_ETH_ENABLE} == 1) {$ethen = 5;} else {$ethen = 7;} $sparccfg{CONFIG_ETH_TXFIFO_log2} = log2($sparccfg{CONFIG_ETH_TXFIFO})+1; $sparccfg{CONFIG_ETH_RXFIFO_log2} = log2($sparccfg{CONFIG_ETH_RXFIFO})+1; $sparccfg{CONFIG_ETH_BURST_log2} = log2($sparccfg{CONFIG_ETH_BURST})+1; if (($sparccfg{CFG_ICACHE_ALGO} eq "lrr") && ($sparccfg{CFG_ICACHE_ASSO} > 2)) { $sparccfg{CFG_ICACHE_ALGO} = "rnd"; } if (($sparccfg{CFG_DCACHE_ALGO} eq "lrr") && ($sparccfg{CFG_DCACHE_ASSO} > 2)) { $sparccfg{CFG_DCACHE_ALGO} = "rnd"; } $sparccfg{ahbmst} = $ahbmst; $sparccfg{ahbram} = $ahbram; $sparccfg{dsuen} = $dsuen; $sparccfg{pcien} = $pcien; $sparccfg{ethen} = $ethen; $sparccfg{pciahbmst} = $pciahbmst; $sparccfg{pciahbslv} = $pciahbslv; if (-f $fn) { print STDERR ("Making backup of $fn\n"); `cp $fn $fn.bck`; } if (-f $fn_v) { print STDERR ("Making backup of $fn_v\n"); `cp $fn_v $fn_v.bck`; } foreach $k (keys %sparccfg) { $v = $sparccfg{$k}; $sparc_config_file = cfg_replace ($k,$v,$sparc_config_file); $sparc_config_file_v = cfg_replace ($k,$v,$sparc_config_file_v); $sparc_config_file_v2 = cfg_replace ($k,$v,$sparc_config_file_v2); $sparc_config_file_v3 = cfg_replace ($k,$v,$sparc_config_file_v3); } if (($sparccfg{CONFIG_SYN_INFER_RAM} == 0) && (!(($sparccfg{CFG_SYN_TARGET_TECH} eq "virtex") && ($sparccfg{CFG_SYN_TARGET_TECH} eq "virtex2")))) { $sparc_config_file_v .= $sparc_config_file_v2; } else { $sparc_config_file_v .= $sparc_config_file_v3; } if (open(FILEH, ">$fn")) { print FILEH $sparc_config_file; } else { die ("opening \"$fn\": $!\n"); } if (open(FILEH, ">$fn_v")) { print FILEH $sparc_config_file_v; } else { die ("opening \"$fn_v\": $!\n"); }}sub cfg_replace { my ($k,$v,$l) = @_; my $type; if ($l =~ /%$k%\[(.)\]/) { $type = $1; if ($type eq "b") { if ($v == 0) { $v = "false"; } else { $v = "true"; } $l =~ s/%($k)%\[(.)\]/$v/gi; } else { print STDERR ("Warning cound not resolve [$1] typedef\n"); } } else { $l =~ s/%$k%/$v/gi; } return $l;}$sparc_config_file=<<SPARC_CONFIG_END;library IEEE;use IEEE.std_logic_1164.all;use work.leon_target.all;package leon_device is------------------------------------------------------------------------------- Automatically generated by vhdl/sparc/config.pl from of .config----------------------------------------------------------------------------- constant syn_%CONFIG_CFG_NAME% : syn_config_type := ( targettech => %CFG_SYN_TARGET_TECH%,infer_pads =>%CONFIG_SYN_INFER_PADS%[b],infer_pci=>%CONFIG_SYN_INFER_PCI_PADS%[b], infer_ram => %CONFIG_SYN_INFER_RAM%[b], infer_regf => %CONFIG_SYN_INFER_REGF%[b], infer_rom => %CONFIG_SYN_INFER_ROM%[b], infer_mult => %CONFIG_SYN_INFER_MULT%[b], rftype => %CONFIG_SYN_RFTYPE%, targetclk => %CONFIG_TARGET_CLK%, clk_mul => %CONFIG_PLL_CLK_MUL%, clk_div => %CONFIG_PLL_CLK_DIV%, pci_dll => %CONFIG_PCI_CLKDLL%[b], pci_sysclk => %CONFIG_PCI_SYSCLK%[b] ); constant iu_%CONFIG_CFG_NAME% : iu_config_type := ( nwindows => %CONFIG_IU_NWINDOWS%, multiplier => %CFG_IU_MUL_TYPE%, mulpipe => %CONFIG_IU_MULPIPE%[b], divider => %CFG_IU_DIVIDER%, mac => %CONFIG_IU_MUL_MAC%[b], fpuen => %CONFIG_FPU_ENABLE%, cpen => false, fastjump => %CONFIG_IU_FASTJUMP%[b], icchold => %CONFIG_IU_ICCHOLD%[b], lddelay => %CONFIG_IU_LDELAY%, fastdecode => %CONFIG_IU_FASTDECODE%[b], rflowpow => %CONFIG_IU_RFPOW%[b], watchpoints => %CONFIG_IU_WATCHPOINTS%, impl => %CONFIG_IU_IMPL%, version => %CONFIG_IU_VER%); constant fpu_%CONFIG_CFG_NAME% : fpu_config_type := (core => %CFG_FPU_CORE%, interface => %CFG_FPU_IF%, fregs => %CONFIG_FPU_ENABLE_CONFIG_FPU_REGS%, version => %CONFIG_FPU_VER%); constant cache_%CONFIG_CFG_NAME% : cache_config_type := ( isets => %CFG_ICACHE_ASSO%, isetsize => %CFG_ICACHE_SZ%, ilinesize => %CFG_ICACHE_LSZ_4%, ireplace => %CFG_ICACHE_ALGO%, ilock => %CFG_ICACHE_LOCK%, dsets => %CFG_DCACHE_ASSO%, dsetsize => %CFG_DCACHE_SZ%, dlinesize => %CFG_DCACHE_LSZ_4%, dreplace => %CFG_DCACHE_ALGO%, dlock => %CFG_DCACHE_LOCK%, dsnoop => %CFG_DCACHE_SNOOP%, drfast => %CFG_DCACHE_RFAST%[b], dwfast => %CFG_DCACHE_WFAST%[b], dlram => %CFG_DCACHE_LRAM%[b], dlramsize => %CFG_DCACHE_LRSZ%, dlramaddr => 16#%CFG_DCACHE_LRSTART%#); constant mmu_%CONFIG_CFG_NAME% : mmu_config_type := ( enable => %CFG_MMU_ENABLE%, itlbnum => %CFG_MMU_I%, dtlbnum => %CFG_MMU_D%, tlb_type => %CFG_MMU_TYPE%, tlb_rep => %CFG_MMU_REP%, tlb_diag => %CFG_MMU_DIAG%[b] ); constant ahbrange_config : ahbslv_addr_type := (0,0,0,0,0,0,%ahbram%,0,1,%dsuen%,%pcien%,%ethen%,%pcien%,%pcien%,%pcien%,%pcien%); constant ahb_%CONFIG_CFG_NAME% : ahb_config_type := ( masters => %ahbmst%, defmst => %CONFIG_AHB_DEFMST_ahbmst%, split => %CONFIG_AHB_SPLIT%[b], testmod => false); constant mctrl_%CONFIG_CFG_NAME% : mctrl_config_type := ( bus8en => %CONFIG_MCTRL_8BIT%[b], bus16en => %CONFIG_MCTRL_16BIT%[b], wendfb => %CONFIG_MCTRL_WFB%[b], ramsel5 => %CONFIG_MCTRL_5CS%[b], sdramen => %CONFIG_MCTRL_SDRAM%[b], sdinvclk => %CONFIG_MCTRL_SDRAM_INVCLK%[b]); constant peri_%CONFIG_CFG_NAME% : peri_config_type := ( cfgreg => %CONFIG_PERI_LCONF%[b], ahbstat => %CONFIG_PERI_AHBSTAT%[b], wprot => %CONFIG_PERI_WPROT%[b], wdog => %CONFIG_PERI_WDOG%[b], irq2en => %CONFIG_PERI_IRQ2%[b], ahbram => %CONFIG_AHBRAM_ENABLE%[b], ahbrambits => %CFG_AHBRAM_SZ_7%, ethen => %CONFIG_ETH_ENABLE%[b] ); constant debug_%CONFIG_CFG_NAME% : debug_config_type := ( enable => true, uart => %CONFIG_DEBUG_UART%[b], iureg => %CONFIG_DEBUG_IURF%[b], fpureg => %CONFIG_DEBUG_FPURF%[b], nohalt => %CONFIG_DEBUG_NOHALT%[b], pclow => %CFG_DEBUG_PCLOW%, dsuenable => %CONFIG_DSU_ENABLE%[b], dsutrace => %CONFIG_DSU_TRACEBUF%[b], dsumixed => %CONFIG_DSU_MIXED_TRACE%[b], dsudpram => %CONFIG_SYN_TRACE_DPRAM%[b], tracelines => %CFG_DSU_TRACE_SZ%); constant boot_%CONFIG_CFG_NAME% : boot_config_type := (boot => %CFG_BOOT_SOURCE%, ramrws => %CONFIG_BOOT_RWS%, ramwws => %CONFIG_BOOT_WWS%, sysclk => %CONFIG_BOOT_SYSCLK%, baud => %CONFIG_BOOT_BAUDRATE%, extbaud => %CONFIG_BOOT_EXTBAUD%[b], pabits => %CONFIG_BOOT_PROMABITS%); constant pci_%CONFIG_CFG_NAME% : pci_config_type := ( pcicore => %CFG_PCI_CORE% , ahbmasters => %pciahbmst%, ahbslaves => %pciahbslv%, arbiter => %CONFIG_PCI_ARBEN%[b], fixpri => false, prilevels => 4, pcimasters => 4, vendorid => 16#%CONFIG_PCI_VENDORID_4%#, deviceid => 16#%CONFIG_PCI_DEVICEID_4%#, subsysid => 16#%CONFIG_PCI_SUBSYSID%#, revisionid => 16#%CONFIG_PCI_REVID_2%#, classcode =>16#%CONFIG_PCI_CLASSCODE_6%#, pmepads => %CONFIG_PCI_PMEPADS%[b], p66pad => %CONFIG_PCI_P66PAD%[b], pcirstall => %CONFIG_PCI_RESETALL%[b]); constant irq2cfg : irq2type := irq2none;------------------------------------------------------------------------------- end of automatic configuration-----------------------------------------------------------------------------end leon_device;SPARC_CONFIG_END$sparc_config_file_v =<<SPARC_CONFIG_V_END;`define HEADER_VENDOR_ID 16'h%CONFIG_PCI_VENDORID_4%`define HEADER_DEVICE_ID 16'h%CONFIG_PCI_DEVICEID_4%`define HEADER_REVISION_ID 8'h%CONFIG_PCI_REVID_2%`define ETH_WISHBONE_B3`define ETH_TX_FIFO_CNT_WIDTH %CONFIG_ETH_TXFIFO%_log2%`define ETH_TX_FIFO_DEPTH %CONFIG_ETH_TXFIFO%`define ETH_RX_FIFO_CNT_WIDTH %CONFIG_ETH_RXFIFO_log2%`define ETH_RX_FIFO_DEPTH %CONFIG_ETH_RXFIFO%`define ETH_BURST_CNT_WIDTH %CONFIG_ETH_BURST_log2%`define ETH_BURST_LENGTH %CONFIG_ETH_BURST%SPARC_CONFIG_V_END$sparc_config_file_v2 =<<SPARC_CONFIG_V2_END;`define FPGA`define XILINX`define WBW_ADDR_LENGTH 7`define WBR_ADDR_LENGTH 7`define PCIW_ADDR_LENGTH 7`define PCIR_ADDR_LENGTH 7`define PCI_FIFO_RAM_ADDR_LENGTH 8 `define WB_FIFO_RAM_ADDR_LENGTH 8 SPARC_CONFIG_V2_END$sparc_config_file_v3 =<<SPARC_CONFIG_V3_END;`define WB_RAM_DONT_SHARE`define PCI_RAM_DONT_SHARE`define WBW_ADDR_LENGTH %CFG_PCI_FIFO%`define WBR_ADDR_LENGTH %CFG_PCI_FIFO%`define PCIW_ADDR_LENGTH %CFG_PCI_FIFO%`define PCIR_ADDR_LENGTH %CFG_PCI_FIFO%`define PCI_FIFO_RAM_ADDR_LENGTH %CFG_PCI_FIFO% `define WB_FIFO_RAM_ADDR_LENGTH %CFG_PCI_FIFO% SPARC_CONFIG_V3_END1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -