1 |
2 |
tarookumic |
#!/usr/bin/perl
|
2 |
|
|
|
3 |
|
|
%peri_mem_cfg = (
|
4 |
|
|
|
5 |
|
|
# Memory controller config
|
6 |
|
|
|
7 |
|
|
CONFIG_MCTRL_8BIT => 0,
|
8 |
|
|
CONFIG_MCTRL_16BIT => 0,
|
9 |
|
|
CONFIG_MCTRL_5CS => 0,
|
10 |
|
|
CONFIG_MCTRL_WFB => 0,
|
11 |
|
|
CONFIG_MCTRL_SDRAM => 0,
|
12 |
|
|
CONFIG_MCTRL_SDRAM_INVCLK => 0,
|
13 |
|
|
|
14 |
|
|
# Boot
|
15 |
|
|
CFG_BOOT_SOURCE => "perimem_memory",
|
16 |
|
|
CONFIG_BOOT_RWS => 0,
|
17 |
|
|
CONFIG_BOOT_WWS => 0,
|
18 |
|
|
CONFIG_BOOT_SYSCLK => 25000000,
|
19 |
|
|
CONFIG_BOOT_BAUDRATE => 19200,
|
20 |
|
|
CONFIG_BOOT_EXTBAUD => 0,
|
21 |
|
|
CONFIG_BOOT_PROMABITS => 11,
|
22 |
|
|
|
23 |
|
|
# Peripherals
|
24 |
|
|
CONFIG_PERI_WPROT => 0
|
25 |
|
|
|
26 |
|
|
);
|
27 |
|
|
|
28 |
|
|
%peri_mem_map =
|
29 |
|
|
(
|
30 |
|
|
# Memory controller
|
31 |
|
|
CONFIG_MCTRL_8BIT => [CONFIG_MCTRL_8BIT => 1],
|
32 |
|
|
CONFIG_MCTRL_16BIT => [CONFIG_MCTRL_16BIT => 1],
|
33 |
|
|
CONFIG_MCTRL_5CS => [CONFIG_MCTRL_5CS => 1],
|
34 |
|
|
CONFIG_MCTRL_WFB => [CONFIG_MCTRL_WFB => 1],
|
35 |
|
|
CONFIG_MCTRL_SDRAM => [CONFIG_MCTRL_SDRAM => 1],
|
36 |
|
|
CONFIG_MCTRL_SDRAM_INVCLK => [CONFIG_MCTRL_SDRAM_INVCLK => 1],
|
37 |
|
|
|
38 |
|
|
# Boot
|
39 |
|
|
CFG_BOOT_SOURCE => [
|
40 |
|
|
CONFIG_BOOT_EXTPROM => "perimem_memory",
|
41 |
|
|
CONFIG_BOOT_INTPROM => "perimem_prom",
|
42 |
|
|
CONFIG_BOOT_MIXPROM => "perimem_dual"
|
43 |
|
|
],
|
44 |
|
|
|
45 |
|
|
CONFIG_BOOT_RWS => [CONFIG_BOOT_RWS => sub { my ($v) = @_; $v = hex ($v) & 0x3; return $v;} ],
|
46 |
|
|
CONFIG_BOOT_WWS => [CONFIG_BOOT_WWS => sub { my ($v) = @_; $v = hex ($v) & 0x3; return $v;} ],
|
47 |
|
|
CONFIG_BOOT_SYSCLK => [CONFIG_BOOT_SYSCLK => sub { my ($v) = @_; return $v;} ],
|
48 |
|
|
CONFIG_BOOT_BAUDRATE => [CONFIG_BOOT_BAUDRATE => sub { my ($v) = @_; $v = hex ($v) & 0x3fffff; return $v;} ],
|
49 |
|
|
CONFIG_BOOT_EXTBAUD => [CONFIG_BOOT_EXTBAUD => 1],
|
50 |
|
|
CONFIG_BOOT_PROMABITS => [CONFIG_BOOT_PROMABITS => sub { my ($v) = @_; $v = hex ($v) & 0x3f; return $v;} ],
|
51 |
|
|
|
52 |
|
|
# Peripherals
|
53 |
|
|
CONFIG_PERI_WPROT => [CONFIG_PERI_WPROT => 1]
|
54 |
|
|
|
55 |
|
|
);
|
56 |
|
|
|
57 |
|
|
sub peri_mem_config_file {
|
58 |
|
|
|
59 |
|
|
my ($pericfg) = @_;
|
60 |
|
|
my %pericfg = %{$pericfg};
|
61 |
|
|
my $fn = "vhdl/peripherals/mem/peri_mem_config.vhd";
|
62 |
|
|
|
63 |
|
|
if (-f $fn) {
|
64 |
|
|
print STDERR ("Making backup of $fn\n");
|
65 |
|
|
`cp $fn $fn.bck`;
|
66 |
|
|
}
|
67 |
|
|
|
68 |
|
|
foreach $k (keys %pericfg) {
|
69 |
|
|
$v = $pericfg{$k};
|
70 |
|
|
$peri_mem_config_file_data = cfg_replace ($k,$v,$peri_mem_config_file_data);
|
71 |
|
|
}
|
72 |
|
|
|
73 |
|
|
if (open(FILEH, ">$fn")) {
|
74 |
|
|
print FILEH $peri_mem_config_file_data;
|
75 |
|
|
} else {
|
76 |
|
|
die ("opening \"$fn\": $!\n");
|
77 |
|
|
}
|
78 |
|
|
}
|
79 |
|
|
|
80 |
|
|
$peri_mem_config_file_data=<<PERI_MEM_CONFIG_END;
|
81 |
|
|
|
82 |
|
|
library IEEE;
|
83 |
|
|
use IEEE.std_logic_1164.all;
|
84 |
|
|
use IEEE.std_logic_arith.all;
|
85 |
|
|
|
86 |
|
|
package peri_mem_config is
|
87 |
|
|
|
88 |
|
|
-----------------------------------------------------------------------------
|
89 |
|
|
-- Automatically generated by vhdl/peripherals/mem/config.pl from of .config
|
90 |
|
|
-----------------------------------------------------------------------------
|
91 |
|
|
|
92 |
|
|
constant CFG_PERIMEM_BUS8EN : boolean := %CONFIG_MCTRL_8BIT%[b]; -- enable 8-bit bus operation
|
93 |
|
|
constant CFG_PERIMEM_BUS16EN : boolean := %CONFIG_MCTRL_16BIT%[b]; -- enable 16-bit bus operation
|
94 |
|
|
constant CFG_PERIMEM_WENDFB : boolean := %CONFIG_MCTRL_WFB%[b]; -- enable wen feed-back to data bus drivers
|
95 |
|
|
constant CFG_PERIMEM_RAMSEL5 : boolean := %CONFIG_MCTRL_5CS%[b]; -- enable 5th ram select
|
96 |
|
|
constant CFG_PERIMEM_SDRAMEN : boolean := %CONFIG_MCTRL_SDRAM%[b]; -- enable sdram controller
|
97 |
|
|
constant CFG_PERIMEM_SDINVCLK : boolean := %CONFIG_MCTRL_SDRAM_INVCLK%[b]; -- invert sdram clock
|
98 |
|
|
|
99 |
|
|
type cfg_perimem_boottype is (perimem_memory, perimem_prom, perimem_dual);
|
100 |
|
|
|
101 |
|
|
constant CFG_PERIMEM_BOOT : cfg_perimem_boottype := %CFG_BOOT_SOURCE%; -- select boot source
|
102 |
|
|
constant CFG_PERIMEM_BRAMRWS : unsigned(3 downto 0) := conv_unsigned(%CONFIG_BOOT_RWS%, 4); -- ram read waitstates
|
103 |
|
|
constant CFG_PERIMEM_BRAMWWS : unsigned(3 downto 0) := conv_unsigned(%CONFIG_BOOT_WWS%, 4); -- ram write waitstates
|
104 |
|
|
constant CFG_PERIMEM_SYSCLK : integer := %CONFIG_BOOT_SYSCLK%; -- cpu clock
|
105 |
|
|
constant CFG_PERIMEM_BAUD : positive := %CONFIG_BOOT_BAUDRATE%; -- UART baud rate
|
106 |
|
|
constant CFG_PERIMEM_EXTBAUD : boolean := %CONFIG_BOOT_EXTBAUD%[b]; -- use external baud rate setting
|
107 |
|
|
constant CFG_PERIMEM_PABITS : positive := %CONFIG_BOOT_PROMABITS%; -- internal boot-prom address bits
|
108 |
|
|
|
109 |
|
|
constant CFG_PERIMEM_WPROTEN : boolean := %CONFIG_PERI_WPROT%[b]; -- enable RAM write-protection unit
|
110 |
|
|
|
111 |
|
|
-----------------------------------------------------------------------------
|
112 |
|
|
-- end of automatic configuration
|
113 |
|
|
-----------------------------------------------------------------------------
|
114 |
|
|
|
115 |
|
|
end peri_mem_config;
|
116 |
|
|
|
117 |
|
|
PERI_MEM_CONFIG_END
|
118 |
|
|
|
119 |
|
|
1;
|
120 |
|
|
|
121 |
|
|
|
122 |
|
|
|
123 |
|
|
|
124 |
|
|
|
125 |
|
|
|
126 |
|
|
|
127 |
|
|
|
128 |
|
|
|
129 |
|
|
|
130 |
|
|
|
131 |
|
|
|