Graag zou ik include files willen gebruiken in verilog om het volgende te doen:


'include "declaration.h"
module foo(
	input clock,
	input reset,
	output [baz:1]bar
);

de include file ("declaration.h") ziet er uit als:


parameter baz = 5;

Ik zou dan in een aantal modules deze file kunnen includen en als ik de waarde "baz" in alle modules zou willen wijzigen hoef ik dat alleen maar in de include file te doen.

Het probleem: Quartus (synthesizer die ik gebruik voor verilog) geeft aan dat dit niet kan in verilog en dat ik system verilog moet gebruiken.

Maar wat is dit voor een onzin? ik wil alleen dat de compiler "baz" substitueerd voor het juiste nummertje uit de include file. Is er een andere manier om het te doen?

Kijk eens onder settings -> analysis and synthesis settings -> verilog HDL input. Daar heb je de keuze uit drie verilog-versies. Geen idee of dat relevant is.

En d'r zit ergens in DE-1 -example directories ook een voorbeeld hoe je met libraries moet werken.

Ah ja dat helpt een beetje.. verder heb ik de file hernoemd van verilog file (*.v) naar system verilog (*.sv)
De parser gaat nu niet meer over zijn nek... dus ik denk dat het wel redelijk is opgelost.
Ben verder wer benieuwd in hoe verre dit synthetiseerbare code oplevert.... maar goed dat zullen we dan wel weer zien

dat doe je eigenlijk zo niet ...

je maakt die 'baz' een parameter en geeft die een default waarde in je module.

op je toplevel override je dan de parameter gewoon.


parameter baz =10
module blah (input [baz:0] ingang ....)
endmodule

nu kan je die module synthetiseren als alleenstaand blok en uittesten. als je later die module nodig hebt met een ander getal voor 'baz' dan geef je bij instantiering dat gewoon op.

je kan met defparam werken



defparam mijn_blah.baz =100;
blah mijn_blah();

of het gewoon direct meegeven tijdens instantiering. de syntax moet je eens opzoeken. vroege rmoest dat in juist volgorde maar nu kan je met named assignments werken ook ( v2001 en later)
ik doe nooit geen instantiering op die manier. toplevel voor mij altijd schematic bij mij.

Zo schrijven moet werken:


module foo(
	input clock,
	input reset,
	output [baz:0]bar
);

`include "declaration.h"

assign bar[baz:0] = {clock,reset};

endmodule

En de include file zelf:


parameter baz = 5;

Ik heb hier wat moeten toekennen aan de uitgangen anders hebben de uitgangen geen drivers.
Wijzigen van de parameter in de declaration.h file zal het aantal uitgangen ook wijzigen na compilatie.

[Bericht gewijzigd door fotoopa op (13%)]