Multiplikation mit DSP Block auf Cyclone V

OP #4013595
Lesenswert?
• ▲
▼
Hi,
Ich bin immer noch mit meinem hobbyprojekt  (CCD Kamera Interface  auf 
DE1-SoC) nicht fertig.
Die Anzahl der Bugs wird aber immer weniger:)
Das aktuelle Problem liegt jetzt (hochwahrscheinlich) an der 
Multiplikation.
 Ich konvertiere die Daten aus dem YCrCb  Format ins RGB, und dafür 
brauche ich einige Multiplikationen.
Dafür habe ich ein PROCEDURE geschrieben. Das (die?) Procedure liegt  im 
Process mit 27Mhz Taktrate.
1
PROCEDURE YCRCB_to_RGB  (Cr,Cb,Y: IN STD_LOGIC_VECTOR(7 downto 0);ENABLE: IN STD_LOGIC;SIGNAL R,G,B: OUT STD_LOGIC_VECTOR(7 downto 0);SIGNAL DATAVALID:OUT STD_LOGIC)IS
2
VARIABLE Rv,R1,Gv,Bv: INTEGER RANGE 0 to 255:=0;
3
VARIABLE EN0,EN1,EN2,EN3: STD_LOGIC;
4
VARIABLE Temp_CrG1,Temp_CrG2,Temp_CrR1,Temp_CrR2,Temp_CbG1,Temp_CbG2,Temp_CbB1,Temp_CbB2: INTEGER RANGE 0 TO 255;
5
BEGIN
6

7
 for i in 0 to 3 loop----pipleline consctruction
8
  case i is
9
  when 0=>
10
  Temp_CrR1:=to_integer(unsigned(Cr)-128)*11;
11
           EN0:=ENABLE;
12
   when 1=>
13
  Temp_CrR2:=Temp_CrR1/8;
14
           EN1:=EN0;
15

16
   when 2=> 
17
  Rv:=to_integer(unsigned(Y))+Temp_CrR2;
18
           EN2:=EN1;
19
   when 3=>
20

21

22
                   IF(Rv<255)THEN    
23
                           R<=STD_LOGIC_VECTOR(to_unsigned(Rv,8));
24
           ELSE
25
          R<=(others=>'1');
26
       END IF;
27
                          DATAVALID<=EN2;
28

29

30
  when others=> NULL;
31
  end case;
32
  end loop;

Wie  man sieht, ich habe eine Art Pipeline Konstruktion.
Das Problem ist jetzt folgendes: manchmal sind die RGB Daten noch nicht 
bereit, obwohl  das "Datavalid" Signal schon  TRUE ausgibt. Das erkenne 
ich daran, dass  die nebeneinander stehende Pixel  den gleichen Wert 
haben. Ich vermute das liegt daran, dass die Multiplikation noch nicht 
bereit ist, und es wird einfach der alte Wert übergeben.

Wie kann ich sicherstellen, dass mit Datavalid-Signal auch die richtige 
Daten bereit stehen?

PS
Nach der Kompilierung wird  jeweils ein DSP Block pro Farbe  benutzt 
(ich  verwende nur die rote Farbe, da das Bild S/W ist)
Gast #4014060
Lesenswert?
• ▲
▼
Hallo,

wenn ich das richtig sehe, ist das keine Pipeline Konstruktion. Das for 
i in 0 to 3 loop generiert lediglich konkurrente Anweisungen (reine 
statische Gatterlogik) und ist praktisch redundant. Der Code wir 
reduziert auf:

  Temp_CrR1:=to_integer(unsigned(Cr)-128)*11;
  EN0:=ENABLE;
  Temp_CrR2:=Temp_CrR1/8;
  EN1:=EN0;
  Rv:=to_integer(unsigned(Y))+Temp_CrR2;
  EN2:=EN1;
  IF(Rv<255)THEN
    R<=STD_LOGIC_VECTOR(to_unsigned(Rv,8));
  ELSE
    R<=(others=>'1');
  END IF;
  DATAVALID<=EN2;

Frage:

1. Ich würde nicht erwarten, dass durch die Multiplikation mit 11 
tatsächlich ein DSP-Block synthetisiert wird. Ich kenne das nur, dass 
man eine DSP-Entity einsetzen muss. Vielleicht werden zwei Additionen 
(das 8-fache mit dem Doppelten + das 1-fache) synthetisiert?

2. Die Synthese von Temp_CrR1/8 würde ich auch als Shift-Operation bzw. 
3 Bit versetzten Abgriff von Temp_CrR1 erwarten.

Im Grunde sind die ersten beiden Anweisungen lediglich zwei Additionen.

Passiert bei dir was anderes?

Grüße, Uwe

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.