mikrocontroller.net

Forum: FPGA, VHDL & Co. Frage zur Simulation - Waveform - Pin Assignment


Autor: Fragesteller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe ein Altera DE 2 Development Board mit Cyclone II - FPGA.
Nun habe ich endlich ein kleines Programm geschrieben, welches ich 
simulieren möchte.

Es geht jetzt darum, dass ich meine Ein- und Ausgangssignale richtig 
zuordnen muss um das ganze simulieren zu können.
  port(
    RESET        :    IN    std_logic;      
    CLK          :    IN    std_logic;
    U          :    IN    std_logic_vector (799 downto 0);  -- 800 bits -> 10000 pixelinformation
    Y          :    OUT    std_logic_vector (799 downto 0)    -- 800 bits -> 10000 pixelinformation
  );

Ich habe mir die Dokumentation des ganzen Boards zu Gemüte geführt und 
konnte die ersten zwei Signale einfach zuordnen.


RESET <=> PIN_G26 - hier handelt es sich um einen einfachen knopf
CLK <=> PIN_N2 - 50mhz clock vom board


nun stehe ich etwas daneben, ich weiß nämlich nicht, wie ich die 2 
vektoren zuordnen sollte.

sinn und zweck dieser 2 vektoren ist das einlesen und ausgeben von 
grey-scale bildern.
es handelt sich einfach um 10x10 pixel bilder. jeder pixel ist durch 8 
bits codiert. gibt es eine möglichkeit hier pins zuzuordnen??
ich arbeite mit quartus 9.0.

vielen dank für jede hilfe!

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    U          :    IN    std_logic_vector (799 downto 0); 
    Y          :    OUT    std_logic_vector (799 downto 0)

So wie es jetzt dasteht brauchst Du 2x800 = 1600 Pins. Wenn Du die übrig 
hast, ist es kein Problem. Sonst musst Du Dir überlegen wie Du Dein Bild 
seriell in den FPGA bekommst.

Duke

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> es handelt sich einfach um 10x10 pixel bilder.
> jeder pixel ist durch 8 bits codiert.
> sinn und zweck dieser 2 vektoren ist das einlesen und ausgeben von
> grey-scale bildern.
Woher kommen die Bilder?
Wohin ausgeben?
Wie werden die daten übertragen?
Wie schnell muß das Ganze sein?

> 10x10 pixel bilder. jeder pixel ist durch 8 bits codiert
Kommen daher deine 800 Bit breiten Vektoren?

> Ich habe mir die Dokumentation des ganzen Boards zu Gemüte geführt...
und jetzt kommt erst mal das "hello world" der Hardware: ein Lauflicht.
Warum willst du gleich mit Bildbearbeitung loslegen?

Autor: Fragesteller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!


Ah verstehe das geht also nur seriell.
Mein FPGA hat nur 475 user I/O pins - von demher scheine ich ein problem 
zu haben.

Ich glaube die lauflichter beherrsche ich schon ganz gut :)

> Woher kommen die Bilder?
nun ich wollte sie für den "anfang" in einem speicher positionieren, 
sram oder sdram. stellt ich auch gleich die frage wie ich sie dort 
hinbekomme - weiß ich nämlich noch nicht. RS-232? video_in? ich weiß es 
nicht

> Wohin ausgeben?
ich will die daten über vga out ausgeben, nachdem sie vom FPGA 
bearbeitet wurden.

>Wie werden die daten übertragen?

> Wie schnell muß das Ganze sein?
so schnell wie möglich

> 10x10 pixel bilder. jeder pixel ist durch 8 bits codiert
> Kommen daher deine 800 Bit breiten Vektoren?
ja genau, ich will ein grey-scale bild darstellen in fix-point notation.
werte im intervall [-1, +1] - 6 kommastellen genauigkeit


------
ich habe nun folgendes - für die verarbeitung im FPGA:
port(
    RESET        :    IN    std_logic;      
    -- clock signal for activating the counter and trigger for a cnn cell
    CLK          :    IN    std_logic; -- 50mhz
    
    -- time indipendend input of each neuron (grey-scale image)
-- image - as pixel
    U          :    IN    std_logic_vector (7 downto 0);
    
-- output -- bild dann pixelweise ausgeben - nachdem die verarbeitung abgeschlossen ist.
    Y          :    OUT    std_logic_vector (7 downto 0)
  );


-----------------------------------------


process(RESET,U, CLK)
      variable cycles_done : integer := 0;
      
      variable U_internal : std_logic_vector (799 downto 0);
      variable X_internal : std_logic_vector (799 downto 0);
      variable Y_internal : std_logic_vector (799 downto 0);
      variable nImageReading : integer := 0;
      
      variable coord_column : integer := 0;
      variable coord_row : integer := 0;
begin      

      
      if CLK'event and CLK = '1' then
        if and nImageReading < 100 then     -- image serial input

          -- bild für interne verarbeitung in großen vektor abspeichern
          U_internal := funcFillVectorWith8b(CLK, nImageReading, U, U_internal);          
          nImageReading := nImageReading + 1;

-- ...

habt ihr vorschläge wie ich so ein 10x10 pixel bild - später auch 
größere für die verarbeitung zum fpga bekommen kann?
also INPUT -> SDRAM/SRAM/FLASH -> FPGA -> VGA
habt ihr vllt bessere ideen?

vielen dank!

mfg

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ah verstehe das geht also nur seriell.
Bilddaten sind üblicherweise seriell.
Du kannst z.B. ja auch nicht jedes Pixel im Monitor direkt ansteuern.

>> Wohin ausgeben?
> ich will die daten über vga out ausgeben, nachdem sie vom FPGA
> bearbeitet wurden.
>> Wie schnell muß das Ganze sein?
> so schnell wie möglich
VGA ist langsam, das sind nur 640x480 Pixel mit 25 MHz Pixeltakt. So 
schnell wie möglich ist ca. 10 mal schneller. Warum solltest du deine 
Bilder schneller berechnen wollen, als du sie ausgeben kannst?


Falsch:
> INPUT -> SDRAM/SRAM/FLASH -> FPGA -> VGA
Richtig:
INPUT/ADC  ->  FPGA  -> VGA
                ^
                |
                v
            SDRAM/SRAM

Ein Tipp:
Mach mal was einfaches am Anfang, sonst packt dich der Frust, und 
nächste Woche vertickst du dein Eval-Board in der Bucht.

      variable coord_column : integer := 0;
      variable coord_row : integer := 0;
begin      

      
      if CLK'event and CLK = '1' then
        if and nImageReading < 100 then     -- image serial input

          -- bild für interne verarbeitung in großen vektor abspeichern
          U_internal := funcFillVectorWith8b(CLK, nImageReading, U, U_internal);          
          nImageReading := nImageReading + 1;
Hmm...
Funktionen und Variablen, du hast vorher offenbar C programmiert?
Falls ja:
du brauchst einen Systemreset und eine ganz andere Denkweise. Beim 
FPGA programmierst du nicht irgendwas, sondern du bastelst FlipFlops und 
Logik zusammen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.