我想MYTYPE
使用文本宏定义一个参数,其值由文本宏传递,例如
`define MY_FEATURE(nam,def) parameter nam=def;
接着
`MY_FEATURE(MYTYPE, 1)
但是值是由其他文本宏定义的那些混合的,例如
`MY_FEATURE(NEWTYPE, 2)
`MY_FEATURE(MYTYPE, NEWTYPE)
def
除非在indefine MY_FEATURE
中添加指令点,否则后一种情况将不起作用。
我需要区分这两种不同的情况并自动扩展宏 - 只有当它被定义时,所以我想出了这段代码,但我得到了错误。
`define yea 1
`define nop 0
`define MY_FEATURE(nam,def) `ifdef def parameter nam=`def; `else parameter nam=2; `endif
module test;
`MY_FEATURE(MYTYPE,yea)
initial begin
$display("%d",MYTYPE);
end
endmodule
上面的代码有效并给出了一个1
作为输出。但是,如果我写
`MY_FEATURE(MYTYPE,10)
因为对于其他情况,我需要为参数分配一个实际数字,那么我会得到
`ifdef without a macro name - ignored.
我想要的结果被MYTYPE
分配为 10。有什么办法可以做到这一点?谢谢。
代码可以在这里找到 http://www.edaplayground.com/x/6Jha