半定制设计74LS169计数器功能模块分析doc.docx
《半定制设计74LS169计数器功能模块分析doc.docx》由会员分享,可在线阅读,更多相关《半定制设计74LS169计数器功能模块分析doc.docx(31页珍藏版)》请在冰豆网上搜索。
半定制设计74LS169计数器功能模块分析doc
数字集成电路课程设计
实践教学要求与任务:
74ls169计数器:
(1)74LS169计数器功能模块;
(2)工作时钟10kHz即可;
(3)使用SMIC工艺库smic18mm_1P6M完成设计;
(4)完成全部流程:
设计规范文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、时序仿真、物理验证等。
工作计划与进度安排:
第1-2天:
讲解题目,准备参考资料,检查、调试实验软硬件,进入设计环境,开始设计方案和验证方案的准备;
第3-5天:
完成设计,经指导老师验收后进入模块电路设计(验收设计文档);
第6-9天:
完成模块电路代码输入,并完成代码的仿真(验收代码与仿真结果);
第9-10天:
约束设计,综合(验收约束与综合结果);
第11-12天:
布局布线,完成版图(验收版图结果);
第13-14天:
物理验证、后仿真,修改设计(验收物理验证结果和时序仿真结果);
第15天:
整理设计资料,验收合格后进行答辩。
摘要
计数器74ls169为可预置的4位二进制同步加/减计数器。
当置入控制端(LOAD)为低电平时,在CLOCK上升沿作用下,输出端dout(QA-QD)与数据输入端din(A-D)相一致。
169的计数是同步的,靠CLOCK同时加在4个触发器上而实现。
当ENP和ENT均为低电平时,在CLOCK上升沿作用下QA-QD同时变化,从而消除了异步计数器中出现的计数尖峰。
当计数方式控制(U/D)为高电平时进行加计数,当计数方式控制(U/D)为低电平时进行减计数。
169有超前进位功能。
当计数溢出时,进位端(RCOUT)输出一个低电平。
本文介绍了在DesignCompiler下进行逻辑综合和脚本相关约束,然后根据DC综合后的网表,使用Encounter进行自动布局布线,再使用ModelSim进行功能后仿真、分析后仿真波形得出结果。
完成了功能和时序仿真,从而保证了设计的功能与时序的正确性。
关键词计数器;VerilogHDL;tcl;仿真;DesignCompiler;逻辑综合;Encounter;物理验证;后仿真;
引言
集成电路是电子工业的基础。
以集成电路为基础的电子信息产业的发展,对国民经济发展、产业技术创新能力的提高及现代国防建设都具有极其重要的作用。
而集成电路设计业则是集成电路产业链的核心。
随着集成电路技术的发展,集成电路设计的手段也经历了从手工设计到计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)。
在20世纪90年代开始逐步发展到电子设计自动化(ElectronicsDesignAutomation,EDA)阶段。
CAD/EDA工具已经成为当今集成电路设计和制造流程中的必不可少的部分[1]。
Synopsys是为全球集成电路设计提供电子设计自动化(EDA)软件工具的主导企业。
为全球电子市场提供技术先进的IC设计与验证平台,致力于复杂的芯片上系统(SoCs)的开发。
同时,Synopsys公司还提供知识产权和设计服务,为客户简化设计过程,提高产品上市速度。
Cadence公司的电子设计自动化(ElectronicDesignAutomation)产品涵盖了电子设计的整个流程,包括系统级设计,功能验证,IC综合及布局布线,模拟、混合信号及射频IC设计,全定制集成电路设计,IC物理验证,PCB设计和硬件仿真建模等。
Cadence公司工具SoCencounter是一完整的设计平台,可以完成从RTL输入到GDS输出的所有半定制IC设计流程。
我们在设计中主要采用其版图规划(Floorplan)、布局(placement)、布线(route)、时钟树综合(CTS)、信号完整性分析(SI),以及RC提取等功能,也就是完成后端设计。
本设计采用VerilogHDL语言描述,设计一个计数器,DesignCompiler进行约束及综合。
DesignCompiler的操作有Tcl命令来实现,使用Encounter进行布局布线,还要用Modelsim进行功能仿真和后仿真,实验环境为Linux操作系统。
完成一次RISC程序存储器的全流程设计。
1功能描述及电路设计
1.1电路性能
四位二进制同步计数器74LS169真值表见下图1.1.其中LD为置数端,当其为低电平时,输出置成d1,d2,d3,d4。
CTt(ENt)和CTp(ENp)为两个计数控制端。
U/D为计数控制方式,当其为高电平时进行加计数,当其为低电平时进行减计数。
RPPLECARRYOUT为进位端,当计数溢出时,其为低电平。
表1.1真值表
输入
输出
LD
ENp
ENt
U/D
Clk
D0
D1
D2
D3
Q0
Q1
Q2
Q3
0
x
x
x
1
d0
d1
d2
d3
d0
d1
d2
d3
1
0
0
1
1
x
x
x
x
加计数
1
0
0
0
1
x
x
x
x
减计数
1
1
x
x
x
x
x
x
x
保持
1
x
1
x
x
x
x
x
x
保持
1.2电路接口
74ls169电路有时钟信号,置数控制信号,计数控制信号,计数方式控制信号等信号。
具体接口如下表1.2所示。
表1.2接口信号表
名称
IO属性
描述
备注
clk
in
时钟输入端
上升沿有效
LD
in
输入信号1bit,置数端
低电平有效
Ent/ENp
in
输入信号1bit,计数控制端
低电平有效
U/D
in
输入信号1bit,加/减计数方式控制端
高电平加计数
低电平减计数
din[3:
0]
in
输入信号4bit
d1d2d3d4
dout[4:
0]
out
输出信号4bit
QaQbQcQd
1.3电路结构
依照功能,74ls169电路的功能框图如下所示。
图1.1电路功能框
2功能仿真
这里使用Mentor公司的Modelsim,Modelsim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。
它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。
2.1仿真的功能列表
功能仿真针对每一条设计需要实现的功能进行。
设计中要求实现的、需要仿真列表如下:
1)时钟信号——当有时钟时电路正常工作;没有时钟信号时,除复位外所有的输入没有响应,所有的输出没有变化。
2)置数功能——当置数控制信号有效时,当前输出为预置值。
3)加计数功能——当计数方式控制信号为高电平时进行加计数。
4)减计数功能——当计数方式控制信号为低电平时进行减计数。
5)保持功能——当计数控制信号为低电平时保持当前计数。
6)进位功能——当计数溢出时,进位为低电平。
2.2顶层仿真平台与激励
仿真激励的构造是针对需要验证的功能的,测试文件为ls74_169_tb.v,将ls169.v中的激励信号引入,加载到例化的功能模块中,这里采用查看波形的方式确认输出是否正确。
激励直接测试输出是否符合74ls147真值表的真值关系。
需要查看的波形的功能有以下内容:
输入波形是否符合激励设定的值;输出是否符合期待的功能。
2.3电路功能仿真结果
1)置数功能,这里置数值为9(1001),当ld信号为低电平时,dout输出则为9。
如下图3.2.1所示:
图3.2.1
2)加计数功能,当ud信号为高电平时,进行加计数,如下图3.2.2所示:
图3.2.2
3)减计数功能,当ud信号为低电平时,进行减计数,如下图3.2.3所示:
图3.2.3
4)保持功能,当计数控制端为高电平时,保持当前状态。
如图3.2.4
图3.2.4
5)进位功能,当输出溢出时,rc变为低电平。
如图3.2.5
图3.2.5
3约束及逻辑综合
3.1约束策略
约束部分是本次课程设计的重点内容,对于一个由时钟控制的数字逻辑电路来说,时序是最为重要的。
本电路分为三个module结构(dc_top.dcLabTop和iopads)。
主程序文件dc_top.v为主要程序模块。
输入输出PAD的文件名为iopads.v。
该部分的作用是选择对应的PAD将功能电路的输入输出与外部链接,种类和数量根据功能电路的接口而定,PAD的选择根据需要的电气特性从库中选择。
顶层文件为dcLabTop.v,此部分内部包含了功能电路和PAD,作用为连接主程序和PAD。
3.2脚本
首先是读入源代码,也就是HDL文本描述的设计文件,此处不用制定目录,DesignCompiler会在搜索目录中搜索。
tcl语句如下:
read_verilog{aa.vdcLabTop.viopads.v}
读入设计原文件后,一般设定当前设计,这样约束条件才可能有针对性的施加。
tcl语句如下:
current_designdcLabTop
设定当前设计后,要完成链接,也就是将设计与库链接起来,用于映射过程中搜索相应的单元,完成综合。
tcl语句如下:
Link
检查设计,主要完成检查转换的设计。
tcl语句如下:
check_design
然后对设计设定时序约束,这是最重要的一项约束,用于设定设计的工作速度。
针对不同的设计部分,有不同的约束方法。
针对本次设计,采用全同步,双时钟工作的实际情况。
以下语句设定时钟及属性、输入输出信号时间余量。
设定名称为clk0的时钟,由于采用40M的时钟,为了给予一定的余量,故设定时钟周期为24ns。
tcl语句如下:
create_clock-name"CLK"-period1000000-waveform{5000001000000.000}{CLK}
告诉综合器不要对时钟网络进行驱动,这个工作将在后续版图布局布线中进行。
tcl语句如下:
set_dont_touch_network[get_clocks"CLK"]
设定输入信号最大时间余量。
tcl语句如下:
set_input_delay-clockCLK-max-rise600000"PRESETEN1EN2DATAINTDATAINM"
设定输出信号最大时间余量。
tcl语句如下:
set_output_delay-clockCLK-max-rise600000"OUT10OUT6OUT7OUT8OUT9OUTOUT2OUT3OUT4OUT5"
check_timing
设定综合的操作条件。
tcl语句如下:
set_operating_conditions-maxslow-max_libraryslow-minfast-min_libraryfast
设定线负载模型,本设计选择tsmc18_wl20模型。
tcl语句如下:
set_wire_load_model-nametsmc18_wl20-libraryslow
设定扇出最大负载能力。
tcl语句如下:
set_max_fanout3285aa
驱动能力设定。
tcl语句如下:
set_max_transition2.0aa
设定输出网表的格式规则,输出未优化的设计。
tcl语句如下:
setverilogout_no_tritrue
set_fix_multiple_port_nets-all-buffer_constants
输出时序报告。
tcl语句如下:
rc>../rpt/tim.log
输出网表。
tcl语句如下:
write-fverilog-hier-o../rpt/dc_top.sv
输出综合数据文件。
tcl语句如下:
write-fddc-hier-o../rpt/dc_top.ddc
report_area>../rpt/top.area.log
write_sdc../rpt/dc_top.sdc
输出延时文件。
tcl语句如下:
write_sdf-version2.1../rpt/dc_top.sdf
3.3综合文件
首先在桌面建立dcLab作为本次实验dc的操作主目录。
在dcLab目录下,建立设计存放目录如code、约束文件目录如constrn、输出网表文件目录ntlst、报告输出目录rpt、log文件目录log、dc启动目录work。
在综合前需要准备以下几个文件,以便使软件可以正常工作。
.synopsys_dc.setup文件即启动项文件:
在这个文件中,需要将所用到的库单元文件的路径和电路设计文件所存放的路径写入,以便软件在工作时能够找到这些文件并正确识别。
*.v文件:
因为本次课程设计所使用电路描述语言为verilogHDL语言,所以至少需要将顶层TOP设计文件、功能电路的设计文件、PAD设计文件准备好,即准备好一个正确可用的设计,以便用于约束综合,本设计将*.v文件存放在code目录下。
Tcl语句文件:
在本次课程设计中使用的是命令界面,使用Tcl语言进行操作,所以需要准备好相应的Tcl命令,以便对设计进行约束综合等相应操作,本设计将它存放在constrn目录下。
库文件:
本设计采用的是tsmc公司的0.18um标准单元库的所有文件,存放在目录:
/opt/eda/designKit/下面,设计过程中需要查找的话注意路径与示例中的图片上所示路径稍有不同。
3.4综合环境
本次课程设计所使用的综合工具DesignCompiler,是运行在Linux操作环境下。
所以要能够运用简单的Linux系统命令,以便于能够正常使用综合工具。
DesignCompiler(简称DC)是synopsys公司的ASIC综合器产品,它可以完成将硬件。
描述语言所做的RTL级描述自动转换成优化的门级网表。
DC得到全球60多个半导体厂商、380多个工艺库的支持。
Synopsys的逻辑综合工具DC占据91%的市场份额。
DC是工业界标准的逻辑综合工具,也是Synopsys最核心的产品。
它使IC设计者在最短的时间内最佳的利用硅片完成设计。
它根据设计描述和约束条件并针对特定的工艺库将输入的VHDL或者Verilog的RTL描述自动综合出一个优化的门级电路。
它可以接受多种输入格式,如硬件描述语言、原理图和网表等,并产生多种性能报告,在缩短设计时间的同时提高设计性能。
3.5综合过程
3.5.1综合流程
DesignCompiler可以针对层次化的组合电路或者时序电路的速度、面积和可布性进行优化。
按照所定义的电路的测量特征所要达到的目标,DesignCompiler综合一个电路并将其放入目标库中,这样可以生成适用于你的计算机辅助设计工程(CAE)工具的原理图或网表。
综合的过程如下:
读入设计及其子设计
设置顶层的设计特性参数
设置实际时序和面积目标参数
执行check_design验证设计,识别并且更正错误
进行DesignCompiler优化
综合流程如下:
设置启动项文件→读入源代码→链接,设计检查→时序路径约束→编译综合→结束
3.5.2综合操作过程
首先打开Linux中命令终端。
进入以准备好的.synopsys_dc.setup文件所在路径。
执行命令,打开DesignCompiler。
进入Tcl命令界面。
命令如下:
snps_lic
cdDesktop/dcLab/work/
design_vision&
运行后,读入文件将在终端得到如下图图3.1界面,即进入DC的界面。
图3.1DesignCompiler的程序界面
因为已经做好了约束文件mamashuomingziyaochang.con。
直接通过图3.1中下面的TCL命令栏中输入命令:
Sourcemamashuomingziyaochang.con
DC软件将会进行一系列管脚约束并生成dc_top.sv网表文件和其他的报告文件。
图3.2生成的dc_top.sv图
图3.3TCL命令执行图
4布局布线
4.1文件准备
同所有的EDA工具一样,Encounter在进行设计之前也要准备文件。
一般必须要有时序文件lib、SI工具CeltIC进行信号完整性分析的cdb文件、用于RC提取的电容表文件capTbl、综合工具输出的门级综合网表、定义工艺的版图交换文件LEF(LibraryExchangeFormat)、时序约束的sdc(SynthesisDesignConstraints)文件、PAD位置约束的io文件。
其中经过DesignCompiler对其进行综合后获得了网表文件dc_top.sv并修改为dc_top.v文件,以及约束文件dc_top.sdc,pad约束的io文件需要手工书写。
这里,I/OPAD已经在综合前添加进入网表中,所以在布局布线前只需在网表中的顶层模块下加入电源PAD和拐角连接PAD,就行了如下图所示。
图4.1在网表中加入电源PAD和拐角连接PAD
然后编写padio.io文件,一般在设计导入到Encounter时,为了在设计导入的时候同时指定设计中各个PAD具体的位置,这可以通过在导入设计的同时导入分配PAD位置的文件来完成。
本设计加上VDD和VSS共6个I/O端口和4个拐角连接。
4.2布局布线过程
首先打开Linux中命令终端,进入启动Encounter的工作目录,执行命令,打开Encounter。
SOCEncounter软件正常启动后按照以下流程操作:
1)Design_import,读入设计所需要的库文件和设计文件;
2)FloorPlan,对整个版图进行布局规划;
3)GlobalNetConnection,把标准单元,电源PAD等版图中用到的cell的pin和电源的net一一对应起来;
4)AddPowerRings,添加core的电源环和地环,在数字标准单元区域的周围放置powerring,用于提供数字部分的电源和地;
5)AddStripes,用于在芯片中插入一些横的竖的电源线,保证供电;
6)SpecialRoute(SRoute),把标准单元的电源以及给core供电的电源pad和core电源环连接起来;
7)PlacementBlockage,在电源的Stripes和Routing的blockage的地方放置一些blockage,防止在这些地方;
8)Placement,放置标准单元;
9)TrailRouting,进行初步的布线,布线完成进行setuptime的时序分析和优化;
10)CreateClockTree,为大扇出的时钟线布时钟树,完成建立时钟树后进行holdtime时序分析和优化;
11)NanoRoute,细节优化布线,是encounter的最强大工具,用于细节、优化布线。
12)SI,对信号有噪声线进行修补和优化;
完成以上操作后得到版图如下。
图4.2可控脉冲发生器的版图
4.3物理验证
这里物理验证主要是通过Encounter的Verify进行几何规则检查(VerifyGeometry)、连线的连接性(VerifyConnectivity)和金属密度检查(VerifyMetalDestiny)。
几何规则检查的报告如下。
图4.3几何规则检查报告
连线的连接性检查报告如下。
图4.4连线的连接性检查报告
因为刚完成的版图金属密度过低,所以要添加对电路没有影响的金属填充物,添加完MatelFiller后,金属密度报告如下。
图4.5金属密度检查报告
5后仿真
本设计采用的后仿真工具同样是Modelsim。
从之前的布局布线中导出电路的网表(*.v)和延时文件(*.sdf),并构建测试平台和激励,在测试平台中通过加入以下句子就会在仿真时引用延时文件:
initial$sdf_annotate("dcLabTop.sdf",dcLabTop.sim);
后仿真结果如图5.1。
图5.1后仿真结果
6总结
这一次课程设计对于没接触过Linux系统的我来说在一开使确实是一个小挑战首先在环境搭建方面,在Linux系统上运行DesignCompiler,。
但通过反复的尝试,我成功的完成了设计环境的搭建。
基本的指令随着不断的应用也渐渐熟悉起来。
通过编写约束文件,更加清楚了集成电路设计中逻辑综合(前端综合)的核心内容。
通过广泛地查阅资料和实践,对相应的TCL命令也渐渐熟悉起来。
对时序约束、面积约束、工作环境设定有了更深刻的理解。
总的来说,这一次设计还是比较成功的,在老师的指导下,所有问题都迎刃而解了。
所以在求解问题的过程中总会遇到问题,我们需要去努力、积极的思考解决问题并总结问题。
当遇到阻塞,不要抱怨放弃,要鼓励自己不断尝试新的方法。
并且努力提高自学能力和与人交流的能力。
虽然是勉强通过了这次课设的验证,但还是存在很多自身的不足,比如说对仿真软件的不熟练,无法熟练的应用DC。
但是这些都是能够克服的,都不算问题,只有发现的问题越来越多,积累的能力也就越来越多。
由衷的感谢老师这学期对我们的严格要求,我觉得只有严格要求自己才能把每件事做到完美。
参考文献
[1]王金明数字系统设计与VerilogHDL电子工业出版社2011.1
[2]JanM.Rabaey,AnanthaChandrakasan,BorivojeNikolic数字集成电路电子工业出版社2012.12
[3]
[4]李群芳.单片微型计算机与接口技术.电子工业出版社,2013.5
附录一:
modulels169top(LD,ENT,ENP,UD,CLK,RSTN,DIN,DOUT,RC);
//
inputLD;
inputENT;
inputENP;
inputUD;
inputCLK;
input[3:
0]DIN;
output[3:
0]DOUT;
inputRSTN;
outputRC;
//
wireLD;
wireENT;
wireENP;
wireUD;
wireCLK;
wire[3:
0]DIN;
wire[3:
0]DOUT;
wireRSTN;
wireRC;
//
wireldc;
wireentc;
wireenpc;
wireudc;
wireclkc;
wire[3:
0]dinc;
wire[3:
0]doutc;
wirerstnc;
wirercc;
//
iopadsiopads(
.LD_PAD(LD),//I
.ENT_PAD(ENT),//