mikrocontroller.net

Forum: FPGA, VHDL & Co. Fehler: Can't find control signal for.


Autor: Andi Z. (duderino65)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mein Compiler meldet nun folgendes:
@W: CL113 
:"C:\isptools7_2_strt\work\ram_sw_1\ram_sw.vhd":61:4:61:5|Feedback mux 
created for signal WR_BIT_CNT[4:0].
@W: CL113 
:"C:\isptools7_2_strt\work\ram_sw_1\ram_sw.vhd":61:4:61:5|Feedback mux 
created for signal WR_ADR[4:0].
@W: CL113 
:"C:\isptools7_2_strt\work\ram_sw_1\ram_sw.vhd":75:4:75:5|Feedback mux 
created for signal RD_BIT_CNT[4:0].
@E: CL121 
:"C:\isptools7_2_strt\work\ram_sw_1\ram_sw.vhd":75:4:75:5|Can't find 
control signal for RD_BIT_CNT

hier der code ab zeile 75:
entity:
RD_CLK_IN   : in std_logic;
...

arch:
signal RD_ADR     : std_logic_vector(4 downto 0) := "11111";
signal RDCK_EN    : std_logic;
...
RD_ADDRESS : process (RDCK_EN, RD_CLK_IN, RST_IN)
      begin
        if RST_IN = '1' or (CNT_EN = '1' and (RDCK_EN'event and RDCK_EN = '0')) then
          RD_BIT_CNT <= 0;
          RD_ADR <= "11111";
          CNT_EN <= '0';  
      
        elsif RDCK_EN = '1' and CNT_EN = '0' then
          if RD_CLK_IN'event and RD_CLK_IN = '0' then
            RD_ADR <= RD_ADR - "1";
            RD_BIT_CNT <= RD_BIT_CNT + 1;

            if RD_BIT_CNT = 31 then
              CNT_EN <= '1';
            end if;              
          end if;        
        end if;
      end process;

Weiss jemand was ich da falsch gemacht habe?? ich verstehe die meldung 
des compilers irgenwie nicht ganz. zeile 75 is die 1. if-anweisung nach 
dem begin. ich möchte die daten schneller aus dem ram lesen als das 
RDCK_EN signal aktiv ist. das RDCK_EN signal ist mit dem WR- signal mit 
einem not() verbunden. das WR-signal schreibt 32 bits in den ram pro 
halbe periode. das auslesen soll schneller gehn. deshalb möchte ich 
nicht das der zähler nach den ausgelesenen bits weiterläuft und erst bei 
einem signalwechsel des RDCK_EN-signals zurück gesetzt wird.

ich hoffe ich habe es nicht zu unklar formuliert :-D

MfG

Andi

Autor: Michael O. (mischu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sieht alles sehr merkwürdig aus.
Im prinzip hast du einen Process gebaut, der von 2 Clocksignalen abhängt 
und zusätzlich beide Clocksignale gegated werden. Sehr unschön!!

Versuch das Teil mal umzubauen, dass du mit der unten abgebildeten 
Struktur klar kommst. Bei Reset sind allen asynchronen Bedingungen zum 
Zurücksetzen beschrieben (kein "'event" verwenden!!) und danach kommt 
erst die Clock mit allen Abfragen/Zuweisungen.

process (clock, reset)
begin
  if(reset = true) then ....
  elsif(rising_edge(clock)) then

  endif;
end process;

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RD_BIT_CNT ist ein speicherndes Element (Register), welches mit RST_In 
zurückgesetzt wird und ebenso bei einer Taktflanke an RDCK_EN 
zurückgesetzt wird.
Der die Übernahme von den Eingängen des Registers erfolgt gesteuert 
durch Flanken an RD_CLK_IN
Das heisst, das Register müsste auf zwei verschiedene Takte reagieren 
und müsste somit zwei Takteingänge haben.
Und sowas gibt´s einfach nicht.

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

Bewertung
0 lesenswert
nicht lesenswert
  if RST_IN = '1' or (CNT_EN = '1' and (RDCK_EN'event and RDCK_EN = '0')) then
  :
  elsif RDCK_EN = '1' and CNT_EN = '0' then
  :
Extreme-VHDL...
Das hast du selber erdacht, stimmts?

Sieh dir mal "übliche" funktionsfähige VHDL-Beschreibungen an, und 
kontrollier die insbesondere auf den Takt. Kannst du deinen 
Beschreibungsstil wiederfinden? Nein?

In dem Reset-Zweig ist Kombinatorik (und zudem ein Takt), das ist sehr 
sehr bedenklich...

Und danach kommt kein Takt, sondern schlichte Kombinatorik...

Das hier ist sind gleich zwei Kombinatorische Schleifen:
  :
  elsif RDCK_EN = '1' and CNT_EN = '0' then
     RD_ADR <= RD_ADR - "1";
     RD_BIT_CNT <= RD_BIT_CNT + 1;
     :
  end if;
  :
Solange RDCK_EN = '1' und CNT_EN = '0' zählt RD_ADR Vollgas runter und 
RD_BIT_CNT Vollgas hoch.
Weil deine Sensitivliste diese beiden Signale nicht enthält, ist die 
Simulation falsch. Dort mehr zum Thema: 
http://www.lothar-miller.de/s9y/categories/36-Komb...

EDIT: vergiss die Kombinatorische Schleife, da war ja nochmal ein Takt 
versteckt...
     if RD_CLK_IN'event and RD_CLK_IN = '0' then

Das beste wäre an dieser Stelle ein Buch:
Reichardt&Schwarz, VHDL-Synthese

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und danach kommt kein Takt, sondern schlichte Kombinatorik...
Nicht ganz, so ein Takt-Konstrukt kommt schon noch:
if RD_CLK_IN'event and RD_CLK_IN = '0' then

Aber das ist natürlich trotzdem nicht synthetisierbar

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

Bewertung
0 lesenswert
nicht lesenswert
Schrotty schrieb:
>>Und danach kommt kein Takt, sondern schlichte Kombinatorik...
> Nicht ganz, so ein Takt-Konstrukt kommt schon noch:
> :
Jaja, gut versteckt ist halb verloren  :-/

Hatte ich dann auch noch bemerkt und im EDIT festgehalten  ;-)

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab´s auch erst beim zweiten Lesen bemerkt :-)
Witzig, oder? wie man was überliest, was man gar nicht mehr sehen will.

Und ich hab wohl offensichtlich zu schnell reagiert und deinen EDIT 
nicht mehr bemerkt.

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.