Verilog 如何从for循环中的genvar值生成字符串?

Verilog 如何从for循环中的genvar值生成字符串?,verilog,system-verilog,Verilog,System Verilog,Xilinx要求为IODELAY和IDELAY\u CTRL定义不同的组。我想使用generate和for loop参数化我的实例 我需要在Verilog属性中添加一个不同的字符串(*IODELAY\u GROUP=“GROUP\u HERE”*) 我该怎么做?我尝试了很多使用宏、函数的方法,但没有成功 `define makegroup(x) `"GROUP_x`" genvar h; for (h=0;h<=3;h=h+1) begin:myfor (* IODELAY_GROUP

Xilinx要求为
IODELAY
IDELAY\u CTRL
定义不同的组。我想使用
generate
for loop
参数化我的实例

我需要在Verilog属性中添加一个不同的字符串
(*IODELAY\u GROUP=“GROUP\u HERE”*)

我该怎么做?我尝试了很多使用宏、函数的方法,但没有成功

`define makegroup(x) `"GROUP_x`"
genvar h;
for (h=0;h<=3;h=h+1) begin:myfor
  (* IODELAY_GROUP = {"GROUP_", h} *)
  (* IODELAY_GROUP = `makegroup(h) *)
  (* IODELAY_GROUP = {"GROUP_", $sformatf("%0h",h)} *)
end

`define makegroup(x)`“GROUP\u x`”
genvar h;

对于(h=0;hIf h小于8位(否则h[7:0]),则
(*IODELAY_GROUP={“GROUP”,h+8'h30}*)
应该可以工作-您几乎做到了,只需要将h转换为ASCII字符谢谢!
h
genvar不是总线吗,更大的数字如何?tostring()函数会很有用。宏是在生成块处理之前解析的。因此,宏在这方面帮不了你。#3(或大卫的答案)是你最好的选择。我不明白你在说什么。
(*…*)
是一个由编译模型的工具解释的属性。你说的是哪个编译器?如果你尝试合成它,合成器将完成工作,如果你模拟,模拟器将完成工作。我很惊讶合成器尝试为此创建总线,它不应该。属性的值是编译的-时间常数表达式。我指的是问题中提到的Xilinx Vivado。与
{}
连接将推断一个位数组/总线而不是一个字符串为
“string”
。这就是我第一次尝试使用宏的原因。如果h小于8位(否则h[7:0]),则
(*IODELAY_GROUP={“groupu”,h+8'h30})
应该可以工作了-你差不多做到了,只需要将h转换成ASCII字符谢谢!
h
genvar不是总线吗,更大的数字呢?一个tostring()函数会很有用。.宏在生成块处理之前就被解析了。所以,宏在这方面帮不了你。#3(或David的答案)是你最好的选择。我不明白你在说什么。
(*…*)
是一个由编译模型的工具解释的属性。你说的是哪个编译器?如果你尝试合成它,合成器将完成工作,如果你模拟,模拟器将完成工作。我很惊讶合成器尝试为此创建总线,它不应该。属性的值是编译的-时间常数表达式。我指的是问题中提到的Xilinx Vivado。与
{}
串联将推断位数组/总线而不是字符串为
“字符串”
。这就是我第一次尝试使用宏的原因。