⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.pl

📁 sparc org, vhdl rtl code
💻 PL
📖 第 1 页 / 共 2 页
字号:
	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_END


1;













⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -