www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Wie sieht guter Verilog Code aus?


Autor: I_ H. (i_h)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin

Hab mal angefangen mich in Verilog einzuarbeiten und wollte mal damit 
anfangen ein paar 74LS Bausteine nachzubilden. Soweit hab ich das auch 
erstmal hinbekommen, hab mir den 74LS83 rausgesucht, ist ein 4Bit Adder 
mit Carry In und Out.

Sieht der Code so in ordnung aus, also kann man das so machen, ohne, 
dass man später arge Probleme bekommt? Hab halt keine Lust jetzt 10 
Bausteine zu machen um dann festzustellen, dass ich irgendwas besser 
anders gemacht hätte und das dann bei allen umändern darf.

Ein paar Sachen stören mich im Moment auch noch, ich hätte zB. gern, das 
der Ausgang, wenn sich der Eingang ändert, für die 24ns Delay in 
irgendeinen ungültigen Zustand wechselt. Ich glaub nicht so recht dran, 
dass die Ausgänge alle zum selben Zeitpunkt auf den neuen Zustand 
wechseln...

Hab im Netz schon nach Beispielmodellen zu den 74LS Bausteinen gesucht, 
aber leider nix gefunden (nur VHDL).

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab wirklich keine Ahnung von Verilog, aber Verzögerungen sind 
zumindest auf einem FPGA so nicht synthetisierbar. Deswegen sag ich 
jetz einfach mal schlecht. Für Simulationszwecke ist allerdings mehr 
erlaubt.

Warum hast du dich für Verilog entschieden? Für VHDL gäbe es in 
Deutschland mehr Support.

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will es auch erstmal nur zur Simulation einsetzen. Wollte zB. mal 
'ne Mikromaschiene mit 74LS... und ROMs aufbauen, und das vorher 
komplett in Verilog testen und vll noch ein oder 2 Programme schreiben.

Verilog hab ich benutzt, weil es scheinbar bessere Linux Programme gibt. 
Außerdem entspricht es wohl eher meinem Programmierstiel g (bin 
absoluter C/C++ Verfechter).

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  I_ H. (i_h)

>Ich will es auch erstmal nur zur Simulation einsetzen. Wollte zB. mal
>'ne Mikromaschiene mit 74LS... und ROMs aufbauen, und das vorher

Falscher Ansatz. Mit HDLs in FPGAs kannst und solltest du die 74er 
schnell vergessen. Du beschreibst Logik wie sie gebraucht wird, NICHT 
wie sie die 74er bieten.

>komplett in Verilog testen und vll noch ein oder 2 Programme schreiben.

Auch dabei solltest du die auf synthestisierbaren Code beschränken. 
Delays haben nur was in Testbenches zu suchen. (Ja, es gibt auch 
Speichermodelle etc. mit Delays, das ist aber was anderes)

>Verilog hab ich benutzt, weil es scheinbar bessere Linux Programme gibt.
>Außerdem entspricht es wohl eher meinem Programmierstiel g (bin
>absoluter C/C++ Verfechter).

Naja, wenn das mal ein gutes Omen ist . . . ;-)

MFG
Falk

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast mich falsch verstanden - ich will das mit richtigen 74LS 
Bausteinen aufbauen. Hab mir was ausgedacht das mit 7 Steinchen 
auskommt, und die sollten problemlos auf 2 Steckbretter passen.

Icarus Verilog (frei, quelloffen, für Linux) kann zB. sogar 
synthetisieren, es gibt auch noch andere gute Verilog Sachen für Linux. 
VHDL ist mir nur ghdl bekannt, das trägt allerdings die Versionsnummr 
0.26.

Die Linkliste auf der ghdl Seite ist ziemlich aussagekräftig: 
http://ghdl.free.fr/links.html
Da stehen 2 VHDL Simulatoren, aber 6 für Verilog.

Die Delays entstehen auch in den 74LS Steinen, also müssen die für eine 
ordentliche Simulation rein. Die VHDL Models die ich gefunden hab, 
implementieren auch die Delays.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Verilog-2000 kannst du die Deklaration der I/Os wahlweise auch
direkt in den Modulkopf schreiben. Als C/C++-Verfechter kennst du
sicher den Unterschied zwischen K&R- und ANSI-Funktionsköpfen, so ist
das hier auch:
module TTL74LS83(input [3:0] A, input [3:0] B, input C0,
                 output [3:0] S, output C4);

Autor: I_ H. (i_h)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das macht die Sache schonmal übersichtlicher. Ich hab jetzt mal 
das mit den undefinierten Ausgangszuständen implementiert, jetzt gibt 
er, wenn sich die Eingangswerte ändern, für 24ns undefiniert aus. So 
ganz ideal ist es aber nicht, wenn zB. für 5ns irgendwelche anderen 
Werte anliegen, und danach wieder die ursprünglichen.

Kann man die buf Sachen eigentlich kompakter schreiben?

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verilog scheint dafür ein extra Konstrukt anzubieten:
`timescale 1ns / 100ps
  
module TTL74LS83(input[3:0] A, input[3:0] B, output[3:0] S, input C0, output C4);

  wire[4:0]  Si=A+B+C0;    
  
  assign    S[3:0]=Si[3:0];
  assign    C4=Si[4];
  
  specify
    (C0, A, B *> S) = 24;
    (C0 *> C4) = 17,22;
    (A, B *> C4) = 17;
  endspecify
  
  
endmodule

Damit kann man die Delays von allen Eingängen zu allen Ausgängen 
festlegen, auch getrennt für rise, fall, usw. Mehr als jetzt in dem Code 
da oben steht, gibt das Datenblatt auch nicht her.
Mich wundert allerdings, dass man die Ausgänge während der 
Zustandsänderung nicht in einen ungültigen Zustand setzen kann. Verilog 
kennt >100 verschiedene Möglichkeiten Zeitverzögerungen zu 
spezifizieren, aber das geht scheinbar nicht. obwohl man sogar min, typ 
und max delays angeben kann (statt 24 zB. 20:24:28).

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es in sieben Steinchen passt, dann sollte es auch in einen kleinen 
CPLD passen. Nur so als Denkanstoss.

Rick

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Reiz besteht ja aber grad darin, das mit 74LS aufzubauen (zumindest 
für mich). Außerdem ist eins der 7 Steinchen kein 74LS sondern ein 
FlashRom, und das wird wohl so ohne weiteres nicht in ein CPLD passen.

Vielleicht kommt ja am Ende sowas raus: http://www.mycpu.eu Da ich 
eigentlich mit Informatik zu tun hab, ist CPU Desing für mich nicht neu, 
nur die Umsetzung davon (die hat's aber auch in sich). Aber erstmal 
kommt die Mikromaschine, dann seh ich weiter. Hab das Ding jetzt in 
Verilog am Laufen, im Moment nur mit 6 Steinchen, es fehlt aber noch ein 
Multiplexer damit das Ding mehr als nur statische Sprünge kann.
Momentan sind auch nur 256 Worte addressierbar, mit einem weiteren 
74LS83, 151 und 373 sind's dann aber schon 12 Bit.


Früher oder später werd ich mich auch noch mit CPLDs und FPGAs 
beschäftigen, interessant sind die Dinger auf jeden Fall. Nur die vielen 
Beinchen...

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.