数字IC后端设计实现流程之initial design

数字IC后端设计实现流程之initial design

前端提供的文件

  • 门级网表 (Gate Level Netlist)

数字前端工程师或者是 R2N 的同事在 release 东西给后端工程师做 PR 时,一定会 release 一个门级网表,这个 netlist 是基于 RTL 或者 gtech 文件进行逻辑综合后产生的一个门级网表。这个网表包含了当前 block 的所有 sub-module,通过 hierarchy 的调用方式,最后有个顶层的设计,这个顶层名字就是我们所说的设计 module 名字。另外还有指出了 block 有哪些输入端口,输出端口,block 中用到了标准单元库中的那些 cell。

  • 时序约束文件(Timing Constraint)

时序约束文件在整个数字 IC 设计过程的作用是一样的。它都是 guide 工具基于某个特定的目标去做逻辑和时序的优化。一个时序约束文件都需要含有以下几个部分:

Crete_clock –name CLK -period 10 [get_ports clk]

Set_clock_uncertainty -setup 0.1 [all_clocks]

Set_max_transition –max 0.2 [current_design]

Set_max_transition 0.1 -clock CLK

Set load 50 [all_outputs]

Set_max_fanout 40 [current_design]

Set_dont_touch $cells

Set_input_delay –clock -max [get_ports **]

Set_input_delay –clock -min [get_ports **]

Set_output_delay -clock -max [get_ports **]

Set_output_delay -clock –min [get_ports **]

Set_multicycle_path 3 -setup -end -from ***

Set_multicycle_path 2 -hold -end -from ***

Set_false_path -from ** -to **

Set_clock_group –async -name ic-backend -group {A B} -group {C D}

  • Memory 的 lef 文件

前端工程师在 compiler 对应 memory 的时候会产生对应的一些文件,比如 LEF,DB 和 GDS 文件等。这个 Memory lef 是提供给后端工程师做 milkyway 用的。

  • 逻辑综合(Design Compiler)后 pre-layout 的信息统计

正规的 flow 中,在 release gate level netlist 时都需要附上逻辑综合后的纯逻辑的面积,memory 的面积,io port 数量,IO PAD 数量以及 ip 等相关信息。因为这些信息能够帮助数字后端工程师更快速地完成模块的面积估算,特别是某个 stage RTL 改动比较大的时候。

  • Prime Time QA report

资深的工程师在 release netlist 之前,一定会自己在 Prime time 中对设计进行 QA,检查当前 design 的 timing 是否可接受,检查 memory 是否存在 min period 等问题。

Foundary 提供的文件

  • 工艺库 lef 文件,timing model db 文件

Lef 文件以及 db 文件主要用来后续做 Milkyway library 和 NDM library。

  • 工艺的 tech file 文件

Techfile 文件一般是由 Foundary 提供的,当然也有是第三方 Vendor 提供的,比如 ARM 可能会提供他们自己的 standard cell 和 memory 的 library 给客户使用。

这个 tech file 文件主要是提供给 APR(Auto Place And Route)工具使用,guide 工具完成绕线使用。这个文件会给出每层 Metal 的 min width ,min space 以及 via 的相关定义等信息。

这里留一个思考题: 既然这个 tech file 规定了金属层,via 间的 rule 信息了,能不能将 ICC/ICC2 中绕线后的 DRC 结果作为 signoff drc 的结果(即不用 calibre 跑 DRC)?

  • 天线规则文件 (antenna rule)

Foundary 一般都会提供天线规则文件,以 clf 格式给出。此时需要改成 ICC 或者 ICC2 的 tcl 格式。下图给出供 ICC2 使用的 antenna tcl 文件,大家可以和 clf 文件进行对比。关于 antenna layer 的定义希望大家搞清楚,有的时候可能需要做更改哦。吾爱 IC 社区的小编在之前的文章提及到这个玩意哦。

  • Tluplus 文件和 layer map 文件

这个文件提供了 RC 相关信息,主要用来供工具估算 delay 信息的。

数字后端工程师需要准备的事情

  • Milkyway 和 NDM 生成

