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


von Fragesteller (Gast)


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.
1
  port(
2
    RESET        :    IN    std_logic;      
3
    CLK          :    IN    std_logic;
4
    U          :    IN    std_logic_vector (799 downto 0);  -- 800 bits -> 10000 pixelinformation
5
    Y          :    OUT    std_logic_vector (799 downto 0)    -- 800 bits -> 10000 pixelinformation
6
  );

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!

von Duke Scarring (Gast)


Lesenswert?

1
    U          :    IN    std_logic_vector (799 downto 0); 
2
    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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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?

von Fragesteller (Gast)


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:
1
port(
2
    RESET        :    IN    std_logic;      
3
    -- clock signal for activating the counter and trigger for a cnn cell
4
    CLK          :    IN    std_logic; -- 50mhz
5
    
6
    -- time indipendend input of each neuron (grey-scale image)
7
-- image - as pixel
8
    U          :    IN    std_logic_vector (7 downto 0);
9
    
10
-- output -- bild dann pixelweise ausgeben - nachdem die verarbeitung abgeschlossen ist.
11
    Y          :    OUT    std_logic_vector (7 downto 0)
12
  );
13
14
15
-----------------------------------------
16
17
18
process(RESET,U, CLK)
19
      variable cycles_done : integer := 0;
20
      
21
      variable U_internal : std_logic_vector (799 downto 0);
22
      variable X_internal : std_logic_vector (799 downto 0);
23
      variable Y_internal : std_logic_vector (799 downto 0);
24
      variable nImageReading : integer := 0;
25
      
26
      variable coord_column : integer := 0;
27
      variable coord_row : integer := 0;
28
begin      
29
30
      
31
      if CLK'event and CLK = '1' then
32
        if and nImageReading < 100 then     -- image serial input
33
34
          -- bild für interne verarbeitung in großen vektor abspeichern
35
          U_internal := funcFillVectorWith8b(CLK, nImageReading, U, U_internal);          
36
          nImageReading := nImageReading + 1;
37
38
-- ...

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

1
      variable coord_column : integer := 0;
2
      variable coord_row : integer := 0;
3
begin      
4
5
      
6
      if CLK'event and CLK = '1' then
7
        if and nImageReading < 100 then     -- image serial input
8
9
          -- bild für interne verarbeitung in großen vektor abspeichern
10
          U_internal := funcFillVectorWith8b(CLK, nImageReading, U, U_internal);          
11
          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.

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.