Stefan Schuermans commited on 2012-02-21 20:40:30
Showing 2 changed files, with 39 additions and 11 deletions.
... | ... |
@@ -269,7 +269,7 @@ |
269 | 269 |
<property xil_pn:name="JTAG Pin TDI" xil_pn:value="Pull Up" xil_pn:valueState="default"/> |
270 | 270 |
<property xil_pn:name="JTAG Pin TDO" xil_pn:value="Pull Up" xil_pn:valueState="default"/> |
271 | 271 |
<property xil_pn:name="JTAG Pin TMS" xil_pn:value="Pull Up" xil_pn:valueState="default"/> |
272 |
- <property xil_pn:name="Keep Hierarchy" xil_pn:value="No" xil_pn:valueState="default"/> |
|
272 |
+ <property xil_pn:name="Keep Hierarchy" xil_pn:value="Yes" xil_pn:valueState="non-default"/> |
|
273 | 273 |
<property xil_pn:name="Language" xil_pn:value="VHDL" xil_pn:valueState="default"/> |
274 | 274 |
<property xil_pn:name="Last Applied Goal" xil_pn:value="Balanced" xil_pn:valueState="default"/> |
275 | 275 |
<property xil_pn:name="Last Applied Strategy" xil_pn:value="Xilinx Default (unlocked)" xil_pn:valueState="default"/> |
... | ... |
@@ -37,6 +37,9 @@ ARCHITECTURE a_system OF e_system IS |
37 | 37 |
SIGNAL s_dbus_rd_data: std_logic_vector(31 DOWNTO 0); |
38 | 38 |
SIGNAL s_dbus_wr_data: std_logic_vector(31 DOWNTO 0); |
39 | 39 |
SIGNAL s_dbus_wr_en: std_logic_vector( 3 DOWNTO 0); |
40 |
+ |
|
41 |
+ SIGNAL r_dbus_addr_delay: std_logic_vector(31 DOWNTO 0) := (OTHERS => '0'); |
|
42 |
+ |
|
40 | 43 |
SIGNAL s_data_addr: std_logic_vector(31 DOWNTO 0); |
41 | 44 |
SIGNAL s_data_rd_data: std_logic_vector(31 DOWNTO 0); |
42 | 45 |
SIGNAL s_data_wr_data: std_logic_vector(31 DOWNTO 0); |
... | ... |
@@ -238,7 +241,16 @@ BEGIN |
238 | 241 |
o_data => s_instr_data |
239 | 242 |
); |
240 | 243 |
|
241 |
- p_dbus: PROCESS(s_dbus_addr, s_dbus_wr_data, s_dbus_wr_en, |
|
244 |
+ p_dbus_rd_sync: PROCESS(rst, clk) |
|
245 |
+ BEGIN |
|
246 |
+ IF rst = '1' THEN |
|
247 |
+ r_dbus_addr_delay <= (OTHERS => '0'); |
|
248 |
+ ELSIF rising_edge(clk) THEN |
|
249 |
+ r_dbus_addr_delay <= s_dbus_addr; |
|
250 |
+ END IF; |
|
251 |
+ END PROCESS p_dbus_rd_sync; |
|
252 |
+ |
|
253 |
+ p_dbus_rd: PROCESS(r_dbus_addr_delay, |
|
242 | 254 |
s_data_rd_data, |
243 | 255 |
s_leds_rd_data, |
244 | 256 |
s_lcd_rd_data, |
... | ... |
@@ -246,11 +258,34 @@ BEGIN |
246 | 258 |
s_uart_rd_data, |
247 | 259 |
s_eth_rd_data, |
248 | 260 |
s_cyc_cnt_rd_data) |
261 |
+ BEGIN |
|
262 |
+ s_dbus_rd_data <= (OTHERS => '0'); |
|
263 |
+ IF r_dbus_addr_delay(31) = '0' THEN |
|
264 |
+ s_dbus_rd_data <= s_data_rd_data; |
|
265 |
+ ELSIF r_dbus_addr_delay(31 DOWNTO 16) = X"8000" THEN |
|
266 |
+ CASE r_dbus_addr_delay(15 DOWNTO 8) IS |
|
267 |
+ WHEN X"00" => |
|
268 |
+ s_dbus_rd_data <= X"000000" & s_leds_rd_data; |
|
269 |
+ WHEN X"01" => |
|
270 |
+ s_dbus_rd_data <= s_lcd_rd_data; |
|
271 |
+ WHEN X"02" => |
|
272 |
+ s_dbus_rd_data <= s_switches_rd_data; |
|
273 |
+ WHEN X"03" => |
|
274 |
+ s_dbus_rd_data <= s_uart_rd_data; |
|
275 |
+ WHEN X"04" => |
|
276 |
+ s_dbus_rd_data <= s_eth_rd_data; |
|
277 |
+ WHEN X"10" => |
|
278 |
+ s_dbus_rd_data <= s_cyc_cnt_rd_data; |
|
279 |
+ WHEN OTHERS => NULL; |
|
280 |
+ END CASE; |
|
281 |
+ END IF; |
|
282 |
+ END PROCESS p_dbus_rd; |
|
283 |
+ |
|
284 |
+ p_dbus_wr: PROCESS(s_dbus_addr, s_dbus_wr_data, s_dbus_wr_en) |
|
249 | 285 |
VARIABLE v_wr_en_word: std_logic; |
250 | 286 |
BEGIN |
251 | 287 |
v_wr_en_word := s_dbus_wr_en(0) AND s_dbus_wr_en(1) AND |
252 | 288 |
s_dbus_wr_en(2) AND s_dbus_wr_en(3); |
253 |
- s_dbus_rd_data <= (OTHERS => '0'); |
|
254 | 289 |
s_data_addr <= (OTHERS => '0'); |
255 | 290 |
s_data_wr_data <= (OTHERS => '0'); |
256 | 291 |
s_data_wr_en <= (OTHERS => '0'); |
... | ... |
@@ -268,41 +303,34 @@ BEGIN |
268 | 303 |
s_cyc_cnt_wr_data <= (OTHERS => '0'); |
269 | 304 |
s_cyc_cnt_wr_en <= '0'; |
270 | 305 |
IF s_dbus_addr(31) = '0' THEN |
271 |
- s_dbus_rd_data <= s_data_rd_data; |
|
272 | 306 |
s_data_addr <= s_dbus_addr; |
273 | 307 |
s_data_wr_data <= s_dbus_wr_data; |
274 | 308 |
s_data_wr_en <= s_dbus_wr_en; |
275 | 309 |
ELSIF s_dbus_addr(31 DOWNTO 16) = X"8000" THEN |
276 | 310 |
CASE s_dbus_addr(15 DOWNTO 8) IS |
277 | 311 |
WHEN X"00" => |
278 |
- s_dbus_rd_data <= X"000000" & s_leds_rd_data; |
|
279 | 312 |
s_leds_wr_data <= s_dbus_wr_data(7 DOWNTO 0); |
280 | 313 |
s_leds_wr_en <= s_dbus_wr_en(0); |
281 | 314 |
WHEN X"01" => |
282 |
- s_dbus_rd_data <= s_lcd_rd_data; |
|
283 | 315 |
s_lcd_wr_data <= s_dbus_wr_data; |
284 | 316 |
s_lcd_wr_en <= s_dbus_wr_en; |
285 | 317 |
WHEN X"02" => |
286 |
- s_dbus_rd_data <= s_switches_rd_data; |
|
287 | 318 |
s_switches_addr <= s_dbus_addr(2 DOWNTO 0); |
288 | 319 |
WHEN X"03" => |
289 |
- s_dbus_rd_data <= s_uart_rd_data; |
|
290 | 320 |
s_uart_addr <= s_dbus_addr(3 DOWNTO 0); |
291 | 321 |
s_uart_wr_data <= s_dbus_wr_data; |
292 | 322 |
s_uart_wr_en <= s_dbus_wr_en; |
293 | 323 |
WHEN X"04" => |
294 |
- s_dbus_rd_data <= s_eth_rd_data; |
|
295 | 324 |
s_eth_addr <= s_dbus_addr(3 DOWNTO 0); |
296 | 325 |
s_eth_wr_data <= s_dbus_wr_data; |
297 | 326 |
s_eth_wr_en <= s_dbus_wr_en; |
298 | 327 |
WHEN X"10" => |
299 |
- s_dbus_rd_data <= s_cyc_cnt_rd_data; |
|
300 | 328 |
s_cyc_cnt_wr_data <= s_dbus_wr_data; |
301 | 329 |
s_cyc_cnt_wr_en <= v_wr_en_word; |
302 | 330 |
WHEN OTHERS => NULL; |
303 | 331 |
END CASE; |
304 | 332 |
END IF; |
305 |
- END PROCESS p_dbus; |
|
333 |
+ END PROCESS p_dbus_wr; |
|
306 | 334 |
|
307 | 335 |
data_0: e_ram_0 |
308 | 336 |
GENERIC MAP ( |
309 | 337 |