2023年8月3日发(作者:)

实习报告

课程名称 实习设计报告

题目名称 IC集成芯片设计

学生学院 材料与能源

专业班级 微电子(2)班

学 号

学生姓名

指导教师

2015 年 7 月 25 日

目录:

前言·······························································1

正文·······························································3

第一部分——LINUX介绍与常用指令···································3

第二部分——VCS实验设计步骤简要说明·······························5

实验一··························································5

实验二··························································7

实验三··························································8

第三部分——DC实验设计步骤简要说明································9

第四部分——ICC实验设计步骤简要说明······························17

一、给你的设计先创建一个Milkway library·······················17

二、加载网络表,TLU +:的约束和控制·······························18

三、基本流程:设计规划···········································20

四、布局·························································20

五、CTS··························································21

六、布线·························································21

第五部分——PT实验设计步骤简要说明································22

实习总结:··························································24

前言:

终于迎来了期盼已久的实习,毕业实习是每个大学生必须拥有的一段经历,它使我们在实践中了解社会,让我们学到了很多在课堂上根本就学不到的知识,受益匪浅,也打开了视野,增长了见识,使我认识到将所学的知识具体应用到工作中去,为以后进一步走向社会打下坚实的基础,只有在实习期间尽快调整好自己的学习方式,适应社会,才能被这个社会所接纳,进而生存发展。刚进入单位的时候我有些担心,经历了一连串的实习之后,我努力调整观念,正确认识了单位和个人的地位以及发展方向,我相信只要我们立足于现实,改变和调整看问题的角度,锐意进取,在成才的道路上不断攀登,有朝一日,那些成才的机遇就会纷至沓来,促使我们成为社会公认的人才。

1、培训目的

IC集成芯片设计的设计流程主要包括代码设计和验证VCS(Verilog

Compiled Simulator)、前端设计与逻辑综合DC(Design Compiler)、后端实体设计ICC(IC Compiler)和时序验证PT(Prime Time)。此次实习根据初学者的知识掌握程度合理地安排了实习的实习难度,也让实习生同学能够初步了解IC芯片设计的整个流程,充分的了解芯片设计每一阶段所需要掌握的基本知识和技能。HDMI芯片的仿真验证设计是本次实习的主要研究内容,其中每一阶段从工具介绍、指令操作、仿真设计和最后所要达到的实验目的都有严格的标准,能够达到本次实习要求的目的。

2、实习时间

2015年7月11日至2015年7月25日

3、实习地点

广州星海集成电路基地有限公司(广东工业大学IC基地内)

4、实习内容:

IC设计培训与实习。具体内容:①前期准备:Linux系统;②代码设计和验证:VCS(Verilog Compiled Simulator);③前端设计与逻辑综合:DC(Design

Compiler);④后端实体设计:ICC(IC Compiler);⑤时序验证:PT(Prime Time)

5、实习经过:

实验时间

两天

两天

实验内容

前期准备:

Linux系统

代码设计和验证:

VCS(Verilog Compiled

Simulator)

前端设计与逻辑综合:

DC(Design Compiler)

大纲要求

①工具简介;

②操作指令基本说明。

①编写HDMI的Testbench文件;

②进行VCS仿真并验证RTL编码逻辑功能的正确性。

①工具简介;

②根据HDMI设计的要求,编写约束脚本;

两天

1 ③按流程编译导出HDMI的Netlist网表文件。

①ICC工具简介;

②HDMI的FloorPlan,Preroute设计;

③布局优化和时钟树综合;

④布线以及优化。

①与时序相关的概念介绍;

②进行HDMI的时序分析。

总结并提交实验报告

四天

后端实体设计:

ICC(IC Compiler)

时序验证:

PT(Prime Time)

两天

三天

6、实习结论:

本次实习通过Linux系统上应用VCS,DC,ICC,PT这四个工具来设计出一个HDMI系统,熟悉这个设计的流程。其中VCS是Verilog代码的仿真验证工具;DC是逻辑综合工具,将Verilog代码描述转化成优化的门级网表;ICC是后端设计工具;PT是时序验证工具。其实HDMI的代码已经给出,它包括顶层模块hdmi_encoder(信号源)发射模块和他下面的帧时序产生模块(Timing)、周期时序产生模块(Timing_dly)、编码模块(Encoder)。所以我们就是先用VCS仿真验证HDMI的硬件描述代码无错误,再用DC将这代码翻译成逻辑门电路,再用ICC将其转变为IC版图文件,最后用PT验证HDMI版图是否符合时序要求。

2 正文:

第一部分——LINUX介绍与常用指令

VCS,DC,ICC,PT这些工具都是在LINUX系统上运行的工具,所以第一步是了解和认识LINUX系统及其在设计中设计的常用指令。

LINUX的基本介绍这里不再赘述,这里主要叙述Linux的目录结构和基本命令:

1、Linux目录结构

• /:根目录,一般根目录下只存放目录,不存放文件;

• /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls,tar,mv,cat等;

• /boot: 放置linux系统启动时用到的一些文件;

/boot/vmlinuz为系统的内核文件,以及/boot/grub;

