mikrocontroller.net

Forum: FPGA, VHDL & Co. Vorinitialisieren von Signalen im cpld


Autor: Hartmut F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo miteinander,

ich beschäftige mich rein autodidaktisch mit einem xc9536. Hab Null 
Vorkenntnisse aufzuweisen und gehe einen entsprechend steinigen Weg, 
hoffe daher auf Geduld.

Meine Frage: Wie initialisiert man im cpld eigentlich Signale. Las, daß 
das vergeben von Startwerten nur für eine Simulation Wirkung hat. Die 
bisherige Literatur sagt immer: will man in realer Hardware eine 
Initialisierung haben, muss  man dies anders erreichen. OK. Schön. Und 
konkreter?

Die einzige Idee wäre, alles in einen reset prozess zu stecken und zu 
hoffen, daß der nach dem Einschalten zum richtigen Zeitpunkt durchlaufen 
wird. (der ganze Baustein läuft ja schnell los, aber falls mal fpgas ein 
Thema werden - die brauchen doch unkalkulierbar lange?)

Alternative Vorstellung wäre für mich ein Internes Signal 'cpld' (oder 
fpga) läuft los, was  man in die Sensitivitätsliste eines 
Initialisierungsprozesses schreiben könnte....



Irgendwie überzeugt mich alles nicht.


Ach ja: Konkret möchte ich nur einen Vektor mit 'irgendeinem' 
definierten Wert laden können und den einfach mit einem Taster 
rundschieben.
Das Problem ist aber ja denke ich immer da. Seien es Register, Zustände 
oder was auch immer.

Daher die Frage: Wie mache ich das am besten. Mit meinem cpld und 
allgemein?

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du eine aktuelle ISE Software (Webpack oder Foundation) verwendest, 
wird das Initialisieren unterstützt.
Das heißt, ein Signal das mit

signal mySig : std_logic := '1';

definiert wird, startet mit High.

Kein Grund, also sich Sorgen zu machen.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Las, daß das vergeben von Startwerten nur für eine Simulation Wirkung hat. Die
> bisherige Literatur sagt immer: will man in realer Hardware eine
> Initialisierung haben, muss  man dies anders erreichen.

Theorie und Praxis. Es gibt Standards, die auf VHDL aufbauen und die 
festlegen, was mindestens synthetisierbar ist. Signalinitialisierungen 
sind das nicht. Das bedeutet aber erstmal nur, dass es wieder auf das 
konkrete Synthesetool ankommt, ob diese Initialisierungen nun 
synthetisiert werden oder nicht. Wie Klaus schon sagte ist das bei 
aktueller Xilinx-Software der Fall.

Die Bücher zum Thema orientieren sich oft nur am Standard, selbst wenn 
der schon veraltet ist. Das ist leider etwas praxisfern, weil man 1. 
keinen Zugriff auf Features wie Signalinitialisierungen hat, die in der 
Praxis sehr nützlich sind, und 2. der Standard noch lange nicht 
garantiert, dass die Programme sich auch an ihn halten...

Autor: Hartmut F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke so weit! Der Ernstfall ist allerdings jetzt schon eingetreten - 
ich hänge fest. An folgendem probiere ich rum:
entity test1_code is
    Port ( D : out  STD_LOGIC_VECTOR (7 downto 0);
           T : in  STD_LOGIC);
end test1_code;

architecture Behavioral of test1_code is
signal D_int : STD_LOGIC_VECTOR (7 downto 0):="11100010";
begin

  D<=D_int;

  shiften: process(T)
  begin
   if rising_edge(T) then
      D_int <= (D_int(6 downto 0) & D_int(7));    
   end if;
  end process shiften;


end Behavioral;

Was ich möchte: 8 leds mit einem Muster vorinitialiisieren und per 
Taster einfach immer im Kreis schieben.
Das vorinitialisieren funktioniert (obgleich mir daran nicht gefällt, 
daß ein internes Signal und nicht der Ausgabe Vektor initialisiert 
werden muss.)
Was nicht funktioniert, ist die Funktion.... welch sprachliches 
Konstrukt.
Warum die leds sich -irgendwie- ändern und das auch noch bei Tasten 
Druck und loslassen....da bräuchte ich Rat. Achja den Taster habe ich an 
gclk0 angeschlossen und mit einem rc Glied an einem Schmitt Trigger, 
hoffentlich, entprellt. Passiert auch nur beim niederdruck und leider 
loslassen entwas.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Hartmut F. (Gast)

Der Code ist erstmal OK.

>Taster einfach immer im Kreis schieben.

Taster? Als Takt für einen sauschnellen CPLD?

>gclk0 angeschlossen und mit einem rc Glied an einem Schmitt Trigger,
>hoffentlich, entprellt.

Klingt komisch deine Beschreibung. Poste mal einen Schaltplan unter 
Beachtung der Bildformate.

Entprellung funktioniert wie im Artikel beschrieben.

MFG
Falk

Autor: Hartmut F. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei der Schaltplan. Der Schalter ist bischen fragwürdig, ich habe aber 
in der Eile nichts besseres gefunden, hoffe wird euch klar.

Code soweit ok ist doch was dann habe ich sicher einen Fehler in der 
Schaltung / Aufbau. Wenn das sehr unkonventionell ist, den Taster zum 
takten zu nehmen - wie würde ich es richtig, d.h. 
fehlerunanfälliger/narrensicher machen?

Autor: Hartmut F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte ich editieren, würde ich jetzt schreiben, daß ich die 
invertiereigenschaft nciht bedacht habe und daher auch die 'rising' edge 
irgendwie nicht passst.
Ich werde die von die verlinkte Entprellung ausprobieren und bin recht 
zuversichtlich.

vielen Dank erstmal!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Hartmut F. (Gast)

>takten zu nehmen - wie würde ich es richtig, d.h.
>fehlerunanfälliger/narrensicher machen?

Indem du mal einen Schmitt-Trigger verwendest. Das was du dort hast ist 
KEIN Schmitt-Trigger! Das ist ein einfacher Inverter. Damit geht das 
nicht! Du brauchst einen 74HC_14_ ! Statt 74HC_04_ .

Siehe Entprellung.

Und machs auch mit den Widerständen wie im Artikel. Spart Nerven und 
sinnlose  Nachfragen.

MFG
Falk

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.