是否可以编写一个可以自动检测输入数据宽度的函数?例如,考虑以下奇偶校验功能:

function parity;
  input [31:0] data;
  parity = ^ data;
endfunction

调用parity(data)时,输入数据应限制为32位。

或者,可以编写一个宏,例如`PARITY(data),在其中系统功能$bits可以检测数据的宽度并使该宏与宽度无关。功能是否可以具有相同的灵活性?

编辑:我需要我的代码是可合成的。

最佳答案

您可以创建一个参数化函数。参见LRM中的13.8节。看起来该函数必须在这样的类中声明:

virtual class C #(parameter WIDTH=32);
   static function parity (input [WIDTH-1:0] data);
      parity=^data;
   endfunction
endclass

然后,当您使用bits任务调用函数对其进行参数化时:
assign parity_bit = C#($bits(data))::parity(data);

关于EDA Playground的工作示例。

关于verilog - 宽度独立功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22696838/

10-11 10:40