so definieren Sie eine mehrzeilige makro in verilog?

Ich bin relativ neu in verilog-a, VHDL-Benutzer), und um meine Fähigkeiten verbessern baute ich meine test-Umgebung unter Verwendung von verilog (meine QC-verwenden Sie Ihre eigenen env).

In meinem env, habe ich also einen master, der Kraft zufällige Reize, die auf den Leitungen (i2c-master).

da ich nicht wirklich wollen, zu einem echten Meister und wollte nur 'gut benahm' Meister, ich habe die folgenden Makros, um mich mit der i2c-Kommunikation:

`define writeChipId(addr)\
sda = 1\
#7500 sda = addr[3];\
#2500 sda = addr[2];\
#2500 sda = addr[1];\
#2500 sda = addr[0];\
#2500;

`define writeData(data)\
sda = data[7]\
#2500 sda = data[6];\
#2500 sda = data[5];\
#2500 sda = data[4];\
#2500 sda = data[3];\
#2500 sda = data[2];\
#2500 sda = data[1];\
#2500 sda = data[0];\
#2500 sda = 1;\
#2500; //time for the slave to answer

`define readData\
#sda = 1\
#20000 sda = 0;\
#2500; //master always answer ACK

mein problem ist, dass, wenn ich versuche, diese Makros bekomme ich einen Compiler Fehler (mit modelsim), dass ich einen syntax-error und ich habe unexpected '[' werden soll ';' für die Verwendung der chipID makro und unerwartetes '#' werden soll ';', wenn über das Lesen\ schreiben von Makros.

des usages ich versuchen (und dabei scheitern) sind

`writeChipId(`chipID)  

und

`writeData(rndData)   

und

 `readData

last, but not least: wenn ich Schreibe, die gleichen Linien, ohne das makro in meinem code, kompiliert er perfekt (habe nur versucht, an einem Ort, nicht wollen, es zu tun für die 12 anderen Orte werde ich diese Makros benötigen...)

jemand eine Ahnung, was ist das problem? ich habe versucht zu spielen mit den Makros nicht mit Glück und auch überprüft werden, haben Sie keine Leerzeichen in der Mitte festsitzen.

sah auch für mehrzeilige makro Beispiele und gefunden, ähnliches was ich getan habe, die nicht eine Antwort geben.

vielen Dank im Voraus an alle repliers

Bearbeiten

etwas, was ich vergessen habe zu sagen: wenn ich das makro und entfernen Sie die Eingabe und verwenden Sie const-Werte anstelle der Eingabe, funktioniert es einwandfrei.

  • Warum haben Sie sich für die Verwendung von multi-line-Makros mit Argumenten statt tasks?
  • wie gesagt, ich bin neu in verilog. Ich bin nicht völlig vertraut mit tasks, und das ist mehr oder weniger die Entwicklung meiner TB (Schritte zu tun, die Aktionen manuell verschoben Makros). Ich bin mir nicht sicher, ich werde in der Lage sein, zu emulieren, die master-und die dominierende CPU-Verhalten, ohne die Makros. Ich mag mich irren, aber das ist alles was ich weiß von der Sprache so weit...
InformationsquelleAutor user2141046 | 2013-08-28
Schreibe einen Kommentar