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


von I_ H. (i_h)


Angehängte Dateien:

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).

von Karl (Gast)


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.

von I_ H. (i_h)


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).

von Falk B. (falk)


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

von I_ H. (i_h)


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.

von yalu (Gast)


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:
1
module TTL74LS83(input [3:0] A, input [3:0] B, input C0,
2
                 output [3:0] S, output C4);

von I_ H. (i_h)


Angehängte Dateien:

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?

von I_ H. (i_h)


Lesenswert?

Verilog scheint dafür ein extra Konstrukt anzubieten:
1
`timescale 1ns / 100ps
2
  
3
module TTL74LS83(input[3:0] A, input[3:0] B, output[3:0] S, input C0, output C4);
4
5
  wire[4:0]  Si=A+B+C0;    
6
  
7
  assign    S[3:0]=Si[3:0];
8
  assign    C4=Si[4];
9
  
10
  specify
11
    (C0, A, B *> S) = 24;
12
    (C0 *> C4) = 17,22;
13
    (A, B *> C4) = 17;
14
  endspecify
15
  
16
  
17
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).

von Rick Dangerus (Gast)


Lesenswert?

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

Rick

von I_ H. (i_h)


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...

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
Noch kein Account? Hier anmelden.