Forum: FPGA, VHDL & Co. NIOS II Demo Project - Hello World "kein gewünschtes ergebniss"


von Yassin (Gast)


Angehängte Dateien:

Lesenswert?

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

von Marko (Gast)


Lesenswert?

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

von Yassin (Gast)


Lesenswert?

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;
}

von Roger S. (edge)


Lesenswert?

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

von Jörn (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.