• /dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的挂载光驱如:mount /dev/cdrom /mnt;

• /lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序执行过程中,需要调用一些额外的参数时需要的函数库;

• /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问;

• /usr: 应用程序存放的目录;

• /var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件/var/log;

• 显示用户当前路径: pwd

• 查看显示命令: ls [选项] 目录(如果目录缺省,即显示当前目录及文件信息)

ls命令常用选项:

-a 全部文件包括隐藏;

-h 以M为单位显示文件大小结果;

-s 统计此目录中所有文件大小总和;

如 du –sh . (查看当前目录下的文件大小总和)

• 切换目录

. cd 目录

. cd .. 回到上级目录

. cd ~ 回到自己主目录

. cd /home/eda 目录

• 新建目录

. mkdir 目录

常用选项: -p

mkdir /home/eda/AAA/BBB,即在/home/eda目录下,新建AAA目录及AAA目录下的子目录BBB;

• 删除目录

.rm [选项] 文件名或目录名

.常用选项:

.-r 删除目录

3 .-f 强制删除

.-i 删除前询问

如强制删除/home/tmp目录: rm -rf /home/tmp

2.2复制

.cp [选项] 源路径/源文件 目标路径/新文件名

.常用选项:

.-r 复制目录

.-b 覆盖同名文件

.-f 强制复制

如复制/home/tmp/cpp 目录到 /tmp: cp -r /home/tmp/cpp /tmp

2.3压缩管理

• 解压缩

.tar [选项] 生成文件 目录/文件

.常用选项:

.-c 创建一个压缩文件的参数指令

.-x 解开一个压缩文件的参数指令

.-t 查看tar file 文件里面的文件

.-z 是否同时具有gzip的属性

.-j 是否同时具有bzip的属性

.-v 压缩过程中显示文件

.-f 使用档名,在f之后要立即接档名

• 解压缩tar实例:

打包:

tar -cvf lab2015 仅打包,不压缩 (lab2015为目录)

tar -zcvf lab2015 以gzip压缩方式打包

解压缩:

tar -xvf 解压缩包

tar -ztvf 查阅包中文件内容

tar -zxvf 解压缩gz格式的压缩包

2.4系统账户环境

• finger:显示系统账号的相关信息

常用选项:

-l 列出账户的信息

例如: finger -l [用户名] (不加用户名即查询当前用户信息)

• chsh:改变登入系统时的shell

4 常用选项:

-s 指定系统登入时的shell

-l 列出系统支持的所有shell

例如: chsh -s /bin/csh

第二部分——VCS实验设计步骤简要说明

实验一

1、打开终端,进入VCS_Tranning文件夹下面的Lab1子文件夹parta。

指令: shell>pwd

shell> cd vcs/lab1

shell> ls

2、使用VCS对在parta里的4个Verilog文件,分别为:hdmi_encoder.v,encoder.v,timing.v,timing_dly.v,进行编译产生可以执行的二进制文件simv。

指令: shell> vcs hdmi_encoder.v encoder.v timing.v timing_dly.v

结果:

3、运行simv这个二进制文件。

指令: shell> ./simv

结果:

5 4、产生hdmiv的可执行文件,而不产生simv

指令: shell> vcs hdmi_encoder.v encoder.v timing.v timing_dly.v

-o hdmiv

5、运行hdmiv文件

指令: shell> ./hdmiv

结果:运行完毕后的结果和第3步骤的结果进行对比,你会发现CPU Time显示时间基本上是一样的

6、是终端进入文件夹partb,并查看其中的文件。

指令: shell> cd ../lab2

shell>ls

结果:进入lab2文件夹,发现只有两个文件hdmi_encoder.v encoder.v。

7、若是需要重新编译这个设计,我们需要关联到library目录下的文件,这用的是“-y lib_dir”开关选项,lib_dir是参考库的目录,vcs从该目录下寻找包含引用的Verilog文件;“+libext+.v”参考目录的.v文件,多个文件使用“+”连接;“-R”这个开关选项是编译之后立即进行仿真。

指令: shell> vcs hdmi_encoder.v encoder.v -y ../library

+libext+.v -R

8、在当前文件夹中创建名称为hdmi2.f的文件,并使用编辑工具打开hdmi2.f文件,输入如下的内容:

指令: shell>touch hdmi2.f

shell>gedit hdmi2.f

9、使用开关选项“-f”,就是可以把所有的.v文件提前输入到.f文件中,下次运行vcs只需要直接调用.f文件即可,省去手工重复书写代码烦恼。

指令: shell>vcs -f hdmi2.f -R

结果:

6

实验二

1、运行程序

指令: shell>cd lab2

shell> vcs -f hdmi2.f -R

结果:运行程序后,程序出现了两个警告,并且警告来自4个.v文件的hdmi_encoder.v文件。

2、使用编辑工具gedit打开hdmi_encoder.v文件,查看里面的代码。按照下图所示的方式修改hdmi_encoder模块的程序,然后保存并退出。

指令:shell> gedit hdmi_encoder.v

7

3、重新编译和仿真

指令:shell> vcs -f hdmi2.f -R

