Hallo Community, beim Beschreiben (VHDL) meiner ersten Hardware bin ich auf folgendes Problem gestoßen: In meinem Top-Modul (beachte Anhang) möchte ich über einen Inout-Port Daten transferieren. Durch die externen Synchronisationssignale FMC_WR und FMC_RD (low-aktiv) soll der Lese und Schreibzugriff geregelt werden. Im Submodul "u_parallelbus_read" werden die Daten per Flankenerkennung registriert und in einen Outputbuffer für die weitere Verarbeitung gespeichert. Jetzt bekomme ich aber folgende, unerklärliche Warnings: WARNING:Xst:737 - Found 1-bit latch for signal <FMC_WR_FMC_WR_DLATCH_878_q>. Latches may be... WARNING:Xst:1710 - FF/Latch <Z_5_o_FMC_WR_DLATCH_883_q> (without init value) has a constant value of 0 in block <parallelbus_top> was nach eigener Recherche auch noch dies zur Folge hat: Clock Information: ------------------ -----------------------------------------------------+------------------ -----------------------+-------+ Clock Signal | Clock buffer(FF name) | Load | -----------------------------------------------------+------------------ -----------------------+-------+ FMC_WR_FMC_RD_AND_4580_o(FMC_WR_FMC_RD_AND_4580_o1:O)| NONE(*)(FMC_WR_FMC_WR_DLATCH_878_q) | 5 | u_parallelbus_read/Rise | NONE(u_parallelbus_read/Outputstorage_7)| 8 | CLKIN_P | DCM_SP:CLKFX | 7 | u_converter/Fall | BUFG | 70 | -----------------------------------------------------+------------------ -----------------------+-------+ (*) This 1 clock signal(s) are generated by combinatorial logic, and XST is not able to identify which are the primary clock signals. Was letztendlich zur Folge hat das mein Programm mit Gatterlaufzeit in der Simulation nicht mehr funktioniert. Hat jemand vielleicht eine Idee wo der Fehler liegt? Viele Grüße FJS
FJ S. schrieb: > Hat jemand vielleicht eine Idee wo der Fehler liegt? Dein erster Fehler ist, ein VHDL-File von 10kB rar-komprimiert hochzuladen. Wenn man dir helfen will, muss man erst runterladen und entpacken, bevor man den Code tatsächlich sieht ;-) Was das Latch angeht: in folgendem Teil setzt du FMC in zwei Fällen entweder auf 0 (im elsif) oder auf Z (im else). Aber in der ersten if-Abfrage machst du keine Zuweisung an FMC (sollte auf Z gehen). Also muss sich in diesem Fall der Wert von FMC "gemerkt" werden. Und weil dieses merken nicht in einem getakteten Prozess abläuft, findet es nicht in einem Flip-Flop statt sondern in einem Latch.
1 | -- if µC wants to write data, write from FMC to FMC_in
|
2 | if ( FMC_WR = '0' and FMC_RD = '1' )then |
3 | FMC_in <= FMC; |
4 | -- if µC wants to read data, write from FMC_out to FMC
|
5 | elsif ( FMC_WR = '1' and FMC_RD = '0' )then |
6 | FMC <= FMC_out; |
7 | FMC_in <= (others => '0'); |
8 | else
|
9 | FMC_in <= (others => '0'); |
10 | FMC <= (others => 'Z'); |
11 | end if; |
Also: wenn du es wirklich unbedingt ohne Takt machen willst, dann muss auch im ersten Teil eine Zuweisung an FMC rein (FMC<= (others => 'Z')) Auch bei der Flankendetektion hast du noch Probleme. Deine eigentliche Flankendetektion nach Lothars Vorlage ist schon mal ganz gut:
1 | EdgeDetection : process |
2 | variable Shiftreg : std_logic_vector (1 downto 0) := "00"; |
3 | begin
|
4 | wait until rising_edge(clk_read); |
5 | Rise <= not shiftreg(1) and shiftreg(0); -- detect edge |
6 | --Fall <= not shiftreg(0) and shiftreg(1);
|
7 | Shiftreg := Shiftreg(0) & not WR; -- read input shift register |
8 | end process EdgeDetection; |
Aber dann benutzt du in einem anderen Prozess Rise als Takt, und das ist Quatsch: Rise ist ein normales Signal, dessen Pegel du abfrägst. Es geht bei einer Flanke von WR genau für einen Takt (von clk_read) auf high. Also nutze in ReadCheck_func ebenfalls clk_read als Takt und bau dann eine Abfrage "if Rise='1' then..." ein.
Hui, das ging ja flott. Vielen Dank für die schnelle Antwort, alle Warnings wurden beseitigt und ich hab wieder was dazu gelernt. VG
Achim S. schrieb: > Wenn man dir helfen will, muss man erst runterladen und entpacken, bevor > man den Code tatsächlich sieht ;-) Wenn das auf dem Handy nur auch ginge... BTW: wenn hier im Forum eine *.vhd oder *.vhdl Datei angehängt wird, dann gibts Syntaxhighlighting gratis.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.