mikrocontroller.net

Forum: FPGA, VHDL & Co. Componente mit CLK und OHNE CLK


Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo habe ein mehr oder weniger großes Verständnisproblem. Habe einen 
Filter in dem sich multiplizierer und addierer befinden. alle 
componenten werden ohne clock angesteuert. nun will ich aber pipelinen 
und brauche die clk in den componenten. wenn ich nun den multiplizierer 
mit einer clk versehe, kommen falsche werte bei der simulation raus.

hat einer ne idee woran es liegen kann?

bin für jeden tipp dankbar.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt verschiedene Style/Coding-Guidelines, die sequentielle von
kombinatorischer Logik trennen. Register/Memory ist sequentiell,
Verknüpfungen (ohne Rückkopplung) kombinatorisch (wie ja auch Bool.
Operationen,Addition, etc.). Soweit ist Deine Komponente also wohl
kombinatorischer Natur.

Ich gehe mal davon aus, dass Du eigentich streamen statt pipelinen
möchtest, sonst müsstest Du ja die Komponente in Teilschritte
zerlegen. Du hast also eine Aufgabe wie z.B. r[i] = F(a[i] ,b[i],..)
oder dergleichen. Also muss Deine sequentielle Logik z.B. zu jeder
Taktflanke die Indices der Parameter berechnen und Deine Komponente
mit den Signalen a[i],b[i],.. "versorgen" während die Komponente selbst
den r[i]-Wert berechnet:
signal index_reg : integer := 0;
signal index_next: integer := 0;

signal a: what_ever_array_type := {4711,4712,4713,..};
signal b: what_ever_array_type := {0815,0816,0817,..};
signal r: what_ever_array_type;
signal r_next: what_ever_type;

signal a_in : what_ever_type;
signal b_in : what_ever_type;
signal r_out: what_ever_type;

inst__dein_filter:deine_filter
  port map
  (
    a <= a_in,
    b <= b_in,
    r <= r_out
  );

process(CLK , nRESET)
begin
  if rising_edge(CLK) then
    count_reg <= count_next;
    r[count_reg] <= r_next;
  end if;
end process;

count_next  <= count_reg + 1 when count_reg /= STREAM_WIDTH-1 else 0;
finish_flag <= '0' when count_reg /= STREAM_WIDTH-1 else '1';

a_in   <= a[count_reg];
b_in   <= b[count_reg];
r_next <= r_out;


Zu jeder pos.Taktflanke werden also die Indices für die Parameter
berechnet, dann wird in der kombinatorischen Logik entsprechend
den neuen Parametern r_next berechnet, was sich bis zur nächsten
Taktflanke stabilisieren sollte (=>max Frequenz) und dort dann das
Ergebnis der Filterung im r-Array abgelegt wird.

Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Mühe doch zuerst mal ist nicht der Filter die Comp, 
sondern die Addierer und Multis des Filters. Ist auch eigentlich egal.
Nein ich möchte wirklich Pipelinen. Adder wird zerlegt und mit Registern 
versorgt. Habe herausgefunden, dass ich irgendwo ein verzögerungsglied 
zuviel bzw. zu wenig drin habe. man man eine sch...arbeit

trotzdem herzlichsten dank

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist Deine Aufgabe aber mit der des Streamens vergleichbar.
Statt Register-Arrays werden dann die Register zwischen den
Pipelinestufen verwendet, die Logik muss dann nur die entsprechenden
Register "aktivieren",z.B. über Multiplexer. Mein Code sollte ja nur
die Idee verdeutlichen, trotzdem noch viel Spass (oder viel Mühe??)

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.