是否可以编写一个可以自动检测输入数据宽度的函数?例如,考虑以下奇偶校验功能:
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/