Ich habe das ganze nun stark angepasst und vermute das mein Problem in
der falschen Abfrage der Adresse liegt (manchmal ist es ganz hilfreich
Warnings zu lesen...) Ich spendiere dem Template 8 Bit für die Adresse,
der Code hierzu sieht so aus:
1 | [Ports etc.]
|
2 | clkd: process (clk, reset)
|
3 | begin
|
4 | if (reset ='1') then
|
5 | data_buffer <= (others => '0');
|
6 | data_valid <= '0';
|
7 | state <= INIT;
|
8 | elsif (clk = '1' and clk'event )
|
9 | state <= state_nxt;
|
10 | data_buffer <= data_buffer_nxt;
|
11 | data_valid <= data_valid_nxt;
|
12 | end if;
|
13 | end process;
|
14 | fsm : process ( avs_s0_write,state,data_buffer,data_valid,avs_s0_writedata)
|
15 | begin
|
16 | avs_s0_waitrequest <= '0';
|
17 | avs_s0_readdata <= "00000000000000000000000000000000";
|
18 | avs_s0_readdatavalid <= '0';
|
19 | data_buffer_nxt <= data_buffer;
|
20 | data_valid_nxt <= data_valid;
|
21 | state_nxt <= state;
|
22 |
|
23 | case state is
|
24 | when INIT =>
|
25 | avs_s0_waitrequest <= '0';
|
26 | state_nxt <= IDLE;
|
27 |
|
28 | when IDLE =>
|
29 | if (avs_s0_write = '1') then
|
30 | if (avs_s0_address = 0x"01000000") then
|
31 | avs_s0_waitrequest <= '1';
|
32 | state_nxt <= READ;
|
33 | end if;
|
34 | end if;
|
35 | when READ =>
|
36 | avs_s0_waitrequest <= '1';
|
37 | data_buffer_nxt <= avs_s0_writedata;
|
38 | state_nxt <= READ_WAIT;
|
39 | when READ_WAIT =>
|
40 | avs_s0_waitrequest <= '0';
|
41 | state_nxt <= IDLE;
|
42 | end case;
|
43 | end process;
|
Die Abfrage if (avs_s0_address = 0x01000000).. bereitet mir noch
Kopfschmerzen. Das Adressmapping von QSys legt diese Adresse fest. Wie
bereits oben erwähnt, spendiere ich dem Template ja aber nur 8Bit. Der
Wert 0x01000000 passt nur in 32Bit. Wie kann ich diesen Wert gezielt
abfragen? Oder reicht es 0x00 abzufragen da nur die unteren 8Bit
relevant sind in diesem Fall? Ich möchte einfach nur in einem C Programm
mit
1 | IOWR32_DIRECT(0x01000000,0,data)
|
Daten an mein externes Modul schicken! Wie kann ich sicherstellen das
die richtigen Daten von meinem externen Modul übernommen werden? Ich
steh vollkommen auf dem Schlauch :(