结果:之前的警告提示消失,表明程序修改正确。

实验三:

1、进入lab3,并启动VCS的图形界面DVE。

指令: shell>cd lab3

shell>vcs -f hdmi.f -debug_all -R -gui &

2、通过鼠标左键选中模块区的顶层文件“top”,然后点击鼠标右键,进入“show

schematic”即可以查看顶层模块的原理图,如下图所示。根据这种方法可以同样查看每个子模块的原理图。

3、查看某个模块的时序图,选中模块后点击鼠标右键,选“Add To Waves”,然后选“New Wave View”,下图是“Hdmi_encoder”模块的部分时序截图。

8

第三部分——DC实验设计步骤简要说明

1、启动DC

指令: shell>dc_shell

shell>design_vision

dc_shell>start_gui

结果:

2、检查synopsys_文件

3、设置库文件和搜索路径

要调用的库文件:

target_library 用于设置综合时所要映射的库。

link_library 是链接库,它是DC在解释综合后网表时用来参考的库。

9 symbol_library 为指定的符号库。

Synthetic_library 是DesignWare综合库。

设置库文件和搜索路径的方法有两种:

方法一:

在图形界面下可以File→setup设置库文件和搜索路径,在search patch中添加rtl和script目录,设置link_library为*sc_;target_library为sc_;symbol_library为。

如下图所示:

方法二:

source脚本文件(tcl)

10 这种方法比图形界面设置库文件和搜索路径较为直观,并且容易检查,可读性较高。

4、读Verilog代码

操作:file>read

11 5、Link

6、添加约束

source ./scripts/HDMI_

设置频率为300MHz,得到周期为3.33ns;一般来说输入和输出延迟分别最多占总周期的40%;

source latency延迟时间表示时钟源产生时钟后,需要经过一段网络延时才能到达被综合的模块的时间。

network latency 延时表示经过source latency后到达内部触发器需要的延迟。

uncertainty 延时表示clock skew+jitter+margin 的和。

transition延迟表示针对时钟端口或引脚使用的转换值。

propagated 延迟,用于布局之后的综合,此时的网络延时已经可以由时钟树上的buffer确切的推断出。

12

7、检查和报告

check_timing timing 检查是否有路径没有加约束

report_clock 报告时钟周期

report_clock -skew 报告各部分的延迟时间

report_port -verbose 报告所有input,output端口属性和约束值。

write_script -out scripts/HDMI_保存上面的报告结果,

write -format ddc -hier -out mapped/HDMI_ 保存未映射的网表。

8、综合

compile_ultra 综合优化时加入 -no_autoungroup(不拆分模块边界)和

-scan(直接将设计映射到扫描触发器)。综合时不同的开关选项会得到不同的优化结果,-spg允许通过寄存器的复制、网表拓补结构的阻塞优化来优化设计;并且在 ddc 网格里加入大概的布局信息,布局信息作为ICC里placement的起点,更好的联系synthesis(DC)和post-placement(ICC) 之间的时序关系。retime选项可以通过修改寄存器的逻辑位置实现优化,如在合适的位置插入寄存器实现流水线结构增加电路的吞吐量。compile_ultra 不加-no_autoungroup

选项时, 即默认条件下会去除模块边界,通过合并两个模块之间的逻辑后再优化可实现更优的综合结

果。

这里我们选用-no_autoungroup -scan 来优化设计。

9、查看和保存报告

report_timing > rpt/HDMI_TX/

13

时序报告

上图可知,slack的值为0,当slack的值大于等于0时表示综合后的结果满足时序约束要求,报告的Path Type是max,即setup timing(建立时间)的报告,在DC里不优化hold timing(保存时间),hold timing在ICC里做优化。表格里Path左边的r和f代表是上升沿触发还是下降沿触发。

14

report_timing > rpt/HDMI_TX/

面积报告

report_timing > rpt/HDMI_TX/

15 功耗报告

16 第四部分——ICC实验设计步骤简要说明

一、给你的设计先创建一个Milkway library

1、更改当前目录lab1_data_setup看看该目录的内容

指令:UNIX% cd ../lab1_data_setup

UNIX% ls –a

2、从Linux系统终端里启用ICC

指令:UNIX% icc_shell

3、通过查询一个用户定义的变量来验证synopsys_文件被读进去:

指令:printvar sdc_file

4、开启图形用户界面

指令:start_gui

结果:

5、打开Create Library 对话框,然后按下图设置

操作:File Create Library

17 6、创建risc_ 文件

指令:UNIX% ls –a risc_ OR

icc_shell> ls risc_

结果:你可以看到三个库*文件和一个锁文件

二、加载网络表,TLU +:的约束和控制

1、打开刚建的design libery文件

操作:File Open Library

结果:如果入口是灰色的,说明已经打开。

2、打开Import Design 对话框,并在Input format 选择Verilog

操作:File Import Designs

3、单击“添加”然后浏览选择文件design_data / risc_chip V并打开。顶层设计的名义进入$top_design(或risc_chip)。点击确定。

4、设置TLU+文件,按下图设置

操作:File Set TLU+

