0

为了试图理解,我在互联网上查找了一些代码,并找到了以下我认为是函数的声明,而我根本不明白。

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. 是什么.inwidth(32)意思?32位输入?(在网上找不到……)
  5. 如果是,这些combine2_wn块应该只有 2 个输入,为什么每次都映射一个输出?

更一般地说,这些是任何类型的连接函数吗?

4

1 回答 1

4

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

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

#()parameter表示您正在为命名模块内的 s赋值。

inwidth模块中有一个参数命名sext。您正在为其分配值 1。

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

于 2013-03-14T17:12:31.207 回答