IP documentation » History » Version 33
Jean-Christophe Pellion, 28/02/2014 03:37 PM
1 | 10 | Jean-Christophe Pellion | {{>toc}} |
---|---|---|---|
2 | 1 | Jean-Christophe Pellion | |
3 | 11 | Jean-Christophe Pellion | h1. IP Documentation |
4 | 1 | Jean-Christophe Pellion | |
5 | 15 | Jean-Christophe Pellion | ---- |
6 | |||
7 | 11 | Jean-Christophe Pellion | h2. General Purpose |
8 | 1 | Jean-Christophe Pellion | |
9 | 15 | Jean-Christophe Pellion | h3. Edge Detection |
10 | 1 | Jean-Christophe Pellion | |
11 | 15 | Jean-Christophe Pellion | {{collapse(Edge_Detection) |
12 | EdgeDetection permit to detect the edge of the sin signal. |
||
13 | |||
14 | p=. !{width: 20%}edge_detection.png! |
||
15 | |||
16 | <pre><code class="vhdl"> |
||
17 | COMPONENT lpp_edge_detection |
||
18 | PORT ( |
||
19 | clk : IN STD_LOGIC; |
||
20 | rstn : IN STD_LOGIC; |
||
21 | sin : IN STD_LOGIC; |
||
22 | sout : OUT STD_LOGIC); |
||
23 | END COMPONENT; |
||
24 | </code></pre> |
||
25 | |||
26 | |_.Signal |_.Direction |_.Size |_.Function |_. Active | |
||
27 | |clk |input |1 |clock domain 1 |rising edge | |
||
28 | |rstn |input |1 |reset |low | |
||
29 | |sin |input |1 |signal in | | |
||
30 | |sout |ouput |1 |signal out | | |
||
31 | |||
32 | }} |
||
33 | {{collapse(Edge_to_level) |
||
34 | 20 | Jean-Christophe Pellion | EdgeToLevel permit to transform the positive edge information into a level information. |
35 | 15 | Jean-Christophe Pellion | |
36 | 16 | Jean-Christophe Pellion | p=. !{width: 20%}edge_to_level.png! |
37 | 15 | Jean-Christophe Pellion | |
38 | <pre><code class="vhdl"> |
||
39 | 17 | Jean-Christophe Pellion | COMPONENT lpp_edge_to_level |
40 | 15 | Jean-Christophe Pellion | PORT ( |
41 | clk : IN STD_LOGIC; |
||
42 | rstn : IN STD_LOGIC; |
||
43 | sin : IN STD_LOGIC; |
||
44 | sout : OUT STD_LOGIC); |
||
45 | END COMPONENT; |
||
46 | </code></pre> |
||
47 | |||
48 | |_.Signal |_.Direction |_.Size |_.Function |_. Active | |
||
49 | |clk |input |1 |clock domain 1 |rising edge | |
||
50 | |rstn |input |1 |reset |low | |
||
51 | |sin |input |1 |signal in | | |
||
52 | |sout |ouput |1 |signal out | | |
||
53 | |||
54 | }} |
||
55 | |||
56 | 13 | Jean-Christophe Pellion | h3. Synchronizer |
57 | 8 | Jean-Christophe Pellion | |
58 | {{collapse(SYNC_FF) |
||
59 | 19 | Jean-Christophe Pellion | Sync_FF permit to synchronize a signal A in the clock domain clk. Normally, A signal should be the output of a FF cloked in an other domain. You shouldtn't have "logic" between the 2 domain. |
60 | You can configure the number FF use to synchronize (NB_FF_OF_SYNC). This number is depending of the MTBF(Mean Time Between Failure). |
||
61 | 13 | Jean-Christophe Pellion | |
62 | p=. !{width: 15%}SYNC_FF.png! |
||
63 | 8 | Jean-Christophe Pellion | |
64 | <pre><code class="vhdl"> |
||
65 | COMPONENT SYNC_FF_LPP_JCP |
||
66 | GENERIC ( |
||
67 | NB_FF_OF_SYNC : INTEGER); |
||
68 | PORT ( |
||
69 | clk : IN STD_LOGIC; |
||
70 | rstn : IN STD_LOGIC; |
||
71 | A : IN STD_LOGIC; |
||
72 | A_sync : OUT STD_LOGIC); |
||
73 | END COMPONENT; |
||
74 | </code></pre> |
||
75 | |||
76 | |_.Parameter |_.Type |_.Size |_.Description |_.Default | |
||
77 | 7 | Jean-Christophe Pellion | |NB_FF_OF_SYNC |Integer | |Number of FF |2 | |
78 | 1 | Jean-Christophe Pellion | |\5.| |
79 | |_.Signal |_.Direction |_.Size |_.Function |_. Active | |
||
80 | |clk |input |1 |clock |rising edge | |
||
81 | |rstn |input |1 |reset |low | |
||
82 | 15 | Jean-Christophe Pellion | |sin |input |1 |signal in | | |
83 | |sout |ouput |1 |signal synchronized | | |
||
84 | 13 | Jean-Christophe Pellion | |
85 | }} |
||
86 | |||
87 | 1 | Jean-Christophe Pellion | {{collapse(SYNC_VALID_BIT) |
88 | 14 | Jean-Christophe Pellion | SYNC_VALID_BIT permit to synchronize a signal of validity from clock domain clk_in to clock domain clk_out. A validity bit is a signal set "high" only one cycle and zero others. To Synchronize this type of signal, a first stage detect the positive edge, a second synchronizes this signal, and a last transform the edge information to a validity bit. |
89 | 19 | Jean-Christophe Pellion | You can configure the FF number of the second stage (NB_FF_OF_SYNC). |
90 | 14 | Jean-Christophe Pellion | |
91 | 13 | Jean-Christophe Pellion | p=. !{width: 20%}SYNC_VALID_BIT.png! |
92 | |||
93 | <pre><code class="vhdl"> |
||
94 | COMPONENT SYNC_VALID_BIT_LPP_JCP |
||
95 | GENERIC ( |
||
96 | NB_FF_OF_SYNC : INTEGER); |
||
97 | PORT ( |
||
98 | clk_in : IN STD_LOGIC; |
||
99 | clk_out : IN STD_LOGIC; |
||
100 | rstn : IN STD_LOGIC; |
||
101 | sin : IN STD_LOGIC; |
||
102 | sout : OUT STD_LOGIC); |
||
103 | END COMPONENT; |
||
104 | </code></pre> |
||
105 | |||
106 | |_.Parameter |_.Type |_.Size |_.Description |_.Default | |
||
107 | 1 | Jean-Christophe Pellion | |NB_FF_OF_SYNC |Integer | |Number of FF |2 | |
108 | 13 | Jean-Christophe Pellion | |\5.| |
109 | 18 | Jean-Christophe Pellion | |_.Signal |_.Direction |_.Size |_.Function |_. Active | |
110 | |clk_in |input |1 |clock domain 1 |rising edge | |
||
111 | |clk_out |input |1 |clock domain 1 |rising edge | |
||
112 | |rstn |input |1 |reset |low | |
||
113 | |sin |input |1 |valid bit clocked in domain 1| | |
||
114 | |sout |output |1 |valid bit clocked in domain 2| | |
||
115 | 2 | Jean-Christophe Pellion | |
116 | }} |
||
117 | 21 | Jean-Christophe Pellion | |
118 | |||
119 | ---- |
||
120 | |||
121 | h2. SoC (System On Chip) |
||
122 | |||
123 | {{collapse(Leon3_Soc) |
||
124 | Leon3_SoC is an IP which integrate all the basic IP for using a Leon3 System. This System is configurable : |
||
125 | * activate the DSU, AHB uart, APB UART, IRQ manager and timer manager |
||
126 | * activate the FPU and select the type of IP using for (netlist or rtl) |
||
127 | |||
128 | 23 | Jean-Christophe Pellion | You can connect easily external AMBA IP. For example, if you have only one Leon3 and you want to add an AHB Master My_AHB_MST. You set NB_AHB_MASTER to 1 and connect My_AHB_MST_ahbmi signal to the input ahbi_m_ext and My_AHB_MST_ahbmo to ahbo_m_ext(1). |
129 | 21 | Jean-Christophe Pellion | |
130 | 24 | Jean-Christophe Pellion | |
131 | |_.Number |_.NAME |_.Enable Parameter |_.Address |_.IRQ| |
||
132 | |\5=.AHB Master | |
||
133 | | 0 to NCPU-1 |leon3s | ||| |
||
134 | | NCPU+NB_AHBMASTER |ahbuart |ENABLE_AHB_UART ||| |
||
135 | |\5.| |
||
136 | |\5=.AHB Slave | |
||
137 | | 0 |mctrl | |0x00000000 | | |
||
138 | | 1 |apbctrl | |0x80000000 | | |
||
139 | | 2 |dsu3 |ENABLE_DSU |0x90000000 |0 | |
||
140 | |\5.| |
||
141 | |\5=.APB Slave | |
||
142 | | 0 |mctrl | |0x80000000 | | |
||
143 | | 1 |apbuart |ENABLE_APB_UART |0x80000100 |2 | |
||
144 | | 2 |irqmp |ENABLE_IRQMP |0x80000200 | | |
||
145 | | 3 |gptimer |ENABLE_GPT |0x80000300 |8 | |
||
146 | | 4 |ahbuart |ENABLE_APB_UART |0x80000400 | | |
||
147 | |||
148 | 28 | Jean-Christophe Pellion | p=. !{width: 40%}leon3_SoC.png! |
149 | 25 | Jean-Christophe Pellion | |
150 | 21 | Jean-Christophe Pellion | <pre><code class="vhdl"> |
151 | COMPONENT leon3_soc_LPP_JCP |
||
152 | GENERIC ( |
||
153 | fabtech : INTEGER; |
||
154 | memtech : INTEGER; |
||
155 | padtech : INTEGER; |
||
156 | clktech : INTEGER; |
||
157 | disas : INTEGER; |
||
158 | dbguart : INTEGER; |
||
159 | pclow : INTEGER; |
||
160 | clk_freq : INTEGER; |
||
161 | NB_CPU : INTEGER; |
||
162 | ENABLE_FPU : INTEGER; |
||
163 | FPU_NETLIST : INTEGER; |
||
164 | ENABLE_DSU : INTEGER; |
||
165 | ENABLE_AHB_UART : INTEGER; |
||
166 | ENABLE_APB_UART : INTEGER; |
||
167 | ENABLE_IRQMP : INTEGER; |
||
168 | ENABLE_GPT : INTEGER; |
||
169 | NB_AHB_MASTER : INTEGER; |
||
170 | NB_AHB_SLAVE : INTEGER; |
||
171 | NB_APB_SLAVE : INTEGER); |
||
172 | PORT ( |
||
173 | clk : IN STD_ULOGIC; |
||
174 | rstn : IN STD_ULOGIC; |
||
175 | errorn : OUT STD_ULOGIC; |
||
176 | ahbrxd : IN STD_ULOGIC; |
||
177 | ahbtxd : OUT STD_ULOGIC; |
||
178 | urxd1 : IN STD_ULOGIC; |
||
179 | utxd1 : OUT STD_ULOGIC; |
||
180 | address : OUT STD_LOGIC_VECTOR(19 DOWNTO 0); |
||
181 | data : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); |
||
182 | nSRAM_BE0 : OUT STD_LOGIC; |
||
183 | nSRAM_BE1 : OUT STD_LOGIC; |
||
184 | nSRAM_BE2 : OUT STD_LOGIC; |
||
185 | nSRAM_BE3 : OUT STD_LOGIC; |
||
186 | nSRAM_WE : OUT STD_LOGIC; |
||
187 | nSRAM_CE : OUT STD_LOGIC; |
||
188 | nSRAM_OE : OUT STD_LOGIC; |
||
189 | apbi_ext : OUT apb_slv_in_type; |
||
190 | apbo_ext : IN soc_apb_slv_out_vector(NB_APB_SLAVE-1+5 DOWNTO 5); |
||
191 | ahbi_s_ext : OUT ahb_slv_in_type; |
||
192 | ahbo_s_ext : IN soc_ahb_slv_out_vector(NB_AHB_SLAVE-1+3 DOWNTO 3); |
||
193 | ahbi_m_ext : OUT AHB_Mst_In_Type; |
||
194 | ahbo_m_ext : IN soc_ahb_mst_out_vector(NB_AHB_MASTER-1+NB_CPU DOWNTO NB_CPU)); |
||
195 | END COMPONENT; |
||
196 | </code></pre> |
||
197 | |||
198 | |_.Parameter |_.Type |_.Size |_.Description |_.Default | |
||
199 | |fabtech | INTEGER | |Target technologie |apa3e | |
||
200 | |memtech | INTEGER | |Memory Target technologie |apa3e | |
||
201 | |padtech | INTEGER | |Pad Target technologie |inferred | |
||
202 | |clktech | INTEGER | |Clock target technologie |inferred | |
||
203 | |disas | INTEGER | |Activate the disassembler |0 | |
||
204 | |dbguart | INTEGER | |Activate debug uart |0 | |
||
205 | |pclow | INTEGER | | |2 | |
||
206 | |clk_freq | INTEGER | |Clock input frequency (in kHz) |25000 | |
||
207 | |NB_CPU | INTEGER | |Number of Leon3 |1 | |
||
208 | |ENABLE_FPU | INTEGER | |Enable the FPU |1 | |
||
209 | |FPU_NETLIST | INTEGER | |Select the FPU Used (1=> NetList, 0=> RTL) |1 | |
||
210 | |ENABLE_DSU | INTEGER | |Enable the Debug System Unit |1 | |
||
211 | |ENABLE_AHB_UART | INTEGER | |Enable AHB UART |1 | |
||
212 | |ENABLE_APB_UART | INTEGER | |Enable APB UART |1 | |
||
213 | |ENABLE_IRQMP | INTEGER | |Enable irq manager |1 | |
||
214 | |ENABLE_GPT | INTEGER | |Enable the timer |1 | |
||
215 | |NB_AHB_MASTER | INTEGER | |Number of AHB Master outside the SoC |0 | |
||
216 | |NB_AHB_SLAVE | INTEGER | |Number of AHB Slave outside the SoC |0 | |
||
217 | |NB_APB_SLAVE | INTEGER | |Number of APB Slave outside the SoC |0 | |
||
218 | |\5.| |
||
219 | |_.Signal |_.Direction |_.Size or Type |_.Function |_. Active | |
||
220 | |clk | input |1 |clock |rising edge | |
||
221 | |rstn | input |1 |reset |low | |
||
222 | |errorn | output |1 |leon 3 error signal | | |
||
223 | |ahbrxd | input |1 |AHB uart Rx Signal | | |
||
224 | |ahbtxd | output |1 |AHB uart Tx Signal | | |
||
225 | |urxd1 | input |1 |APB uart Rx Signal | | |
||
226 | |utxd1 | output |1 |APB uart Tx Signal | | |
||
227 | |address | output |20 |SRam Address | | |
||
228 | |data | inout |32 |SRam Data | | |
||
229 | |nSRAM_BE0 | output |1 |SRam bankEnable 0 | | |
||
230 | |nSRAM_BE1 | output |1 |SRam bankEnable 1 | | |
||
231 | |nSRAM_BE2 | output |1 |SRam bankEnable 2 | | |
||
232 | |nSRAM_BE3 | output |1 |SRam bankEnable 3 | | |
||
233 | |nSRAM_WE | output |1 |SRam WriteEnable | | |
||
234 | |nSRAM_CE | output |1 |SRam ChipEnable | | |
||
235 | |nSRAM_OE | output |1 |SRam OutputEnable | | |
||
236 | |apbi_ext | output |apb_slv_in_type|APB Slave bus input signal | | |
||
237 | |apbo_ext | input |NB_APB_SLAVE of apb_slv_out_type|APB Slave bus output signal | | |
||
238 | |ahbi_s_ext | output |ahb_slv_in_type|AHB Slave bus input signal | | |
||
239 | |ahbo_s_ext | input |NB_AHB_SLAVE of ahb_slv_out_type |AHB Slave bus output signal | | |
||
240 | |ahbi_m_ext | output |ahb_mst_In_Type|AHB Master bus input signal | | |
||
241 | |ahbo_m_ext | input |NB_AHB_MASTER of ahb_mst_out_type|AHB Master bus output signal | | |
||
242 | 32 | Jean-Christophe Pellion | |
243 | 21 | Jean-Christophe Pellion | }} |
244 | 22 | Jean-Christophe Pellion | |
245 | 29 | Jean-Christophe Pellion | |
246 | ---- |
||
247 | |||
248 | h2. AMBA Peripherals |
||
249 | |||
250 | 1 | Jean-Christophe Pellion | {{collapse(APB LFR Time Managment) |
251 | 31 | Jean-Christophe Pellion | |
252 | LFR Time management is a real time clock. The time is give by the coarse_time and fine_time value. The Time managment is like a big counter of 48b (coarse_time + fine_time). This big counter count each nb_wait_period of period clk49_152MHz. |
||
253 | The bit 0 of coarse_time is the second. |
||
254 | The Time mangment can be updated by register with the value into COARSE_TIME_LOAD. When a space_wire_tick or a CTRL.force_tick is asserted, the value into COARSE_TIME_LOAD is loaded in COARSE_TIME and the FINE_TIME is reset to 0. |
||
255 | |||
256 | 30 | Jean-Christophe Pellion | |_.VENDOR_ID |TBD | |
257 | |_.DEVICE_ID |TBD | |
||
258 | 1 | Jean-Christophe Pellion | |\2.| |
259 | |_.APB_ADDRESS |_.Register Name |_.Access |_.Description |\2.*Field* |_.Reset Value | |
||
260 | |/2.0x00 |/2. CTRL |/2.RW |/2.Control register |0 | force_tick |/2.0x0 | |
||
261 | |31-1 | Unused | |
||
262 | 31 | Jean-Christophe Pellion | |0x04 | COARSE_TIME_LOAD |RW |CoarseTime to load after the next "tick" |31-0 | Coarse_time |0x800000000 | |
263 | |/2.0x08 |/2. COARSE_TIME |/2.R |Current CoarseTime |30-0 | Coarse_time |/2. | |
||
264 | |Indicates if the current coarse_time is not "in phase" with the SPW|31 | Not_SPW | |
||
265 | |/2.0x0C |/2. FINE_TIME |/2.R |/2.Current FineTime |15-0 | FineTime |/2. | |
||
266 | 30 | Jean-Christophe Pellion | |31-16| Unused | |
267 | 31 | Jean-Christophe Pellion | |
268 | 30 | Jean-Christophe Pellion | <pre><code class="vhdl"> |
269 | COMPONENT apb_lfr_time_management_LPP_JCP IS |
||
270 | GENERIC( |
||
271 | pindex : INTEGER := 0; |
||
272 | paddr : INTEGER := 0; |
||
273 | pmask : INTEGER := 16#fff#; |
||
274 | pirq : INTEGER := 0; |
||
275 | nb_wait_period : INTEGER := 375 |
||
276 | ); |
||
277 | PORT ( |
||
278 | clk25MHz : IN STD_LOGIC; |
||
279 | clk49_152MHz : IN STD_LOGIC; |
||
280 | resetn : IN STD_LOGIC; |
||
281 | grspw_tick : IN STD_LOGIC; |
||
282 | apbi : IN apb_slv_in_type; |
||
283 | apbo : OUT apb_slv_out_type; |
||
284 | coarse_time : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); |
||
285 | fine_time : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) |
||
286 | ); |
||
287 | END COMPONENT; |
||
288 | </code></pre> |
||
289 | 29 | Jean-Christophe Pellion | }} |
290 | |||
291 | 22 | Jean-Christophe Pellion | ---- |