18 5、检查物理和逻辑库的一致性

指令:check_library

6、检查TLU +文件被附加,他们通过三检查

指令:check_tlu_plus_files

结果:你应该看到max_tlu +列出的文件,min_tlu +和mapping_file和所有的检查应该通过了

7、验证已加载的指定链接库

指令:list_libs

8、定义power/ground引脚和网络之间的逻辑连接

指令:source $derive_pg_file

check_mv_design -power_nets

结果:

9、应用顶层设计约束

指令:read_sdc $sdc_file

10、检查是否有任何关键时序约束(例如时钟,输入/输出约束)丢失

指令:check_timing

11、请检查“timing exception” ”的限制是适用于您的设计。

指令:report_timing_requirements

12、检查时间分析是否沿任何路径被禁用

指令:report_disable_timing

19 13、检查设计是否已被配置为一个特定的“模式”或“案例”,例如“功能”与“测试”模式。

指令:report_case_analysis

14、验证时钟是适当的模拟

指令:report_clock

report_clock –skew

15、应用一些时间和优化中指定/脚本/ opt_控件。

指令:source $ctrl_file

16、保存文件,注意新的二进制文件在risc_/cel

指令:save_mw_cel –as RISC_CHIP_data_setup

三、基本流程:设计规划

1、在提供的DEF文件读取

指令:read_def $def_file

2、确定标准的单元不会被放置电源和接地的金属线下

指令:set_pnet_options -complete {METAL3 METAL4}

3、保存设计单元和通知新的二进制文件在risc_/cel

指令:save_mw_cel –as RISC_CHIP_floorplanned

四、布局

1、放置和优化设计的时间,并产生一个定时报告

指令:place_opt

redirect -tee place_ {report_timing}

2、在layoutwindow,放大并在标准单元布局看

3、保存设计单元

指令:save_mw_cel –as RISC_CHIP_placed

20 五、CTS

1、您将使用默认设置来生成时钟树

指令:remove_clock_uncertainty [all_clocks]

set_fix_hold [all_clocks]

clock_opt

redirect -tee clock_ {report_timing}

2、打开时钟树

操作:Clock Color By Clock Trees

六、布线

1、打开ICC的图形界面

指令:UNIX% icc_shell -gui

2、从risc_

design library下载RISC_CHIP_cts 单元

A、File Open Design …

B、按打开Select Library 对话框,然后选择中的risc_ 并选择

C、选择RISC_CHIP_cts

,并点击OK按钮

3、重新设置的时间和优化控制

指令:source $ctrl_file

4、开始布线

指令:route_opt

5、生成时间报表

指令:view report_timing -nosplit; # OR use aliases:

v rt

6、默认情况下报告显示最大延迟或设置时间。产生最小延迟或保持定时报告。你也应该看到,没有任何违反

指令:v rt –delay min

7、产生物理设计统计

指令:report_design –physical

8、保存设计,并关闭ICC

指令:save_mw_cel -as RISC_CHIP_routed

exit

or

quit

21 第五部分——PT实验设计步骤简要说明

1、建立设计环境

- 建立搜索路径(search path)和链接路径(link path)

- 读入设计和库 (read_verilog和read_db)

- 链接顶层设计

- 建立运作条件、连线负载模型、端口负载、驱动和传输时间

2、说明时序声明(约束)

定义时钟周期、波形、不确定性(uncertainty)和滞后时间(latency)

说明输入、输出端口的延时。

约束对象:设计、参照、单元、端口、引脚、时钟、连线

3、说明时序例外情况(timing exceptions)

设置多周期路径(multicycle paths)

设置虚假路径(false paths)

定义最大和最小延时、路径分割(path segmentation)和失效弧(disabled arcs)

4、进行分析和生成报告

时序约束检查

生成约束报告( constraint reports )

生成瓶颈分析报告( bottleneck reports )

生成路径时序报告( path timing reports )。

22 23 实习总结:

此次实习一次以HDMI为例的IC设计培训课程,从一开始就非常期待。在实习培训期间认识了IC基地的从美国留学回来的首席科学家,也是我们学校的教授。他在第一天的演讲过程中不仅讲述自己的故事,还给我们介绍了我国现在IC设计的现状,他讲的很生动,极大的调动了我对IC设计兴趣,使我更加确定走IC设计这条路。

然而,在这次的培训过程中,我并不觉得我掌握了此次培训的内容。造成的原因,我觉得有以下几点:第一、实习的内容与我们平常学的内容有很大程度的脱轨;第二、实习提供的资源有限;第三、实习指导书的内容比较粗糙,尤其是最后ICC和PT的部分。

尽管如此,我觉得我还是了解了IC设计的大概流程的。数字IC设计一开始是写设计芯片的硬件描述语言,在VCS里完成,然后继续用VCS对着这些代码经行验证和仿真,看代码是否符合设计产品的功能。接着用DC将这些代码通过一定的约束条件综合成门级网表,即生成电路原理图。然后又用ICC将这些转变成电路版图。最后再用PT检验它。

还有非常感谢培训我们的几个工程师们,他们对我们提的问题总是很耐心的回答我们。

24

