Xilinx Verilog`定义宏来替换wire / reg名称

时间:2015-03-27 15:04:42

标签: macros preprocessor verilog

我们正试图在verilog中执行以下操作:

`define MY_SUFFIX suffix
wire prefix_`MY_SUFFIX;
assign prefix_`MY_SUFFIX = 1'b0;

但是,预处理器似乎没有做正确的替换。 assign行上存在语法错误(“后缀'附近的语法错误),但如果assign ...行被注释掉但wire ...行不是',则没有语法错误t。

在注释掉assign...行的情况下模拟这个(为了避免语法错误),会给出编译错误“prefix_是一个未知类型”。

显然我们缺少一些东西,但这种行为没有意义!

2 个答案:

答案 0 :(得分:1)

在edaplayground上使用各种模拟器运行它会产生混合结果: http://www.edaplayground.com/x/A84

从根本上说,我不相信Verilog需要尊重宏观周围的空间(或缺乏空间)。它不工作的地方可能会扩展为:

wire prefix_ suffix; // space in middle, syntax error

答案 1 :(得分:0)

只是偶然发现了这个帖子,因为我有同样的问题。我的解决方案是创建一个也接受前缀作为输入的宏。 看起来不太好,但是可以用:

apiVersion: extensions/v1beta1
kind: Ingress
...
spec:
  backend:
    serviceName: [service-name]
    servicePort: 80

或者为了提高可读性:

`define MY_SUFFIX(name) ``name``suffix
wire `MY_SUFFIX(prefix_);
assign `MY_SUFFIX(prefix_) = 1'b0;