System verilog SystemVerilog-如何将字符串用作事件或时间?
我有一笔交易,包括:System verilog SystemVerilog-如何将字符串用作事件或时间?,system-verilog,System Verilog,我有一笔交易,包括: string delay; string delay_type; 如果延迟类型=时间,则延迟将具有以下结构: 3ns数字和时间单位 如果延迟类型==事件,则延迟将具有以下结构: @posedge clk@信号的posedge/NEDGE 我如何在bfm中使用此功能 例如,在delay_type==time的情况下,我希望能够做到: 3ns,其中3ns是延迟字符串 在delay_type==event的情况下,我希望能够等待事件,例如等待某个信号的posedge。不能将字符
string delay;
string delay_type;
如果延迟类型=时间,则延迟将具有以下结构:
3ns数字和时间单位
如果延迟类型==事件,则延迟将具有以下结构:
@posedge clk@信号的posedge/NEDGE
我如何在bfm中使用此功能
例如,在delay_type==time的情况下,我希望能够做到:
3ns,其中3ns是延迟字符串
在delay_type==event的情况下,我希望能够等待事件,例如等待某个信号的posedge。不能将字符串直接转换为代码。相反,您将不得不解析字符串$sscanf将是您的朋友,例如:
begin : parse
int n, time;
string unit, edge, signal;
if (transaction.delay_type == "time")
begin
n = $sscanf(transaction.delay, "%d%s", time, unit);
assert (n == 2);
if (unit == "ns")
repeat(n) #1ns;
else
...
end
else
begin
n = $sscanf(transaction.delay, "@(%s %s)", edge, signal);
assert (n == 2);
if (edge == "posedge")
if (signal == "clk")
@(posedge clk);
else
...
else
if (signal == "clk")
@(negedge clk);
else
...
...
end
end : parse
虽然不优雅,但希望您能理解。您最好尝试将正在读取的事务文本文件直接转换为SystemVerilog。或者,如果事件数量有限,那么将它们编码为可以分支为case语句的内容可能是可行的 没有选项将信号粘贴到posedge/negedge?@sarr我不知道,除非您可以使用PLI/VPI执行此操作。所谓信号,我指的是vif.clk,例如vif是虚拟接口。对不起。我不明白你的意思。是否有任何选项可以将虚拟接口信号从组件传递到组件网,例如从序列/事务传递到驱动程序?