2023年8月3日发(作者:)

实习报告

课程名称 实习设计报告

题目名称 IC集成芯片设计

学生学院 材料与能源

专业班级 微电子(2)班

学 号

学生姓名

指导教师

2015 年 7 月 25 日

目录:

前言·······························································1

正文·······························································3

第一部分——LINUX介绍与常用指令···································3

第二部分——VCS实验设计步骤简要说明·······························5

实验一··························································5

实验二··························································7

实验三··························································8

第三部分——DC实验设计步骤简要说明································9

第四部分——ICC实验设计步骤简要说明······························17

一、给你的设计先创建一个Milkway library·······················17

二、加载网络表,TLU +:的约束和控制·······························18

三、基本流程:设计规划···········································20

四、布局·························································20

五、CTS··························································21

六、布线·························································21

第五部分——PT实验设计步骤简要说明································22

实习总结:··························································24

前言:

终于迎来了期盼已久的实习,毕业实习是每个大学生必须拥有的一段经历,它使我们在实践中了解社会,让我们学到了很多在课堂上根本就学不到的知识,受益匪浅,也打开了视野,增长了见识,使我认识到将所学的知识具体应用到工作中去,为以后进一步走向社会打下坚实的基础,只有在实习期间尽快调整好自己的学习方式,适应社会,才能被这个社会所接纳,进而生存发展。刚进入单位的时候我有些担心,经历了一连串的实习之后,我努力调整观念,正确认识了单位和个人的地位以及发展方向,我相信只要我们立足于现实,改变和调整看问题的角度,锐意进取,在成才的道路上不断攀登,有朝一日,那些成才的机遇就会纷至沓来,促使我们成为社会公认的人才。

1、培训目的

IC集成芯片设计的设计流程主要包括代码设计和验证VCS(Verilog

Compiled Simulator)、前端设计与逻辑综合DC(Design Compiler)、后端实体设计ICC(IC Compiler)和时序验证PT(Prime Time)。此次实习根据初学者的知识掌握程度合理地安排了实习的实习难度,也让实习生同学能够初步了解IC芯片设计的整个流程,充分的了解芯片设计每一阶段所需要掌握的基本知识和技能。HDMI芯片的仿真验证设计是本次实习的主要研究内容,其中每一阶段从工具介绍、指令操作、仿真设计和最后所要达到的实验目的都有严格的标准,能够达到本次实习要求的目的。

2、实习时间

2015年7月11日至2015年7月25日

3、实习地点

广州星海集成电路基地有限公司(广东工业大学IC基地内)

4、实习内容:

IC设计培训与实习。具体内容:①前期准备:Linux系统;②代码设计和验证:VCS(Verilog Compiled Simulator);③前端设计与逻辑综合:DC(Design

Compiler);④后端实体设计:ICC(IC Compiler);⑤时序验证:PT(Prime Time)

5、实习经过:

实验时间

两天

两天

实验内容

前期准备:

Linux系统

代码设计和验证:

VCS(Verilog Compiled

Simulator)

前端设计与逻辑综合:

DC(Design Compiler)

大纲要求

①工具简介;

②操作指令基本说明。

①编写HDMI的Testbench文件;

②进行VCS仿真并验证RTL编码逻辑功能的正确性。

①工具简介;

②根据HDMI设计的要求,编写约束脚本;

两天

1 ③按流程编译导出HDMI的Netlist网表文件。

①ICC工具简介;

②HDMI的FloorPlan,Preroute设计;

③布局优化和时钟树综合;

④布线以及优化。

①与时序相关的概念介绍;

②进行HDMI的时序分析。

总结并提交实验报告

四天

后端实体设计:

ICC(IC Compiler)

时序验证:

PT(Prime Time)

两天

三天

6、实习结论:

本次实习通过Linux系统上应用VCS,DC,ICC,PT这四个工具来设计出一个HDMI系统,熟悉这个设计的流程。其中VCS是Verilog代码的仿真验证工具;DC是逻辑综合工具,将Verilog代码描述转化成优化的门级网表;ICC是后端设计工具;PT是时序验证工具。其实HDMI的代码已经给出,它包括顶层模块hdmi_encoder(信号源)发射模块和他下面的帧时序产生模块(Timing)、周期时序产生模块(Timing_dly)、编码模块(Encoder)。所以我们就是先用VCS仿真验证HDMI的硬件描述代码无错误,再用DC将这代码翻译成逻辑门电路,再用ICC将其转变为IC版图文件,最后用PT验证HDMI版图是否符合时序要求。

2 正文:

第一部分——LINUX介绍与常用指令

VCS,DC,ICC,PT这些工具都是在LINUX系统上运行的工具,所以第一步是了解和认识LINUX系统及其在设计中设计的常用指令。

LINUX的基本介绍这里不再赘述,这里主要叙述Linux的目录结构和基本命令:

1、Linux目录结构

• /:根目录,一般根目录下只存放目录,不存放文件;

• /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls,tar,mv,cat等;

• /boot: 放置linux系统启动时用到的一些文件;

/boot/vmlinuz为系统的内核文件,以及/boot/grub;

