如果使用';功能';计算';参数';将导致Verilog HDL中的逻辑资源占用

如果使用';功能';计算';参数';将导致Verilog HDL中的逻辑资源占用,verilog,fpga,Verilog,Fpga,我想在参数语句中实现一些复杂的计算,但这会使我的代码很难阅读。我知道其他一些FPGA工程师使用“函数”来实现这一点。代码如下所示: function integer calc_head_len; input [11:0] DFF; begin calc_head_len=0; if(DFF[11]) calc_head_len=calc_head_len + 16; if(DFF[10]) calc_head_len=calc_head_len + SFL

我想在参数语句中实现一些复杂的计算,但这会使我的代码很难阅读。我知道其他一些FPGA工程师使用“函数”来实现这一点。代码如下所示:

function  integer calc_head_len;
input [11:0]  DFF;
begin
  calc_head_len=0;
  if(DFF[11])       calc_head_len=calc_head_len + 16;
  if(DFF[10])       calc_head_len=calc_head_len + SFL_WIDTH;
  if(DFF[9])        calc_head_len=calc_head_len + FDSTI_WIDTH_PORT;
  if(DFF[8])        calc_head_len=calc_head_len + FDSSI_WIDTH_PORT;
  if(DFF[7])        calc_head_len=calc_head_len + BN_WIDTH;
end
endfunction

localparam  FRAME_HEAD_LEN=calc_head_len(DFF);
问题是,首先,正如我所知,“参数”赋值应该只使用常量表达式,而“函数”可以计算变量,那么为什么这样可以呢

其次,“参数”不会占用逻辑资源,因为它们可以在合成阶段计算,但“函数”会在同一时间计算吗?还是会占用额外的资源


谢谢你的帮助

如果函数的参数只是常量或参数,并且函数的返回值完全依赖于这些参数,那么工具将把返回值传播为另一个常量。所以它不会占用任何额外的资源