【问题标题】:Concatenate signal names in systemverilog using macro使用宏连接 systemverilog 中的信号名称
【发布时间】:2017-10-12 16:47:43
【问题描述】:

我正在尝试连接 systemverilog/verilog 中的两个字符串以创建信号名称。 在我下面的代码 sn-p 中,lhs 端似乎工作正常,但 rhs 端却不行。 该工具给出错误“尚未声明bittemp”。

如果我将硬编码值“0”传递给“clno”参数,则它适用于 lhs 和 rhs。

enter code here
`define strcat_assign_macro(lhs_prestr,lhs_poststr,rhs_prestr,rhs_poststr,clno)  \
 assign lhs_prestr``clno``lhs_poststr = rhs_prestr``clno``rhs_poststr;

module tempmod;
  wire a0temp,b0temp;
  wire a1temp,b1temp;
  wire a2temp,b2temp;

  assign b0temp =1'b1;

  genvar i;
  generate
    for(i = 0; i < 3; i++)
    begin
      `strcat_assign_macro(a,temp,b,temp,i)
    end
  endgenerate


  initial begin
   $display (a0temp );
  end

endmodule

【问题讨论】:

  • 扩展后您的宏将如下所示:assign aitemp = bitemp; 将替换 temp 代替 lhs_poststr 和 rhs_poststr,i、a 和 b 将替换其他部分。所以,你需要一个不同的方案。

标签: macros verilog system-verilog


【解决方案1】:

在解析任何 Verilog/SystemVerilog 语法之前,宏会被扩展。使用一系列电线。

【讨论】:

  • 感谢 Dave 的快速回复。不幸的是,“rhs”是一个 DUT 信号,它不是一个阵列。你知道我可以通过其他方式实现这一目标吗?
  • 如果您需要使用本机语法,我认为您会遇到困难。如果你愿意走 vpp 路线,你可以实现你正在寻找的东西。这些天很难找到链接(它是旧的东西),但似乎有一个(有点)维护的版本在github.com/balanx/vbpp
  • 在您的示例中,模块没有端口。所有“临时”都在模块内部。它在现实中看起来如何?此外,您的循环只有 3 次迭代。是这个吗?
【解决方案2】:

由于 `defines 在编译之前被扩展,你会得到这些错误。

避免这种情况的一种方法是使用脚本来自动化定义用法并在 Verilog 文件中使用相同的定义。

这是我为此目的而制作的示例 shell 脚本。这是一个基本脚本,但我认为足以让您了解。

#!/bin/csh

set b='`'
set a=`egrep -n "^ *${b}strcat_assign_macro" $2 | cut -d: -f1`
set line=`egrep -n "${b}strcat_assign_macro" $2 | cut -d: -f2`

foreach i (`seq $1`)
  set c=`expr $a + $i`
  sed -i "${c}i${line}" temp.ip
  sed -i "${c}s/^\(.*\), *[0-9]* *)/\1, ${i})/g" temp.ip
end

这是脚本前后的文件。

// Before 
karan
shah
   `strcat_assign_macro(b, temp, a, temp, 0)
maheshbhai

// ./temp.sh <Extra Define Lines> <FileName>
./temp.sh 2 input.v

// After
karan
shah
   `strcat_assign_macro(b, temp, a, temp, 0)
`strcat_assign_macro(b, temp, a, temp, 1)
`strcat_assign_macro(b, temp, a, temp, 2)
maheshbhai

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多