• /dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的挂载光驱如:mount /dev/cdrom /mnt;

• /lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序执行过程中,需要调用一些额外的参数时需要的函数库;

• /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问;

• /usr: 应用程序存放的目录;

• /var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件/var/log;

• 显示用户当前路径: pwd

• 查看显示命令: ls [选项] 目录(如果目录缺省,即显示当前目录及文件信息)

ls命令常用选项:

-a 全部文件包括隐藏;

-h 以M为单位显示文件大小结果;

-s 统计此目录中所有文件大小总和;

如 du –sh . (查看当前目录下的文件大小总和)

• 切换目录

. cd 目录

. cd .. 回到上级目录

. cd ~ 回到自己主目录

. cd /home/eda 目录

• 新建目录

. mkdir 目录

常用选项: -p

mkdir /home/eda/AAA/BBB,即在/home/eda目录下,新建AAA目录及AAA目录下的子目录BBB;

• 删除目录

.rm [选项] 文件名或目录名

.常用选项:

.-r 删除目录

3 .-f 强制删除

.-i 删除前询问

如强制删除/home/tmp目录: rm -rf /home/tmp

2.2复制

.cp [选项] 源路径/源文件 目标路径/新文件名

.常用选项:

.-r 复制目录

.-b 覆盖同名文件

.-f 强制复制

如复制/home/tmp/cpp 目录到 /tmp: cp -r /home/tmp/cpp /tmp

2.3压缩管理

• 解压缩

.tar [选项] 生成文件 目录/文件

.常用选项:

.-c 创建一个压缩文件的参数指令

.-x 解开一个压缩文件的参数指令

.-t 查看tar file 文件里面的文件

.-z 是否同时具有gzip的属性

.-j 是否同时具有bzip的属性

.-v 压缩过程中显示文件

.-f 使用档名,在f之后要立即接档名

• 解压缩tar实例:

打包:

tar -cvf lab2015 仅打包,不压缩 (lab2015为目录)

tar -zcvf lab2015 以gzip压缩方式打包

解压缩:

tar -xvf 解压缩包

tar -ztvf 查阅包中文件内容

tar -zxvf 解压缩gz格式的压缩包

2.4系统账户环境

• finger:显示系统账号的相关信息

常用选项:

-l 列出账户的信息

例如: finger -l [用户名] (不加用户名即查询当前用户信息)

• chsh:改变登入系统时的shell

4 常用选项:

-s 指定系统登入时的shell

-l 列出系统支持的所有shell

例如: chsh -s /bin/csh

第二部分——VCS实验设计步骤简要说明

实验一

1、打开终端,进入VCS_Tranning文件夹下面的Lab1子文件夹parta。

指令: shell>pwd

shell> cd vcs/lab1

shell> ls

2、使用VCS对在parta里的4个Verilog文件,分别为:hdmi_encoder.v,encoder.v,timing.v,timing_dly.v,进行编译产生可以执行的二进制文件simv。

指令: shell> vcs hdmi_encoder.v encoder.v timing.v timing_dly.v

结果:

3、运行simv这个二进制文件。

指令: shell> ./simv

结果:

5 4、产生hdmiv的可执行文件,而不产生simv

指令: shell> vcs hdmi_encoder.v encoder.v timing.v timing_dly.v

-o hdmiv

5、运行hdmiv文件

指令: shell> ./hdmiv

结果:运行完毕后的结果和第3步骤的结果进行对比,你会发现CPU Time显示时间基本上是一样的

6、是终端进入文件夹partb,并查看其中的文件。

指令: shell> cd ../lab2

shell>ls

结果:进入lab2文件夹,发现只有两个文件hdmi_encoder.v encoder.v。

7、若是需要重新编译这个设计,我们需要关联到library目录下的文件,这用的是“-y lib_dir”开关选项,lib_dir是参考库的目录,vcs从该目录下寻找包含引用的Verilog文件;“+libext+.v”参考目录的.v文件,多个文件使用“+”连接;“-R”这个开关选项是编译之后立即进行仿真。

指令: shell> vcs hdmi_encoder.v encoder.v -y ../library

+libext+.v -R

8、在当前文件夹中创建名称为hdmi2.f的文件,并使用编辑工具打开hdmi2.f文件,输入如下的内容:

指令: shell>touch hdmi2.f

shell>gedit hdmi2.f

9、使用开关选项“-f”,就是可以把所有的.v文件提前输入到.f文件中,下次运行vcs只需要直接调用.f文件即可,省去手工重复书写代码烦恼。

指令: shell>vcs -f hdmi2.f -R

结果:

6

实验二

1、运行程序

指令: shell>cd lab2

shell> vcs -f hdmi2.f -R

结果:运行程序后,程序出现了两个警告,并且警告来自4个.v文件的hdmi_encoder.v文件。

2、使用编辑工具gedit打开hdmi_encoder.v文件,查看里面的代码。按照下图所示的方式修改hdmi_encoder模块的程序,然后保存并退出。

指令:shell> gedit hdmi_encoder.v

7

3、重新编译和仿真

指令:shell> vcs -f hdmi2.f -R