为何要用 Milkyway 和 NDM?Milkyway 是供 ICC 使用,NDM 则是供 ICC2 使用。这里简单说下,MIlkyway 是对应 GDS 的抽象化,因为它文件不大,信息量够 PR 工具使用。有人可能会说直接用 GDS,试问你是想玩死工具吗?Milkyway 的制作其实就包含了三类信息,Blockage,Pin,Via,就是通常所说的 BPV。简而言之,就是 Milkyway 就是告诉 tool,这个 ip 有多大,有哪些 signal pin,power ground pin, 哪些地方有 blockage,在哪些地方可以打孔。

关于 Milkyway 和 NDM 的制作脚本,小编之前已经分享在知识星球了,需要的朋友可以前往查看。

  • 检查时序约束文件

在读入 netlist 前,需要检查下前端提供的时序约束文件 constraint,检查时钟周期是否符合 spec? 检查时序约束是否存在缺失?检查是否有 ideal network 的约束?

  • 读入 netlist 和 DC constraint

做完以上各个准备工作后,可以读入 design 的 netlist 和 DC constraint。经常会有人来问关于读 netlist 出现的各种错误,这里简单罗列几种常见错误的原因

  • 参考库(reference library)缺失

  • Netlist 中含有未映射到标准单元库的 cell,比如存在 GTECH 这样的 cell

  • TOP module 名字指定错误

  • 子模块的 milkyway 和 db 文件不一致(主要是指两边 port 不一致)

成功读入 design 的 netlist 和 constraint 后,设计就算导入成功了,完成了第一步 initial design 的工作。整个 initial design 的参考脚本请点击下方的 “阅读原文” 查看。

好了,今天的分享就到这里了。下一期会进行数字 IC 后端实现中关于 floorplan 的内容分享。

https://mp.weixin.qq.com/s/bfmCxNlhlI9LftBF2HAXLQ">https://mp.weixin.qq.com/s/bfmCxNlhlI9LftBF2HAXLQ
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现步骤: 1. 确定设计需求和功能,例如需要设计的路由器需要支持哪些协议、路由算法等。 2. 根据需求确定设计架构,将整个设计分为模块,并确定每个模块的输入、输出和功能。 3. 编写每个模块的Verilog代码,包括模块的功能实现和模块之间的接口。 4. 进行模块级仿真,验证每个模块的功能是否正确。 5. 将各个模块组合起来,进行系统级仿真,验证整个路由器的功能是否正确。 6. 进行综合和布局布线,生成最终的芯片设计文件。 7. 进行后端仿真,验证芯片的时序、功耗等性能是否满足要求。 8. 将设计文档和仿真结果编写成论文。 以下是一个简单的片上网络路由器的Verilog代码: ```verilog module router(input clk, input rst, input [7:0] in_data, input [3:0] in_port, output reg [7:0] out_data, output reg [3:0] out_port); reg [7:0] routing_table[15:0]; reg [7:0] dest_addr; reg [3:0] dest_port; integer i; always @(posedge clk) begin if(rst) begin out_data <= 0; out_port <= 0; end else begin dest_addr <= in_data; for(i = 0; i < 16; i = i + 1) begin if(dest_addr[i:i] == routing_table[i][7:0]) begin dest_port <= routing_table[i][3:0]; break; end end out_data <= in_data; out_port <= dest_port; end end initial begin routing_table[0] = 8'b00000000; routing_table[1] = 8'b00000001; routing_table[2] = 8'b00000010; routing_table[3] = 8'b00000011; routing_table[4] = 8'b00000100; routing_table[5] = 8'b00000101; routing_table[6] = 8'b00000110; routing_table[7] = 8'b00000111; routing_table[8] = 8'b00001000; routing_table[9] = 8'b00001001; routing_table[10] = 8'b00001010; routing_table[11] = 8'b00001011; routing_table[12] = 8'b00001100; routing_table[13] = 8'b00001101; routing_table[14] = 8'b00001110; routing_table[15] = 8'b00001111; end endmodule ``` 该路由器实现了一个简单的路由表,根据输入数据的前4位确定输出端口。可以通过改变路由表的值来模拟不同的路由算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值