hallo leute, ich bin dabei meine diplomarbeit zu machen, um mitzufolgen wo mein problem ist, ich beschreibe mal das ganze: Die Platine die ich habe ist die Cyclone II FPGA Starter Board QuartusII, SOPC Builder und NIOS II IDE habe ich installiert. Cyclone II Starter Development Ki v1.0.0 habe ich auch installiert. Dort gibt es ein CII_Starter_NIOS Projekt. Ich habe schon eine E-fkt programmiert (VHDL) und im Quartus II simuliert, das Ergebniss ist hervorragend Danach gehe ich zum NIOS II IDE(ich befolge das Tutorial) und will eine C Applikation auf der Platine starten(Hello World). mit hilfe einer "for-schleife" wollte ich 300 werte lesen und schreiben lassen... soweit die theorie. Nun kommt die böse überraschung: nur ein wert kommt raus " 65535 " und wiederhot sich natürlich :(( hier sind einige datei von dem prblem ich weiss nicht wo der fehler ist, für eure hilfe bin ich sehr dankbar
Hallo Yassin, nach dem Starten und dem anschliessendem Auslesen deines e-Fkt. Blocks vergeht soviel Ziet, dass du lediglich nur noch den Maximalwert zu sehen bekommst. Puffer die einzelnen Ausgabewerte deiner e-Fkt. in einem FIFO und lese sie via Interrupt aus (FIFO.Full). Gruss, Marko
Hallo Marko, danke erstmal für deine antwort.. wie kann man das verhindern ?? ich meine programmmässig oder so,denn soviel ahnung vom c habe nicht. nochmal zur überischit hier sind die beiden VHDL- und C-code: ------------------------------------------------------------------------ --- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity EFkt is port ( clk,reset_n : in std_logic; start : in std_logic; d_in : in std_logic_vector (15 downto 0); -- Eingang -- Eingang d_out : out std_logic_vector (15 downto 0) -- Ausgang ); end EFkt; architecture verhalten of EFkt is signal d_in1 : std_logic_vector (16 downto 0); signal d_out1 :std_logic_vector (31 downto 0); begin EFkt:process (clk, reset_n,start) begin if reset_n='0' then d_in1 <=(others=>'0'); d_out1 <=(others=>'0'); elsif clk = '1' and clk'event then if start<='1'then d_in1 <= ( '0'& x"FFFF" ) - ( '0' & d_out1(31downto 16) ) ; d_out1 <= d_in1 + d_out1; end if; end if; end process EFkt ; d_out <= d_out1(31 downto 16); end verhalten; ------------------------------------------------------------------------ ---- #include <stdio.h> #include <system.h> #include <stdlib.h> volatile unsigned short *e_funktion = (void*) E_FCT_DATA_BASE; volatile unsigned short *start = (void*) START_BASE ; unsigned short werte[1000] ; unsigned int i ; int main() { *start = 0; for(i=0;i<=300;i++){ if ( i == 10 ){ *start = 0 ; } werte[i] = *e_funktion; } for(i=0;i<=300;i++){ printf(" %u \n" , werte[i]); } return 0; }
Du wuerdest deiner Efkt entity am besten ein Avalon Interface verpassen, dann wuerde sie naemlich mitkriegen wann die CPU auf diese Zugreift und kann so nach jedem Zugriff eine Iteration weiterschalten. Ganz ohne FIFO und Interrupt. Bei deinem Kentnissstand ist es wohl besser du organisierst dir eine Nios C2H Lizenz, schreibst die Funktion nochmals in C hin und laesst das den C-to-Hardware Accelerator fuer dich erledigen. Cheers, Roger
HAllo Yassin, hat dein NIOS Prozessor Cache integriert? Gruß Jörn
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.