Hallo Zusammen, ich habe da ein kleines Problem mit meinem Projekt... Das Signal dIn_neu ist in der Simulation immer mit einem 'X' versehen, also Buskonflikt, aber ich finde meinen Fehler nicht, da der SD-Wandler alleine getestet funktioniert und auch der Sinusgenerator geht, kann mal einer draufschauen, ob er einen Fehler findet, danke schonmal
Es ist etwas schwierig sich durch deine Files durchzusehen, ich denke es wäre gut die Datei und die entity jeweils gleich zu benennen. (z.B.: Entity "SDModulator" == Datei "SDModulator.vhd"). nun sah ich bei kurzem durchsehen dies hier:
1 | -- Erzeugen des D-FlipFlop zum Zwischenspeichern --
|
2 | |
3 | with clk select |
4 | dIn_alt <= dIn_neu when '1', |
5 | dIn_alt when others; |
Da wird, so glaub ich, kein Flipflop daraus, sondern ein Multiplexer der durch "clk" gesteuert wird. ein Flipflop sieht eher so aus:
1 | process begin |
2 | wait until rising_edge(clk); |
3 | dIn_alt <= dIn_neu; |
4 | end process; |
Weitere Beispiele hier http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess
Morgen, nein da wird schon auch ein flip-flop draus. Aber es gibt da einen Undefine zustand am Anfang den ich nicht mehr los werde.
Florian Z. schrieb: > nein da wird schon auch ein flip-flop draus. Garantiert niemals!
1 | -- Erzeugen des D-FlipFlop zum Zwischenspeichern --
|
2 | with clk select |
3 | dIn_alt <= dIn_neu when '1', |
4 | dIn_alt when others; |
Was passiert denn bei dieser Beschreibung mit dIn_alt, wenn clk='1' ist und dIn_neu sich ändert? bko schrieb: > Da wird, so glaub ich, kein Flipflop daraus, sondern > ein Multiplexer der durch "clk" gesteuert wird. Schlimmer noch: es ist ein zurückgekoppelter Multiplexer. Besser bekannt und berüchtigt unter dem Namen Latch... :-o >>> immer mit einem 'X' versehen > Undefine zustand am Anfang Ja, was denn jetzt: 'U' oder 'X'?
Florian Z. schrieb: > Aber es gibt da einen Undefine zustand am Anfang den ich nicht mehr los > werde. Probier mal das:
1 | Entity DDFS is |
2 | Port ( CLK : in std_logic; |
3 | Freq_Data : in std_logic_vector (7 downto 0); |
4 | Dout : out std_logic_vector (7 downto 0):=(others=>'0') |
5 | );
|
6 | end DDFS; |
Und überleg dir dann, warum das hilft... Und ersetz diese Zeilen:
1 | -- Erzeugen des D-FlipFlop zum Zwischenspeichern --
|
2 | with clk select |
3 | dIn_alt <= dIn_neu when '1', |
4 | dIn_alt when others; |
Durch diese hier:
1 | -- Erzeugen des D-FlipFlop zum Zwischenspeichern --
|
2 | dIn_alt <= dIn_neu when rising_edge(clk); |
Erst dann passt der Kommentar... :-/ BTW: Bei sowas hier:
1 | Sub: process ( dOutm_conv, dIn_conv) |
2 | begin
|
3 | dIn_temp <= '0' & dIn_conv - dOutm_conv ; |
4 | end process; |
Kannst du drei Zeilen streichen:
1 | dIn_temp <= '0' & dIn_conv - dOutm_conv ; |
@lkmiller ja der ise (10.1) macht daraus ein Latch: >with clk select > dIn_alt <= dIn_neu when '1', > dIn_alt when others; Staun - hab das eben mal eingegeben >-- Erzeugen des D-FlipFlop zum Zwischenspeichern -- > dIn_alt <= dIn_neu when rising_edge(clk); ... und das ise erzeugt ein Flipflop, tja man lernt nicht aus: Aber hier noch ein Zusatz zur Schrittkette http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess (aus dem ise-xst-Manual 10. Seite 494) [vhdl] architecture ARCH of EXAMPLE is begin process begin SEQ_LOOP : loop wait until CLK'EVENT and CLK = '1'; exit SEQ_LOOP when RST = '1'; RESULT <= DATA1; wait until CLK'EVENT and CLK = '1'; exit SEQ_LOOP when RST = '1'; RESULT <= DATA2; wait until CLK'EVENT and CLK = '1'; exit SEQ_LOOP when RST = '1'; RESULT <= DATA3; wait until CLK'EVENT and CLK = '1'; exit SEQ_LOOP when RST = '1'; RESULT <= DATA4; end loop; end process; [\vhdl] Die Beispiel geb ich bei Gelegenheit mal ins unser S..teures Synopsys Synthese tool ein ... end ARCH;
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.