hans schrieb:
> ich weiss jetzt nicht was du genau mit dem addressing meinst. die
> adressen zum schreieb lesen siehst du ja in der system.h oder in deinem
> qsys design
hallo,
ich hab hier ein SignalTap für Verstehen, was der Niosii macht, wenn ich
mit IOWR_16DIRECT() oder IOWR mache.
Im Custom -Write Registerfile:
1 | write_regfile_pro: process (clk, rst_n)
|
2 | begin
|
3 | if rst_n = '0' then -- asyn reset
|
4 | Test <= (others => '0');
|
5 | elsif rising_edge(clk) and avs_write_n = '0' then
|
6 | case avs_address is
|
7 | when x"003" => Test <= avs_writedata;
|
8 | when others => NULL;
|
9 | end case;
|
10 | end if;
|
11 | end process write_regfile_pro;
|
Im NiosII EDS hab versucht, auf gleiche 12-Bit Addresse 0x003 mit 0xAAAA
zu beschreiben:
1 | #define AVS_BUS_INTERFACE_0_BASE 0x40000 // in system.h
|
2 |
|
3 | // Fall 1:
|
4 | IOWR (AVS_BUS_INTERFACE_0_BASE,3,0xAAAA);
|
5 | // Fall 2:
|
6 | IOWR_16DIRECT(AVS_BUS_INTERFACE_0_BASE,3,0xAAAA);
|
7 | // Fall 3:
|
8 | IOWR_16DIRECT(AVS_BUS_INTERFACE_0_BASE,(0x003<<1),0xAAAA);
|
9 | // Fall 4:
|
10 | pAVS_PIO[0x003] = 0xAAAA;
|
Im SignalTapII sieht man:
Fall 1:
Control-Signal: avs_write_n dauert 2- Clock Periode(gedacht aber NUR 1
Clk-Periode!). Hier sieht so aus, er versucht 32-Bit Data auf 2
hintereinander Addressen zu beschreiben: Address 0x006 mit Data 0xAAAA,
Address 0x007 mit 0x0000 (warum????)
Fall 2:
Control-Signal: avs_write_n dauert 1- Clock Periode wie erwartet, aber
wieso auf Address: 0x001 (?)
Fall 3:
avs_write_n dauert 1- Clock Periode wie erwartet, auf Address: 0x003
->>> wie erwartet!
Fall 4:
avs_write_n dauert 1- Clock Periode wie erwartet, auf Address: 0x003
->>> wie erwartet! Aber mit dem Trick :
1 | volatile alt_16 *pAVS_PIO = (volatile alt_16*)(AVS_BUS_INTERFACE_0_BASE|0x80000000);
|
Kann jemand mir ins Licht bringen?
Vielen Dank im Vorraus!!!
Lg Tomy