Irgendwie komm ich grad nicht weiter.. Hab wohl zuviel Stollen gegessen ;) Ich brauche ein 8bit Schieberegister welches mit einer L/H Flanke parallel geladen wird und mit CLK (40Mhz) permanent diese 8Bits an OUT rausschiebt. Die Herausforderung ist nun, das Ganze mit den minimalsten Ressorcen zu machen, denn ich die sparen weil es langsam eng im CPLD wird. Könnt Ihr mir nen Tipp geben, wie ich das anstelle ? Frohe Weihnachten und Danke für Eure Hilfe !!
@ Ralph H. (guru) >Ich brauche ein 8bit Schieberegister welches mit einer L/H Flanke >parallel geladen wird und mit CLK (40Mhz) permanent diese 8Bits an OUT >rausschiebt. 74AC165. >Die Herausforderung ist nun, das Ganze mit den minimalsten Ressorcen zu >machen, denn ich die sparen weil es langsam eng im CPLD wird. Aha, du willst das in einen CPLD pressen. Und warum sagst du das nicht direkt? >Könnt Ihr mir nen Tipp geben, wie ich das anstelle ? Einfach ein Schieberegister halt, braucht 8 Makrozellen.
1 | process(clk) |
2 | begin
|
3 | if rising_edge(clk) then |
4 | if load='1' then -- parallel laden |
5 | sr <= sr_in; |
6 | else
|
7 | sr <= sr(6 downto 0) & '0'; -- seriall schieben |
8 | end if; |
9 | end if; |
10 | end process; |
11 | |
12 | ser_out <= sr(7); |
MFG Falk
Danke Falk !! aber darf ich mal dumm fragen, ob das so wirklich richtig ist ? Bei mir funktioniert das so nicht.. ich bekomm bei ser_out immer 0.
Ralph H. schrieb: > Danke Falk !! aber darf ich mal dumm fragen, ob das so wirklich richtig > ist ? Bei mir funktioniert das so nicht.. ich bekomm bei ser_out immer > 0. Hast Du ihn denn geladen? :) Zeig mal die Testbench.
Hallo Anguel.. ja klar hab ich das SR geladen.. nur der Wert wird nicht übernommen.. Offensichtlich liegt es nur daran, denn das schieben funktioniert doch ! Nur am Anfang 1x bis alle Ausgänge vom SR=0.. Hier noch die Testbench.. Danke sagt Ralph
Du lädst ihn irgendwie nur 1 einziges Mal am Anfang, und zwar mit Nullen. Bei den anderen Werten machst du load nicht mehr auf '1'...
Nein ich lade ihn am Anfang eben gar nicht !! Planmäßig ist der Dateneingang immer "00000000" und wird dann auf "10101011" gesetzt. Dieser Werte sollte ins SR übernommen werden (mit der 0-1 Flanke) von LoadSRZG und der geladene Wert sollte rausgeschoben werden. Da aber das SR bereits komplett mit 0 ist und das Laden nicht geht, wird auch nichts mehr geschoeb :-(.. Ich denke das Laden ist das Problem.
Ralph H. schrieb: > Nein ich lade ihn am Anfang eben gar nicht !! Planmäßig ist der > Dateneingang immer "00000000" und wird dann auf "10101011" gesetzt. > Dieser Werte sollte ins SR übernommen werden (mit der 0-1 Flanke) von > LoadSRZG > und der geladene Wert sollte rausgeschoben werden. Da aber das SR > bereits komplett mit 0 ist und das Laden nicht geht, wird auch nichts > mehr geschoeb :-(.. Ich denke das Laden ist das Problem. Nachdem Du den Dateneingang auf "10101011" setzt, machst Du eben kein loadZGSR <= '1'; Das ist das Problem.
Ne mein Guter das stimmt nicht ! Ich mach sehr wohl nach dem "10101011" am Eingang anliegt, ein Load = '1! nämlich genau 10 ns NACHDEM am Eingang das "10101011" anliegt ! Ist auch im ISIM prima zu sehen.
Ralph H. schrieb: > Ne mein Guter das stimmt nicht ! Ich bin nicht Dein Guter. > Ich mach sehr wohl nach dem "10101011" am Eingang anliegt, > ein Load = '1! nämlich genau 10 ns NACHDEM am Eingang > das "10101011" anliegt ! Ist auch im ISIM prima zu sehen. Unten ist dein Code. Zeigst Du mir bitte, wo genau? Ich sehe es nicht.
1 | -- Stimulus process
|
2 | stim_proc: process |
3 | begin
|
4 | ZGOut <= "00000000" ; |
5 | wait for 100 ns; |
6 | loadZGSR <= '0' , '1' after 10 ns , '0' after 15 ns ; |
7 | ZGOut <= "10101011" ; |
8 | wait for 100 ns; |
9 | ZGOut <= "00000000" ; |
10 | -- insert stimulus here
|
11 | wait; |
12 | end process; |
Anguel S. schrieb: > Ich bin nicht Dein Guter. Sorry, wollte Dir nicht zu nahe treten. Dennoch Danke für die Hilfe! > loadZGSR <= '0' , '1' after 10 ns , '0' after 15 ns ; > ZGOut <= "10101011" ; Nach meiner Interpretation (und auch ISIM Simulation) werden loadZGSR=0 und ZGOut="10101011" parallel geladen. Das Signal loadZGSR wechselt aber nach 10 ns auf 1 und nach 15 ns wieder auf 0 zurück, erzeugt sozusagen einen 1 Impuls. ZGOut bleibt auf "10101011" und müsste ins SR übernommen werden.
Ralph H. schrieb: > Nach meiner Interpretation (und auch ISIM Simulation) werden > loadZGSR=0 und ZGOut="10101011" parallel geladen. > Das Signal loadZGSR wechselt aber nach 10 ns auf 1 und nach 15 ns > wieder auf 0 zurück, erzeugt sozusagen einen 1 Impuls. > ZGOut bleibt auf "10101011" und müsste ins SR übernommen werden. Ok, tut mir leid. Du hast Recht, das "after" hatte mich etwas verwirrt. Kannst du auch den Register-Code posten?
Hallo.. Du meinst den Code der zu testenden Datei oder ? Hier ist er...
1 | process(clkVideo) |
2 | begin
|
3 | if rising_edge(clkVideo) then |
4 | if loadZGSR= '1' then -- parallel laden |
5 | SR_ZGOut <= ZGOut ; |
6 | else
|
7 | SR_ZGOut <= SR_ZGOut(6 downto 0) & '0'; -- serial schieben |
8 | end if; |
9 | end if; |
10 | end process; |
11 | SROut <= SR_ZGOut ; -- Ausgänge laden nur zum Test |
12 | VideoOut <= SR_ZGOut(7); |
13 | -- fertig Videodaten ausschieben |
14 | |
15 | end VERHALTEN; |
Ralph H. schrieb: > Ich denke das Laden ist das Problem. Ja, klar, denn wenn du das Ladesignal nur für 5 ns aktivierst und in diesen 5 ns keine Taktflanke kommt...
1 | constant CLK20_period : time := 10 ns; |
2 | :
|
3 | loadZGSR <= '0' , '1' after 10 ns , '0' after 15 ns ; |
4 | |
5 | |
6 | :
|
7 | if loadZGSR= '1' then -- parallel laden |
8 | SR_ZGOut <= ZGOut ; |
doch Lothar.. es kamen Taktflanken,, aber auch mal testweise die Verlängerung des 1 Impulses auf 30ns ändert nichts... Bin bald am Verzweifeln hier.. das kann doch ni so schwer sein ???
Die Component hat doch nirgendwo einen Eingang für das Load-Signal?!
Ralph H. schrieb: > Bin bald am Verzweifeln hier.. das kann doch ni so schwer sein ??? Zeig doch mal die gesamte Datei (und am besten auch die aktuelle TB) als Anhang... > es kamen Taktflanken,, ... und/oder mach mal einen Screenshot von der Simulations-Waveform.
Genau, schick mal die kompletten Dateien, weil der Fehler wahrscheinlich in einer Kleinigkeit steckt.
Ralph H. schrieb: > Ich brauche ein 8bit Schieberegister welches mit einer L/H Flanke > parallel geladen wird und mit CLK (40Mhz) permanent diese 8Bits an OUT > rausschiebt. Also nur beim kurz drueber gucken faellt mir auf: Du schiebst in dein Schieberegister eine '0' nach, also nach ein paar Clocks kommen dann auch Nullen raus... Und wie schon angemerkt, du hast keinen 'load' Eingang in deine Komponente...
@Berndl... also ich hab sehr wohl ein load (nämlich mein loadZGSR) !! Auch die 0 im Schieberegister nachzuschieben ist richtig ! aaaaber.. ich lade ja normalerweise das Schieberegister mit nem Wert der rauszuschieben ist. Nur genau eben das laden geht nicht :-( Hier meine Daten... Habt ihr noch nen Tipp wie ich das Bild von ISIM einfacher als über nen Hardcopy hier rauskriege?
Ralph H. schrieb: > @Berndl... also ich hab sehr wohl ein load (nämlich mein loadZGSR) !! loadZGSR geht aber nicht in den UUT der Testbench rein. Dein Unit Under Test bekommt also nicht mit, dass sich das Signal ändert. Du hast das Signal wahrscheinlich nachträglich zur Komponente zugefügt und die Testbench nicht upgedatet.
Juchhu.. Anguel.. Danke ! das wars nämlich... grrrrrr.. So ne Kleinigkeit in der Testbench... Menno.. Vielen Dank !!
Ralph H. schrieb: > Juchhu.. Anguel.. Danke ! das wars nämlich... grrrrrr.. So ne > Kleinigkeit in der Testbench... Menno.. Vielen Dank !! Kann passieren ;) Freut mich, dass das endlich gelöst ist! Frohe Restweihnachten und viel Erfolg noch. Grüße, Anguel
Jo Dir auch .. ich bin ja grad an meinem Hobby und hab Freude :)
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.