集成电路设计流程认知实验 交通信号灯方针和综合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
课程设计名称:集成电路设计流程认知实验
设计课题名称:交通信号灯方针和综合
班级:指导老师:
姓名:学号:
成绩:设计时间:
设计地点:
集成电路设计流程课程设计报告
一、设计目的:
掌握利用EDA工具软件完成大规模集成电路设计的整个流程。
即由集成电路的前端设计(Verilog 程序设计、功能仿真以及逻辑综合)到版图设计及验证
的全过程。
为以后从事微电子相关行业的工作打下坚实的基础。
二、实验器材和工具软件:
实验器材:电脑。
工具软件:VLSI设计就目前水平,主要依靠由逻辑设计、电路设计、版图设计和测试码生成等诸多功能组合而成的一套软件设计开发系统来完成,也就是VLSI的EDA工具。
其中包括了设计、模拟、故障诊断、综合、制造以及测试等方面,主要分为以下三大类:
模拟验证工具:帮助设计者验证设计是否正确,包括逻辑模拟、电路模拟、时域模拟,设计规则与电学规则检查,版图与电路图一致性检查,版图参数提取等。
设计输入和数据库管理工具:帮助设计者输入设计对象,设计要求和管理设计数据,例如硬件描述与编译,逻辑图与版图的输入编辑等。
综合设计工具:帮助设计者完成各级的设计,例如系统综合,逻辑综合,版图布局布线模块自动生成等。
三、设计内容:
①ALU设计与实现
1 、IC设计流程概括和ALU的代码分析
了解IC设计流程:RTL代码编写、前仿真、综合、后仿真,以及每一步骤使用的工具;分析ALU工作原理,分析层次化设计思想和非层次化设计思想;使用层次化思想和非层次化设计思想完成ALU源代码和测试代码的编写。
2、前仿真
掌握VCS仿真工具的使用,并完成ALU代码的仿真和调试。
3 、综合
掌握综合的概念,综合环境的建立,以及约束文件的编写,综合后生成报表
4 、综合后仿真
掌握后仿真测试代码的修改以及后仿真的目的,掌握层次化设计和非层次化设计不同之处(主要是综合后门级网表的比较)
②交通信号灯方针和综合
设计一个简单的交通信号控制器,下图所示为其状态指示图:
为了简化设计,路口只设立了两种颜色的指示灯,红灯停,绿灯可以直走或者右拐,这里就不作左拐设计了,表1所示为其状态表。
其中Q的值为“1”代表灯亮,为“0”代表灯灭。
下图为交通信号灯结构示意图:
其中:EN为控制使能信号,CLK为时钟输入信号,RST为复位信号,输出端口为Q[7:0] 逻辑输出信号。
四、设计具体步骤:
I、ALU设计与实现
实验要求实现CPU的核心部件之一ALU的功能逻辑,真值表如下:
实验中分别应用层次化和无层次化对ALU进行设计,设计步骤分别如下:
(一)无层次化设计
1 无层次化设计的结构图
2 根据ALU的逻辑功能,编写RTL代码和testbech
ALU.v
RTL代码中,使用case语句,来实现ALU在不同控制输入下的输出功能。
在testbech中,使用for循环语句实现所有情况下的组合输入。
3 前仿真
编写runme.f文件:rtl代码存放在当前路径下的codes文件夹,在当前路径下进行仿真。
运行server% vcs –f runme.f –PP –R +vcsd +define+vcd
server% vcs -f runme.f –RPP,显示波形如下:
4 综合
⑴文件准备
编写启动文件,设置相应设计工艺库的路径,指明相应的目标库,链接库,
建立.synopsys_vss.setup文件:
WORK目录自动建立,用于存放综合过程中产生的临时文件。
⑵编辑scripts文件
setup_alu.tcl:设置工作目录,以及各种文件存放的目录,其中需建立rtl,netlist,script,mapped,unmapped,report目录。
translate_alu.tcl : 根据setup_alu.tcl中的设置进行分析和列表,然后设置
转译的步骤。
constraints_alu.tcl约束文件:
在约束文件中,规定了工作环境,使用的DC中的线载模型,输入输出端的电容值。
compile_alu.tcl:读设计文件和未映射的数据,同时产生综合报告。
⑶运行
分别运行以下两条指令进行转译和映射:
dc_shell-t –f script/translate_alu.dcsh_tcl | tee logs/translate.log dc_shell-t –f script/compile_alu.dcsh_tcl | tee logs/compile.log
运行的各种结果和报错存放在自己建立的logs文件夹下。
⑷查看关于综合的各种报表:
⑸键入design_analyzer,查看da&库
与启动文件中的设置是一致的。
Designs view
Symbol view
Schematic view
5 后仿真
⑴后仿真主要是对综合后的网表文件进行仿真,并且需要加入综合时的库文件和生成的sdf文件。
先要对testbech作如下修改:
⑵编写runme2.f文件,其中包含测试文件、综合后产生的门级网表文件、综合中使用的库文件:
⑶启动编译仿真
执行:vcs -f runme2.f -PP -R +vcsd +define+vcd
vcs -f runme.f –RPP
⑷查看后仿真波形
后仿真中加入了库文件,因此仿真结果中出现了抖动和延迟,主要是由时序问题引起的。
(二)层次化设计
层次化设计与无层次化设计的显著区别在于,将设计进行模块化,由顶层文件top.v 对其进行端口映射和模块综合,之下一层为Decoder 和Four_BIT_ALU,再将Four_BIT_ALU 分层为Fout_BIT 和Single_BIT ,构成整个系统。
1结构图
Decoder
S2S1S0
ALU_CON[7:0]
Four_BIT_ALU
A B
CO 8
8ALU_SUM[7:0]
2 层次化设计代码
按照实验指导书的要求分别编写实验代码,包括top.v 、Decoder.v 、Fout_BIT.v 、Fout_BIT_ALU.v 、Single_BIT.v ,以及测试代码ALU_tb.v 。
Decoder
Four_Bit
Fout_BIT_ALU
Single_BIT
TOP
ALU_tb
3 前仿真
文件准备,runme1.f文件:其中包含5个设计实体文件和一个测试代码文件
Start Up
执行:server% vcs -f runme.f -PP -R +vcsd +define+vcd 仿真波形:与无层次仿真结果相同
Logic窗口
Register窗口
Source窗口
4 综合
[1]同样需要建立相关目录和启动文件,.synopsys_dc.setup 和.synopsys_vss.setup文件与之前相同。
在script的脚本文件中,需要将各个顶层设计实体改为TOP,约束文件不变。
[2] 文件准备好后,进行转译和综合
Run1: dc_shell-t –f script/translate_alu.tcl | tee logs/translate.log Run2: dc_shell-t –f script/compile_alu.tcl | tee logs/compile.log
[3] 可以在report下查看各种报告
综合完成后,可以启动design_analyzer查看综合后的结果,与无层次基本相同。
5 后仿真
与无层次设计相同,进行testbech的修改,文件准备,然后运行编译仿真命令查看波形。
ALU_tb2.v
文件准备
runme.f文件:
Start up
vcs -f runme.f -PP -R +vcsd +define+vcd
vcs -f runme.f -RPP
仿真波形
II、任务一:交通信号灯方针和综合
采用无层次化设计
(1)综合前编译仿真
设计源代码:
定义4位的b用于计数,及a用于表示红绿灯亮灭的状态。
时钟上升沿来临时,当rst为1时,复位,灯全灭;当en为1时,始能信号,开始计数,当b计数至1001,即9时,检测a的值,来控制红绿灯的亮灭。
测试代码:
runme.f文件:
执行:vcs –f runme.f –PP –R +vcsd +define+vcd vcs -f runme.f –RPP 查看波形为:
(2)综合
文件准备:
.synopsys_dc.setup启动文件:
.synopsys_vss.setup文件:
setup_jtd.tcl脚本文件:
translate_jtd.tcl脚本文件:
compile_jtd.tcl脚本文件:
constraints_jtd.tcl约束脚本文件:
其中:
1)工作时钟频率250M,时钟漂移为0.25ns,优化时不需要对Clock network做任何处理;
2)输入除时钟端口外的端口最大延时为1ns,,最小延时为1ns. 输出端口延时为3ns;
3)输入端口max_fanout 1pf (clk port 除外),输入、输出端口负载分别为1pf,5pf;
4)设置除时钟外输入端口过渡时间0.25ns。
运行:
查看report下报告:
键入design_analyzer,查看da&库
读出:
(3)综合后编译仿真
在测试代码中添加:
runme2.f文件:
启动:vcs -f runme2.f -PP -R +vcsd +define+vcd vcs -f runme2.f -RPP查看波形:
查看jtd.timing文件:
满足slack>0
五、设计收获以及存在的问题:
在两个礼拜的课程实践中,我了解了集成电路设计的基本流程,并且对芯片定义、rtl代码编写、前仿真、综合、后仿真的前端流程进行了实验。
实验中遇到很多细小的问题,大多数都可以通过观察出错报告来寻找到错误的位置,很多都是由于粗心的问题,输入代码的时候出错。
实验仅是熟悉了整个设计流程,源代码和测试代码都是现成的,约束文件也是,基本上就是把整个流程过了一遍。
Translate后unmapped文件夹下会产生一个未映射的.db文件,
compile后netlist 文件夹下产生top.v文件,同时mapped 文件夹下产生映射后的top.db文件。
也发现了提供的代码中有不对的地方。
比如translate_alu.tel代码中list后紧接着第一个写的应是顶层文件,否则会出错。
很多时候出错原因找了半小时,甚至一小时也没有找到,最后发现是那里漏了一个空格,这里多了一个回车,所以还是要细心,耐心地自己去查找错误。
仿真正确了之后,进行综合还是会有很多问题。
约束文件的编写也显得很重要,各条命令的作用对象是什么,都要清楚。
在design_analyzer后电路中若只显示方框,那说明库没有导入,需要用ln –s 加上库的路径来链接到自己的综合目录下。
实验中,我了解到对一个系统进行层次化和无层次化两种设计方法各自的特点。
无层次化设计主要从器件的功能出发,编写rtl代码实现要求的功能,而不关心模块化设计和内部结构,设计比较直观,但可能在设计复杂逻辑功能的芯片时不是很方便。
层次化设计则将系统进行模块化分层,顶层使用TOP顶层设计实体对各个模块综合成目标系统。
这种设计方法考虑了功能实现的模块化,有利于复杂系统的模块化设计和IP复用。
总之通过这第一部分的实验知道了很多以前比较模糊的概念,对前端设计有了一个清晰的认识。
从实习过程中,我对前端设计流程有了一个基本的了解,为后面的设计综合做好了准备。
交通灯的任务实验是在上周实验的基础上完成的,在编写代码过程中,发现自己对于一些基本的概念不是很清楚,例如起初在源代码中,使用initial语句赋初值,仿真图形的错误,综合错误。
而对于这次交通灯代码的编写,关键错误出现在时钟clk上,起初在编写源代码时没有出现问题,但是在综合时,酒出现错误“无法找到clk”,而波形中clk也不起作用,原因则是,需要在时钟上升或下降沿作用,否则clk使用不起作用,在改正了源代码和测试代码后,综合过程正确,产生正确的仿真波形。
在综合完成后,查看jtd.timing件,由于设计问题,一直出现slack=0的情况,在不断修改源代码,测试代码和约束文件后,仔细检查各个脚本文件及启动文件,优化设计后,得出正确的结果。
通过本次实验,巩固了verilog程序代码编写的一些概念,对于综合仿真工具也加深的了解,收获颇多。
六、心得体会
经过两周的时间,我深刻的学习到了集成电路设计的各种方法和工具的运用,开始对代码的编写还有一点生疏,并未完全明白前仿真与综合及后仿真之间的关系,认为只要前仿真的波形和能满足要求即可顺利做下去。
之后综合了才发现这样是不够的。
不光是自己按要求创建约束文件总是存在着一些问题,在运行过程中还存在着很多代码书写的错误,往往因为一个不起眼的空格而导致后面一连串的问题。
可当基本编译优化运行没有问题后,在裕量测试方面数值却是负数。
在确定了是代码存在些许问题后,就开始了代码的更正,经过一系列包括计数长度,精简程度等问题的更正后裕值最后为正,而且前仿真的波形图也显示为正确。
之后便是后仿真了,不过一开始还是出现了些许问题,setup time check未找到,在老师的指导下更正参数后,终于成功的完成了后仿波形的测试。
通过此次设计,我对RTL代码编写、前仿真、综合、后仿真,以及每一步骤使用的工具都有了更加深刻的了解,不过发现自己在很多方面还存在缺陷,希望在以后的接触过程中能有所进步和开拓。