Verilog中不寻常的函数声明

时间:2013-03-14 17:06:11

标签: function verilog

我完全不习惯使用Verilog,我一直习惯使用VHDL。 为了试图理解,我在互联网上查找了一些代码,并发现了以下关于我认为是函数的声明,而且我根本不理解。

 sext #(.inwidth(1), .outwidth(32))  scc_sext_i0(
                  .i0(paw_0_i0_outport0[32]),
                  .o0(scc_sext_i0_o0));

combine2_wn #(.inwidth0(32), .inwidth1(32))  scc_combine2_wn_i0(
                  .i0(paw_0_i0_outport0[31 : 0]),
                  .i1(scc_sext_i0_o0),
                  .o0(scc_combine2_wn_i0_o0));


combine2_wn #(.inwidth0(32), .inwidth1(32))  scc_combine2_wn_i1(
                  .i0(scc_combine2_wn_i2_o0[31 : 0]),
                  .i1(scc_combine2_wn_i2_o0[63 : 32]),
                  .o0(scc_combine2_wn_i1_o0));

我的问题如下:

  1. 这些功能是映射吗?
  2. 如果是,则不在任何其他较低级别.v文件中定义它们(并且顶级文件中不包含任何库)。那么它们的用途是什么?
  3. '#'符号是什么意思?
  4. “。width(32)”是什么意思?输入32位? (无法在互联网上找到......)
  5. 如果是,“combine2_wn”块应该只有2个输入,为什么每次都有一个输出映射?
  6. 更一般地说,这些是什么类型的连接函数?

    感谢您的时间。

1 个答案:

答案 0 :(得分:4)

这些很可能是模块实例化,而不是函数调用。

你应该在Verilog搜索路径的某个地方的文件中声明一个名为sext的模块和另一个名为combine2_wn的模块。

#()表示您要为指定模块中的parameter分配值。

inwidth模块中有一个名为sext的参数。您为其指定值为1。

网上有很多参考资料。查看verilog wiki站点,例如:

verilog_2001_ref_guide.pdf