2016-07-20 10 views
0

Ich möchte ein System Verilog Makro erstellen und übergeben Sie eine Zeichenfolge-Variable. Ich habe einen anderen Thread gelesen, der define to define a string and pass that STRING_NAME verwendet, der funktioniert, aber ich brauche Folgendes.System Verilog Makro mit Zeichenfolgen

`define STRINGIFY(x) `"x`" 

Ich möchte REG_PATH bis zum string umgewandelt werden, die als Parameter verwendet wird.

Bei Verwendung möchte ich die Zeichenfolge mit einer Zeichenfolge-Variable übergeben.

string register_path = "my string" 
`mirror(register_path) 

Ich habe diesen Code nicht versucht, aber ich weiß, Sie eine string Variable auf einen macro passieren kann. Deshalb verwende ich die STRINGIFY(REG_PATH).

Antwort

0

Wenn die Anforderung nur angezeigt werden soll, da die Zeichenfolge bereits in das Makro übergeben wurde und sie direkt verwendet werden kann, ohne dass eine Konvertierung im Display erforderlich ist.

define mirror(REG_PATH) \ 
    $display("%s ``other text",REG_PATH); 

string register_path = "my string"; 

initial 
    `mirror(register_path) 

Auch Zeichenfolgen können direkt verkettet werden.

`define mirror(REG_PATH) \ 
    {REG_PATH," other text"} 
initial 
    $display(`mirror(register_path)); 

Option 3

`define mirror(REG_PATH) \ 
$display("%s otherstring",$psprintf("%s",REG_PATH)); 
initial 
     `mirror(register_path) 

Option 4

`define mirror(REG_PATH) \ 
    $psprintf("%s",REG_PATH) 

initial 
begin 
    $display(`mirror(register_path)); 
end 
+0

Das $ display ist nur für das Beispiel. Ich möchte register_path = "string" zuweisen, aber dies führt nicht dazu, dass die $ -Anzeige "string" anzeigt. Es wird "register_path" angezeigt. –

+0

psprintf kann verwendet werden. Der Inhalt von register_path wird benötigt und sein Wert wird zur Laufzeit festgelegt. 'define mirror (REG_PATH) $ display ("% s anderer String ", $ psprintf ("% s ", REG_PATH)); –

+0

Aber wenn ich 'Spiegel (String_Parameter) und String_Parameter = "Meine Zeichenfolge" aufrufen, werde ich nicht "Meine Zeichenfolge" in der $ -Anzeige gedruckt. Ich bekomme "string_parameter" wie gedruckt. –

0

ich das Problem mit dieser gefunden. Da das Makro eine Kompilierzeitfunktion ist, wird keine Laufzeitübersetzung einer Zeichenfolge ausgeführt. Alles, was ich tun muss, ist, das Objekt anstelle einer Zeichenkette zu übergeben, weil das Ding, das ich übergeben möchte, wie eine Zeichenkette aussieht, aber es ist ein Objekt. `define mirror (x) x.mirror_task() übergibt das Objekt an den Spiegel-Task in der Objektklasse.