Skip to content

DC修改

DC修改

这三个文件正好代表了 Design Compiler (DC) 工作的 “指挥”、“规则”和“记录” 三个核心层面。对于你的 32 位乘法器设计,理解这三个文件的关系非常关键。

以下是详细的通俗解释:

1. run.tcl —— 总指挥 (Flow Script)

这是你需要“喂”给 DC 的​主脚本。它告诉 DC 按什么顺序干活。

  • 作用: 自动化整个综合流程。你不需要一行行敲命令,运行这个脚本,DC 就会自动做完所有事。

  • 代码解读:

    • read_db sc_max.db​: ​准备工具。读取工艺库(比如你的 SMIC .18 库)。
    • read_verilog my_design.v​: ​读取图纸。读入你的 Verilog 代码。
    • source ... lab4.con​: ​读取规则。加载下面的约束文件,告诉 DC 你的性能要求。
    • write_script ... lab4.wscr​: ​保存现场​。把当前 DC 理解的所有设置保存成一个新脚本(即下面的 lab4.wscr)。
    • write -format ddc ...​: ​保存结果​。保存综合后的数据库文件 (.ddc)。

对你的意义: 你需要编写一个类似的脚本(或者修改这个),把里面的 my_design.v​ 改成你的 mult32.v,把库文件改成你的 SMIC 库路径。

2. lab4.con —— 规则书 (Constraints File)

这是最重要的文件,通常由设计师(你)亲手编写。它定义了电路必须满足的“KPI 指标”。

  • 作用: 告诉 DC:“我要跑多快(频率)”、“输入信号来得有多晚”、“输出信号要送多远”。

  • 代码解读:

    • create_clock -period 3.0 [get_ports clk]​: 时钟定义 。定义时钟周期为 3.0ns(即 333MHz)。对于你的组合逻辑乘法器,这里主要用于设定虚拟时钟来限制最大延迟。
    • set_clock_uncertainty ...​: 时钟抖动 。预留一些时间余量给时钟的不稳定性(Jitter)。
    • set_input_delay ...​: 输入延时 。告诉 DC 外部信号不是立刻到的,比如 data* 端口信号会在时钟沿后 0.45ns 才到达。
    • set_output_delay ...​: 输出延时 。告诉 DC 输出信号必须在下一级电路需要之前多久准备好。
    • set_max_area 540​: 面积约束 。限制电路的最大面积不能超过 540 个单位。

对你的意义: 你的 32 位乘法器是一个纯组合逻辑(假设没有流水线),你需要用 set_max_delay​ 或者定义一个虚拟时钟 (create_clock -period ...​) 配合 set_input/output_delay 来限制从 A/B 到 P 的运算时间。

3. lab4.wscr —— 现场记录 (Write Script / Echo Script)

这是一个由 DC 自动生成的文件(在 run.tcl​ 里由 write_script​ 命令生成),通常​不需要你写

  • 作用: 它是 DC “消化”完你的约束(lab4.con​)后,吐出来的“理解报告”。它把所有的通配符(比如 data*​)都展开成了具体的每一根线(比如 data1[4]​, data1[3]…)。

  • 为什么不一样?

    • lab4.con​ 是给人写的,为了方便用了 data* 这种简写。
    • lab4.wscr​ 是机器生成的,它必须精确到每一位,所以看起来非常啰嗦,列出了 Cin2[2]​ 、out3[4] 等所有端口的具体约束。
  • 用途: 主要用于​调试。如果你发现综合结果不对,可以打开这个文件,看看 DC 是否真的把约束加到了每一根线上。

对你的意义: 暂时忽略它。你只需要关注如何写好 .con​ 文件,.wscr 只是一个结果验证文件。


总结:你的 32 位乘法器该怎么用这三个文件?

  1. 复制并修改 run.tcl

    • read_verilog 后面的文件换成你的乘法器代码。
    • source 后面的文件换成你新建的约束文件。
  2. 参考 lab4.con编写 mult32.con

    • 这是你需要花精力的地方。
    • 对于组合逻辑乘法器,你的 .con​ 文件可以写得比 lab4.con 简单:

1
2
3
4
5
6
7
# 定义一个虚拟时钟,假设我们要跑 100MHz (10ns)
create_clock -period 10 -name v_clk
# 设定输入输出延迟,强迫 DC 优化路径
set_input_delay -max 0 -clock v_clk [all_inputs]
set_output_delay -max 0 -clock v_clk [all_outputs]
# 或者直接用组合逻辑最大延迟约束
set_max_delay 10 -from [all_inputs] -to [all_outputs]
  1. 运行: 在 DC 命令行输入 source run.tcl,然后坐等结果。