首页 > 解决方案 > 使用相同的单元名称编译 + 精心设计

问题描述

我正在编译一个使用 2 个 lib 文件中定义的单元的设计。

在两个 lib 文件中都有一个单元格,例如下面的 : ff,具有相同的名称,这会导致编译器失败。

我试过的:

  1. 编辑 lib_file1.v - 将 ff 名称更改为 d_ff(呃!lib_file1.v 是第三方,我们不想碰它)
  2. 包含没有 -v 选项的文件。这可行,但随后会编译大量冗余单元。
  3. 编译成不同的库 - 这不起作用,因为失败处于细化阶段

有没有办法告诉编译器只使用在它实例化的 lib 文件中定义的单元格,而不编辑 lib_files。

文件列表如下所示:

top.v
-v lib_file1.v
-v lib_file2.v

文件 lib_file1.v

//other cells which use ff
module slow_ff(....);
    ............
    ff i_ff(D, Q, CP);
endmodule

module ff(D, Q, CP);
.....
endmodule

文件 lib_file2.v

//other cells which use ff
module fast_ff(...);
    ..........
    ff i_ff(D, Q, CP, EN);
endmodule

module ff(D, Q, CP, EN)
.....
endmodule

编辑:top.v 不直接实例化 ff,它使用“包装单元”(例如,slow_dff 和 fast_dff)。问题是,如果首先编译 lib_file1.v,链接器将使用 lib_file1.v 中定义的 ff 也用于 lib_file_2.v

标签: verilog

解决方案


Verilog中有配置,但我认为解决问题的简单方法可能是:

module top (...);
  ...
  `uselib file=lib_file1.v
  ff ff1 (...);
  `uselib file=lib_file2.v
  ff ff2 (...);
  ...
endmodule

推荐阅读