是否有可能附加宏参数的值而不是字面上附加它?

时间:2014-10-19 19:35:44

标签: macros verilog

我有一个宏,我想以下列方式使用:

`define assign_m(CH, INT_NUM) \
    assign dp_input``CH``_if.master_mp.sigA[INT_NUM] = some_signal[CH][INT_NUM];

generate
   for(genvar i=0; i<2; i++) begin
      for(genvar j=0; j<2; j++) begin
         `assign_m(i,j)
      end
   end
endgenerate

我想将这样的结构扩展为:

assign dp_input0_if.master_mp.sigA[0] = some_signal[0][0];
assign dp_input0_if.master_mp.sigA[1] = some_signal[0][1];
assign dp_input1_if.master_mp.sigA[0] = some_signal[1][0];
assign dp_input1_if.master_mp.sigA[1] = some_signal[1][1];

但当然不会发生这种情况,因为Verilog会逐字地附加变量j而不是它的值(§22.5`define,`undef和`undefineall of {{ 3}},第644页。

如何在宏中附加参数的值?

1 个答案:

答案 0 :(得分:0)

如果可以将dp_input_if创建为数组并使用索引版本,则可以将其写为:

integer i;
integer j;

always @* begin
  for(i=0; i<2; i++) begin
    for(j=0; j<2; j++) begin
       dp_input_if[i].master_mp.sigA[j] = some_signal[i][j];
    end
  end
end