结果:之前的警告提示消失,表明程序修改正确。

实验三:

1、进入lab3,并启动VCS的图形界面DVE。

指令: shell>cd lab3

shell>vcs -f hdmi.f -debug_all -R -gui &

2、通过鼠标左键选中模块区的顶层文件“top”,然后点击鼠标右键,进入“show

schematic”即可以查看顶层模块的原理图,如下图所示。根据这种方法可以同样查看每个子模块的原理图。

3、查看某个模块的时序图,选中模块后点击鼠标右键,选“Add To Waves”,然后选“New Wave View”,下图是“Hdmi_encoder”模块的部分时序截图。

8

第三部分——DC实验设计步骤简要说明

1、启动DC

指令: shell>dc_shell

shell>design_vision

dc_shell>start_gui

结果:

2、检查synopsys_文件

3、设置库文件和搜索路径

要调用的库文件:

target_library 用于设置综合时所要映射的库。

link_library 是链接库,它是DC在解释综合后网表时用来参考的库。

9 symbol_library 为指定的符号库。

Synthetic_library 是DesignWare综合库。

设置库文件和搜索路径的方法有两种:

方法一:

在图形界面下可以File→setup设置库文件和搜索路径,在search patch中添加rtl和script目录,设置link_library为*sc_;target_library为sc_;symbol_library为。

如下图所示:

方法二:

source脚本文件(tcl)

10 这种方法比图形界面设置库文件和搜索路径较为直观,并且容易检查,可读性较高。

4、读Verilog代码

操作:file>read

11 5、Link

6、添加约束

source ./scripts/HDMI_

设置频率为300MHz,得到周期为3.33ns;一般来说输入和输出延迟分别最多占总周期的40%;

source latency延迟时间表示时钟源产生时钟后,需要经过一段网络延时才能到达被综合的模块的时间。

network latency 延时表示经过source latency后到达内部触发器需要的延迟。

uncertainty 延时表示clock skew+jitter+margin 的和。

transition延迟表示针对时钟端口或引脚使用的转换值。

propagated 延迟,用于布局之后的综合,此时的网络延时已经可以由时钟树上的buffer确切的推断出。

12

7、检查和报告

check_timing timing 检查是否有路径没有加约束

report_clock 报告时钟周期

report_clock -skew 报告各部分的延迟时间

report_port -verbose 报告所有input,output端口属性和约束值。

write_script -out scripts/HDMI_保存上面的报告结果,

write -format ddc -hier -out mapped/HDMI_ 保存未映射的网表。

8、综合

compile_ultra 综合优化时加入 -no_autoungroup(不拆分模块边界)和

-scan(直接将设计映射到扫描触发器)。综合时不同的开关选项会得到不同的优化结果,-spg允许通过寄存器的复制、网表拓补结构的阻塞优化来优化设计;并且在 ddc 网格里加入大概的布局信息,布局信息作为ICC里placement的起点,更好的联系synthesis(DC)和post-placement(ICC) 之间的时序关系。retime选项可以通过修改寄存器的逻辑位置实现优化,如在合适的位置插入寄存器实现流水线结构增加电路的吞吐量。compile_ultra 不加-no_autoungroup

选项时, 即默认条件下会去除模块边界,通过合并两个模块之间的逻辑后再优化可实现更优的综合结

果。

这里我们选用-no_autoungroup -scan 来优化设计。

9、查看和保存报告

report_timing > rpt/HDMI_TX/

13

时序报告

上图可知,slack的值为0,当slack的值大于等于0时表示综合后的结果满足时序约束要求,报告的Path Type是max,即setup timing(建立时间)的报告,在DC里不优化hold timing(保存时间),hold timing在ICC里做优化。表格里Path左边的r和f代表是上升沿触发还是下降沿触发。

14

report_timing > rpt/HDMI_TX/

面积报告

report_timing > rpt/HDMI_TX/

15 功耗报告

16 第四部分——ICC实验设计步骤简要说明

一、给你的设计先创建一个Milkway library

1、更改当前目录lab1_data_setup看看该目录的内容

指令:UNIX% cd ../lab1_data_setup

UNIX% ls –a

2、从Linux系统终端里启用ICC

指令:UNIX% icc_shell

3、通过查询一个用户定义的变量来验证synopsys_文件被读进去:

指令:printvar sdc_file

4、开启图形用户界面

指令:start_gui

结果:

5、打开Create Library 对话框,然后按下图设置

操作:File Create Library

17 6、创建risc_ 文件

指令:UNIX% ls –a risc_ OR

icc_shell> ls risc_

结果:你可以看到三个库*文件和一个锁文件

二、加载网络表,TLU +:的约束和控制

1、打开刚建的design libery文件

操作:File Open Library

结果:如果入口是灰色的,说明已经打开。

2、打开Import Design 对话框,并在Input format 选择Verilog

操作:File Import Designs

3、单击“添加”然后浏览选择文件design_data / risc_chip V并打开。顶层设计的名义进入$top_design(或risc_chip)。点击确定。

4、设置TLU+文件,按下图设置

操作:File Set TLU+

