1、 专业方向综合课程设计报告 摘 要 7人表决器电路是一简单的输入信号检测与处理、产生运算控制信号的逻辑电路。本文详细介绍了依据功能要求进行运算控制电路方案设计的过程,并在此基础上将整体电路分为数据接收模块、数据处理模块、结果显示模块等主要功能模块。 电路设计完成后通过Design Compiler对电路进行逻辑综合。使用Tcl命令编写电路的约束文件,设定约束条件,对电路进行优化以保证设计的功能性,同时生成网表文件、时序报告、面积报告,并进行结果分析。再通过延时文件与顶层文件的激励进行电路功能的时序仿真,分析设计的可行性。再通过Primetime
2、对电路进行静态时序分析,得到静态时序报告。最后通过IC_Compler对生成的网表进行物理实现,生成GDS II版图信息。 关键词 Design Compiler;Primetime;逻辑综合;静态时序分析;物理实现; 目 录 摘 要 1 目 录 2 引 言 4 1 总体电路结构设计 5 1.1电路功能 5 1.2 关键功能电路设计 5 1.3 电路接口 6 1.4 顶层TOP的设计 6 2 设计约束及脚本 8 2.1 约束设计 8 2.2 脚本设计 8 3 逻辑综合过程 11 3.1 综合文件 11 3.2 综合环境 11 3.
3、3综合过程 12 4 结果分析及时序仿真 16 4.1 时序报告分析 16 4.2 面积报告分析 19 4.3时序仿真 20 5 静态时序分析及脚本 21 5.1 静态时序分析 21 5.2 PrimeTime 进行时序分析的流程 21 5.3 脚本 22 5.4 静态时序报告分析 24 6 物理实现 28 6.1 物理实现文件 28 6.2物理实现环境 28 6.3物理实现过程 29 6.3.1 Floorplan 29 6.3.2 placemant 30 6.3.3 Clock Tree synthesis 30 6.3.4 Routing 3
4、1 6.3.5 Write Design Out 32 6.4 报告输出 32 6.5 LVS和DRC 34 结 论 35 参考文献 36 附录A:顶层设计源代码 37 附录B:设计约束代码 38 附录C:静态时序分析脚本代码 40 3 专业方向综合课程设计报告 引 言 现代集成电路技术急剧发展,输百万级晶体管电路使设计面临着巨大的挑战。如果没有计算机的辅助和建立了很好的设计方法是不可能完成这一工作的。 Synopsys公司是全球半导体和电子行业先进的EDA(电子设计自动化)软件工具和专业化服务提供商,为设计复杂集成电路(IC)、FPGA(现场可
5、编程门阵列)和SOC(System on Chip,系统级芯片)产品的公司提供业内最完善的工具,使客户能够用最短时间并以最低风险向市场推出最好的电子产品。从高水平的综合能力到门电路的设置,Synopsys为工程技术人员面临的最严峻挑战提供全部解决方案,并帮助他们将电子设计推向极致。现今,Synopsys在全球半导体技术发展潮流中担当着重要角色[2]。 Synopsys公司发布的“Design Compiler”软件,简称“DC”,是一种逻辑合成工具。通过改进电路延迟时间的计算方法,缩小了逻辑合成时的时序与布局完成后的最终时序之间的偏差。DC得到全球60多个半导体厂商、380多个工艺库的支持。
6、据最新Dataquest的统计,Synopsys的逻辑综合工具占据91%的市场份额。DC是十二年来工业界标准的逻辑综合工具,也是Synopsys最核心的产品。它使IC设计者在最短的时间内最佳的利用硅片完成设计。它根据设计描述和约束条件并针对特定的工艺库自动综合出一个优化的门级电路。它可以接受多种输入格式,如硬件描述语言、原理图和网表等,并产生多种性能报告,在缩短设计时间的同时提高设计性能。 本设计采用Verilog HDL语言描述、Design Compiler进行约束及综合。Design Compiler的操作有Tcl命令来实现,还要用Modelsim进行时序仿真,用Prime T
7、ime进行静态时序分析,实验环境为Linux操作系统。完成7人表决器电路前端设计。 1 总体电路结构设计 1.1电路功能 7人表决器电路功能主要集中在四方面。一是在用户使用开关输入状态,高电平代表“1”,低电平代表“0”;二是数据输入后要对数据进行锁存。三是输入锁存后进行数据的实时运算,通过运算电路计算出赞成即“1”的人数和反对“0”的人数,并进行判断赞成人数是否大于3。由于FPGA属于硬件电路,没有使用CPU软核时,没有任何指令集,所以需要使用自带的IP核进行必要的加减运算;四是运算结果得出后,可以准确的将赞成和反对人数的数量显示在数码管上。电路的具体功能罗
8、列如下: (1) 采用7个开关作为7人表决结果得输入设备。 (2) 采用2位8段数码管和一位LED灯作为输出显示设备。 1.2 关键功能电路设计 本电路设计的主要难点在于2位8段数码管的静态显示。本课程设计给定的工作时钟位1kHZ,显示1位8段数码管的时间为1MS,扫描2位的时间为2MS。而人的眼睛遗留时间20MS左右。次时钟工作频率是符合设计要求的。依照功能,将电路分为3个功能:开关输入锁存模块;运算模块用于将开关收集到的数据按照一定要求进行计算出正确的结果;数码管显示模块,用于显示计算结果。电路功能框图如图1.1所示 图1.1 电路功能框图 1.3 电路接口 整个设计
9、接口可以分为2部分,分别是数据的输入以及数据的实时输出。具体接口如下表1.1所示。 表1.1 接口信号表 名称 IO属性 描述 备注 clk In 时钟频率1kHz rst In 复位信号输入端口 低电平有效 vote In 表决数据输入端口 pass Out 表决结果输出端口 cnt_sel Out 数码管位选端口 disp_seg Out 数码管段选端口 1.4 顶层TOP的设计 因为本设计是要一起综合功能电路,所以需要顶层的文件,该文件为vote7TOP.v,此部分内部包含了功能电路。具体接口如下表1.3所示:
10、 表1.3 顶层接口信号表 名称 IO属性 描述 备注 CLK In 外部输入时钟频率1kHz RSTN In 复位信号 低电平有效 VOTE In 表决信号 高电平有效 PASS Out 表决结果信号 大于一半有效 CNT_SEL Out 数码管段选 高电平有效 DISP_SEG Out 数码管位选 高电平有效 电路功能框图如图1.2所示: 图1.2 顶层设计功能框图 2 设计约束及脚本 2.1 约束设计 约束部分是本次课程设计的重点内容, 对于一个由时钟控制的数字逻辑电路来
11、说,时序是最为重要的。 Vote7TOP.v是本设计所要约束的文件。虽然人的肉眼所能分辨的最大频率一般为20Hz,但该设计在计算机上实现仿真运行,故暂不考虑分频问题。所有使用本设计的工作时钟为1kHZ,即CLK周期设置为1000000ns。输入为vote,输出为cnt_sel,disp_seg[6:0],pass,他们都是由CLK信号同步控制,所以这些信号延时约占时钟信号的60%,即输入输出延时设置为600000ns。 本次对此电路的综合约束需要分为以下几部分:对CLK时钟信号进行设置,对每个输入输出信号的约束,对扇出和驱动负载能力能度需要进行约束设置,最后输出报告。 2.2 脚本设计
12、 首先是读入源代码,也就是HDL文本描述的设计文件,此处不用制定目录,Design Compiler会在搜索目录中搜索。Tcl语句如下: read_verilog {vote7.v vote7TOP.v } 读入设计原文件后,一般设定当前设计,这样约束条件才可能有针对性的施加。Tcl语句如下: current_design vote7TOP 设定当前设计后,要完成链接,也就是将设计与库链接起来,用于映射过程中搜索相应的单元,完成综合。Tcl语句如下: Link 检查设计,主要完成检查转换的设计。Tcl语句如下: check_
13、design 然后对设计设定时序约束,这是最重要的一项约束,用于设定设计的工作速度。针对不同的设计部分,有不同的约束方法。针对本次设计,采用全同步,单时钟工作的实际情况。以下语句设定时钟及属性、输入输出信号时间余量。 设定名称为CLK的时钟,由于采用1KHz的时钟,故设定时钟周期为1000000ns。Tcl语句如下: create_clock -name "clk" –period1000000 [get_ports CLK] 设定时钟的渡越时间为0.2ns。Tcl语句如下: set_clock_transition -max 0.2 [ge
14、t_clocks clk] 设定输入信号最大时间延时。Tcl语句如下: set_input_delay -clock clk -max 600000 [get_ports "VOTE"] 设定输出信号最大时间延时。Tcl语句如下: set_output_delay -clock clk -max 600000 [get_ports "DISP_SEG CNT_SEL PASS"] 告诉综合器不要对时钟网络进行驱动,这个工作将在后续版图布局布线中进行。Tcl语句如下: set_dont_touch_network [get_clocks "cl
15、k"] set_ideal_network [get_ports "CLK"] 告诉综合器不要对复位进行驱动。Tcl语句如下: set_dont_touch_network [get_ports RST] set_ideal_network [get_ports RST] 检查时序。Tcl语句如下: check_timing 设定综合的操作条件。Tcl语句如下: set_operating_conditions -max WORST-max_library saed90nm_max_hth -min WORST -min_library saed90nm_max_hth 设定
16、线负载模型,本设计选择saed90nm_max_hth模型。Tcl语句如下: set_wire_load_model -name ForQa 设定输出负载电容。Tcl语句如下: set_load -pin_load 2 [get_ports "DISP_SEG CNT_SEL PASS"] 设定扇出最大负载能力。Tcl语句如下: set_max_fanout 30 vote7TOP 驱动能力设定。Tcl语句如下: set_drive 2.0 [get_ports " CLK RST"] 设定输出网表的格式规则,以消除gate level nel
17、ist中的assign。Tcl语句如下: set verilogout_no_tri true set_fix_multiple_port_nets -all -buffer_constants 最大能力进行综合。Tcl语句如下: compile -map high 输出时序报告。Tcl语句如下: rc > ../output/tim.log 输出网表。Tcl语句如下: write -f verilog -hier -o ../netlst/vote7TOP.v 输出综合数据文件。Tcl语句如下: write
18、f ddc -hier -o ../output/vote7TOP.ddc 输出延时文件。Tcl语句如下: write_sdf ../output/vote7TOP.sdf 输出面积文件。Tcl语句如下: report_area > ../output/vote7TOP.area.log 3 逻辑综合过程 3.1 综合文件 首先在目录下建立dclab作为本次实验dc的操作主目录。在dclab目录下,建立设计存放目录如code、约束文件目录如constrn、输出网表文件目录netlst、报告输出目录ou
19、tput、dc启动目录work,库文件目录SnonpsysDC等等。 在综合前需要准备以下几个文件,以便使软件可以正常工作。 .synopsys_dc.setup文件即启动项文件: 在这个文件中,需要将所用到的库单元文件的路径和电路设计文件所存放的路径写入,以便软件在工作时能够找到这些文件并正确识别,本设计将它存放在work目录下。 *.v文件: 因为本次课程设计所使用电路描述语言为verilog HDL语言,所以至少需要将顶层TOP设计文件、功能电路的设计文件准备好,即准备好一个正确可用的设计,以便用于约束综合,本设计将*.v文件存放在code目录下。 Tcl语句文件: 在本次
20、课程设计中使用的是命令界面,使用Tcl语言进行操作,所以需要准备好相应的Tcl命令,以便对设计进行约束综合等相应操作,本设计将它存放在constrn目录下。 库文件: 本设计采用的是synopsys提供好的saed90nm标准单元库的所有文件,存放在目录:/home/zhm/zhm0/SnonpsysDC下面。 3.2 综合环境 本次设计是运行在ubuntu Linux操作系统环境下的。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32
21、位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统Linux操作系统诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。 本次课程设计所使用的综合工具Design Compiler(
22、简称DC),是synopsys 公司的ASIC 综合器产品,它可以完成将硬件。描述语言所做的RTL级描述自动转换成优化的门级网表。DC 得到全球60 多个半导体厂商、380 多个工艺库的支持。Synopsys 的逻辑综合工具DC占据91%的市场份额。DC 是工业界标准的逻辑综合工具,也是Synopsys 最核心的产品。它使IC 设计者在最短的时间内最佳的利用硅片完成设计。它根据设计描述和约束条件并针对特定的工艺库将输入的VHDL或者Verilog 的RTL 描述自动综合出一个优化的门级电路。它可以接受多种输入格式,如硬件描述语言、原理图和网表等,并产生多种性能报告,在缩短设计时间的同时提高设计
23、性能。 3.3综合过程 首先打开Linux中命令终端。进入以准备好的.synopsys_dc.setup文件所在路径。执行命令,打开Design Compiler。进入Tcl命令界面。 命令如下: cd /home/zhm/zhm0/dclab/work dc_shell 运行后,读入文件将在终端得到如图3.1界面,即已经进入DC的Tcl命令 图3.1 Design Compiler的Tcl命令界面 因为已经将所要使用的Tcl语句准备好并形成文件,所以可以使用source命令来讲Tcl命令全部读入并执行。 命令如下: source /home/zhm/zhm0/dcla
24、b/constrn/vote.con 这里我们逐一运行命令,运行后,将在终端得到如下界面,即已经进入约束综合过程。 读入文件过程,如图3.2所示: 图3.2 读入文件过程 链接,检查设计之后如图3.3所示: 图3.3 链接,检查设计过程 时序约束过程,如图3.4所示: 图3.4 时序约束过程 关键路径优化过程。如图3.5所示: 图3.5 优化过程 待综合完成后,导出相应文本。如电路网表、综合过程、时序报告、面积报告等。如图3.6所示: 图3.6 导出文件 4 结果分析及时序仿真 4.1 时序报告分析 Design Compiler将电路分解
25、成不同的信号时序路径(Timing Path),每条路径都有一个起点和一个终点。起点是电路的输入端口或电路中寄存器的时钟管脚,终点是电路的输出端口或时序器件(sequential devices)中除时钟管脚外的其它输入管脚。时序路径又根据控制它们终点的时钟分成不同的路径组(path group),默认的路径组(the default path group)包含所有不受时钟约束的路径。 生成一个默认的时序报告。时序报告由4 个部分组成:路径信息部分(Path Information Section),路径延时部分(Path Delay Section),路径要求部分(Path Require
26、d Section),总结部分(Summary Section)。查看命令:report_timing。 时序报告如下: **************************************** Report : timing -path full -delay max -max_paths 1 Design : vote7TOP Version: G-2012.06-SP2 Date : Thu Jul 16 11:03:12 2015 **************************************
27、 Operating Conditions: saed90nm_max_hth Library: saed90nm_max_hth Wire Load Model Mode: top Startpoint: vote7/tmp_reg_4_ (rising edge-triggered flip-flop clocked by clk) Endpoint: PASS (output port clocked by clk) Path Group: clk Path Type: max Des/Clust/Port
28、 Wire Load Model Library ------------------------------------------------ vote7TOP ForQa slow Point Incr Path ----------------------------------------------------------- clock clk (rise edge) 0.00
29、 0.00 clock network delay (ideal) 0.80 0.80 vote7/tmp_reg_4_/CK (DFFRHQX4) 0.00 0.80 r vote7/tmp_reg_4_/Q (DFFRHQX4) 0.46 1.26 r vote7/U148/Y (INVX12) 0.25 1.51 f vote7/U149/Y (INVX12)
30、 0.28 1.79 r vote7/U46/Y (XOR2X4) 0.31 2.10 r vote7/U47/Y (INVX12) 0.23 2.33 f vote7/U48/Y (INVX12) 0.28 2.61 r vote7/U155/Y (XOR2X4) 0.31 2.92 r vote7/U109/Y (INVX12)
31、 0.23 3.15 f vote7/U110/Y (INVX12) 0.28 3.43 r vote7/U41/Y (XOR2X4) 0.31 3.74 r vote7/U42/Y (INVX12) 0.23 3.97 f vote7/U23/Y (INVX12) 0.28 4.25 r vote7/U75/Y (AND2X4
32、) 0.23 4.48 r vote7/U76/Y (INVX12) 0.24 4.71 f vote7/U12/Y (INVX8) 0.10 4.81 r vote7/U21/Y (INVX8) 0.06 4.87 f vote7/U61/Y (AND2X4) 0.25 5.12 f vote7/U62
33、/Y (INVX12) 0.29 5.41 r vote7/U93/Y (AND2X4) 0.23 5.64 r vote7/U94/Y (INVX12) 0.23 5.87 f vote7/U69/Y (AND2X4) 0.22 6.10 f vote7/U70/Y (INVX12) 0.25 6.35 r
34、 vote7/U115/Y (INVX12) 0.24 6.59 f vote7/U151/Y (CLKINVX8) 0.13 6.72 r vote7/pass (vote7) 0.00 6.72 r iopads/pass_core (iopads) 0.00 6.72 r iopads/pass/PAD (PDO04CDG) 1.30
35、 8.01 r iopads/PASS_PAD (iopads) 0.00 8.01 r PASS (out) 0.00 8.01 r data arrival time 8.01 clock clk (rise edge) 1000000.00 1000000.00 clock network delay (ideal) 0.
36、80 1000000.81 clock uncertainty -0.30 1000000.50 output external delay -600000.00 400000.50 data required time 400000.50 ----------------------------------------------------------- data required time
37、 400000.50 data arrival time -8.01 ----------------------------------------------------------- slack (MET) 399992.50 上面是对clk时钟的约束,即对jjq_core部分约束的时序报告。时序报告中有三列项目。第一列是关键路径经过的器件;第二列为器件的延时;第三列是路径总延时。路径起点为vote7/tm
38、p_reg_4_,路径终点为PASS (output port clocked by clk)。从表中可知经过各个器件的延时,数据到达时间为8.01ns。而约束的时钟周期1000000ns,允许的最大延时为400000.50ns。因此,允许的最大时延减去到达时间为ns。所以满足设计的要求,裕量时间即为399992.50ns。 4.2 面积报告分析 面积报告中列出了设计的端口、单元、线网和引用的数目。设计的面积被分为组合、非组合以及互连线。分别显示出组合逻辑面积,时序逻辑面积,估计的互联线面积,单元器件总面积。 面积报告如下: **********************
39、 Report : area Design : vote7TOP Version: G-2012.06-SP2 Date : Thu Jul 16 11:03:12 2015 **************************************** Library(s) Used: saed90nm_max_hth (File: /home/zhm/zhm0/SynopsysDC/saed90nm_max_hth) Number of ports: 18 Number
40、of nets: 36 Number of cells: 2 Number of combinational cells: 0 Number of sequential cells: 0 Number of macros: 0 Number of buf/inv: 0 Number of references:
41、 2 Combinational area: 174748.435136 Buf/Inv area: 4311.014318 Noncombinational area: 1713.096024 Net Interconnect area: 63933.649796 Total cell area: 176461.531159 Total area: 240395.180955 从上面我们可以看出总本设计电路总共有18个端口、36个网络、2个单元
42、模块等。组合逻辑电路占用面积174748.435136,非组合逻辑电路占用面积1713.096024,buffer和反相器占用面积4311.014318等。最终总面积为240395.180955。因设计简单,对面积要求低,故无需继续优化。 4.3时序仿真 本设计采用的仿真工具是Mentor公司的Modelsim10.1a,这是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。 构建激励,将综合产生的网表(*.v)进行时序仿真,并在激励中添加综合后产生的延时文件(*.sdf),此过程称为sdf反标,Verilog语句为:
43、 initial $sdf_annotate( "F:/zhm/zzzzz2/vote7TOP.sdf",vote7TOP); 括号内为需要反标的标准延时文件的绝对路径和需要反标的模块的例化名称。 仿真结果如图4.1 图4.1 加入了sdf文件后的仿真图 5 静态时序分析及脚本 5.1 静态时序分析 一般来说,要分析或检验一个电路设计的时序方面的特征有两种主要手段:动 态时序仿真(Dynamic Timing Simulation)和静态时序分析(Static Timing Analysis)。动态时序仿真的优点是比较精确,而且同后者相比较,它适用于更多的设计
44、类型。但是它也存在着比较明显的缺点:首先是分析的速度比较慢;其次是它需要使用输入矢量,这使得它在分析的过程中有可能会遗漏一些关键路径(critical paths),因为输入矢量未必是对所有相关的路径都敏感的。 静态时序分析的分析速度比较快,而且它会对所有可能的路径都进行检查,不 存在遗漏关键路径的问题。PrimeTime 是 Synopsys 的静态时序分析软件,常被用来分析大规模、同步、数字 ASIC。PrimeTime 适用于门级的电路设计,可以和Synopsys 公司的其它 EDA 软件非常好的结合在一起使用。 5.2 PrimeTime 进行时序分析的流程 使
45、用 PrimeTime 对一个电路设计进行静态时序分析,一般要经过下面的步骤: 1)设置设计环境 在可以进行时序分析之前,首先要进行一些必要的设置和准备工作。具体来说包括: 设置查找路径和链接路径; 读入设计和库文件; 链接顶层设计; 对必要的操作条件进行设置,包括线上负载的模型、端口负载、驱动、以及转换 间等; 设置基本的时序约束并进行检查; 2)指定时序约束 (timing assertions/constraints) 包括定义时钟周期、波形、不确定度(uncertainty)、潜伏性(latency
46、),以及指明输 输出端口的延时等。 3)设置时序例外(timing exceptions): 包括设置多循环路径(multicycle paths)、设置虚假路径(false paths)、定义最大最小延时、路径的分段(path segmentation)以及无效的 arcs 4)进行时序分析: 在作好以上准备工作的基础上,可以对电路进行静态时序分析,生成 constraint reports 和 path timing reports。 以上仅仅是 PrimeTime 进行静态时序分析的简单流程,以下的部份中将会有更详细的叙述。 5.3 脚本
47、查找路径和链接路径在 PrimeTime 中对应着两个变量:search_path 和link_path,用 set命令对它们进行设置。 set link_library "* slow.db tpz973gwc.db" 下面的表格5.1给出了 PrimeTime 可以接受的文件类型,以及读入每一种类型的设计时,所使用的不同命令。 表5.1 PrimeTime 可以接受的文件类型以及命令 PrimeTime 可以接受的文件类型 命令 Synopsys 数据库文件(.db) read_db Verilog 网表文件 read_verilog EDIF 网表文件(
48、Electronic Design Interchange Format) read_edif VHDL 网表文件 read_vhdl 本文中分析的例子使用的是第二种格式,脚本如下: read_verilog vote7TOP.v 设定当前设计后,要完成链接,也就是将设计与库链接起来,用于映射过程中搜索相应的单元 current_design vote7TOP 链接过程就在库文件中寻找到设计中所需要的元件,并将该设计例化的过程。脚本如下 link 设定线负载模型,PrimeTime在生成建立时序报告(setup timing reports)时使用最大
49、Maximum)运作条件和连线负载模型;在生成保持时序报告(hold timing reports)时使用最小(Minimum)运作条件和连线负载模型。top模式时,层次中的所有连线将继承和顶层模块同样的WLM set_wire_load_mode top set_wire_load_model -name 05x05 -min set_wire_load_model -name 20x20 -max 对有关时钟的参数进行设置,具体命令可以参考Design Compiler中的脚本 create_clock -period 30 [get_ports
50、 CLK] set clock [get_clock CLK] set_clock_uncertainty 0.5 $clock set_clock_latency -min 3.5 $clock set_clock_latency -max 5.5 $clock set_clock_transition -min 0.25 $clock set_clock_transition -max 0.3 $clock 设定时钟-门的建立和保持时间的数值,以及最小的脉冲宽度,脚本如下 set_clock_gating_ch






