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
发布评论