18 5、检查物理和逻辑库的一致性

指令:check_library

6、检查TLU +文件被附加,他们通过三检查

指令:check_tlu_plus_files

结果:你应该看到max_tlu +列出的文件,min_tlu +和mapping_file和所有的检查应该通过了

7、验证已加载的指定链接库

指令:list_libs

8、定义power/ground引脚和网络之间的逻辑连接

指令:source $derive_pg_file

check_mv_design -power_nets

结果:

9、应用顶层设计约束

指令:read_sdc $sdc_file

10、检查是否有任何关键时序约束(例如时钟,输入/输出约束)丢失

指令:check_timing

11、请检查“timing exception” ”的限制是适用于您的设计。

指令:report_timing_requirements

12、检查时间分析是否沿任何路径被禁用

指令:report_disable_timing

19 13、检查设计是否已被配置为一个特定的“模式”或“案例”,例如“功能”与“测试”模式。

指令:report_case_analysis

14、验证时钟是适当的模拟

指令:report_clock

report_clock –skew

15、应用一些时间和优化中指定/脚本/ opt_控件。

指令:source $ctrl_file

16、保存文件,注意新的二进制文件在risc_/cel

指令:save_mw_cel –as RISC_CHIP_data_setup

三、基本流程:设计规划

1、在提供的DEF文件读取

指令:read_def $def_file

2、确定标准的单元不会被放置电源和接地的金属线下

指令:set_pnet_options -complete {METAL3 METAL4}

3、保存设计单元和通知新的二进制文件在risc_/cel

指令:save_mw_cel –as RISC_CHIP_floorplanned

四、布局

1、放置和优化设计的时间,并产生一个定时报告

指令:place_opt

redirect -tee place_ {report_timing}

2、在layoutwindow,放大并在标准单元布局看

3、保存设计单元

指令:save_mw_cel –as RISC_CHIP_placed

20 五、CTS

1、您将使用默认设置来生成时钟树

指令:remove_clock_uncertainty [all_clocks]

set_fix_hold [all_clocks]

clock_opt

redirect -tee clock_ {report_timing}

2、打开时钟树

操作:Clock Color By Clock Trees

六、布线

1、打开ICC的图形界面

指令:UNIX% icc_shell -gui

2、从risc_

design library下载RISC_CHIP_cts 单元

A、File Open Design …

B、按打开Select Library 对话框,然后选择中的risc_ 并选择

C、选择RISC_CHIP_cts

,并点击OK按钮

3、重新设置的时间和优化控制

指令:source $ctrl_file

4、开始布线

指令:route_opt

5、生成时间报表

指令:view report_timing -nosplit; # OR use aliases:

v rt

6、默认情况下报告显示最大延迟或设置时间。产生最小延迟或保持定时报告。你也应该看到,没有任何违反

指令:v rt –delay min

7、产生物理设计统计

指令:report_design –physical

8、保存设计,并关闭ICC

指令:save_mw_cel -as RISC_CHIP_routed

exit

or

quit

21 第五部分——PT实验设计步骤简要说明

1、建立设计环境

- 建立搜索路径(search path)和链接路径(link path)

- 读入设计和库 (read_verilog和read_db)

- 链接顶层设计

- 建立运作条件、连线负载模型、端口负载、驱动和传输时间

2、说明时序声明(约束)

定义时钟周期、波形、不确定性(uncertainty)和滞后时间(latency)

说明输入、输出端口的延时。

约束对象:设计、参照、单元、端口、引脚、时钟、连线

3、说明时序例外情况(timing exceptions)

设置多周期路径(multicycle paths)

设置虚假路径(false paths)

定义最大和最小延时、路径分割(path segmentation)和失效弧(disabled arcs)

4、进行分析和生成报告

时序约束检查

生成约束报告( constraint reports )

生成瓶颈分析报告( bottleneck reports )

生成路径时序报告( path timing reports )。

22 23 实习总结:

此次实习一次以HDMI为例的IC设计培训课程,从一开始就非常期待。在实习培训期间认识了IC基地的从美国留学回来的首席科学家,也是我们学校的教授。他在第一天的演讲过程中不仅讲述自己的故事,还给我们介绍了我国现在IC设计的现状,他讲的很生动,极大的调动了我对IC设计兴趣,使我更加确定走IC设计这条路。

然而,在这次的培训过程中,我并不觉得我掌握了此次培训的内容。造成的原因,我觉得有以下几点:第一、实习的内容与我们平常学的内容有很大程度的脱轨;第二、实习提供的资源有限;第三、实习指导书的内容比较粗糙,尤其是最后ICC和PT的部分。

尽管如此,我觉得我还是了解了IC设计的大概流程的。数字IC设计一开始是写设计芯片的硬件描述语言,在VCS里完成,然后继续用VCS对着这些代码经行验证和仿真,看代码是否符合设计产品的功能。接着用DC将这些代码通过一定的约束条件综合成门级网表,即生成电路原理图。然后又用ICC将这些转变成电路版图。最后再用PT检验它。

还有非常感谢培训我们的几个工程师们,他们对我们提的问题总是很耐心的回答我们。

24