数字集成电路设计智能函数发生器.docx
- 文档编号:7956243
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:31
- 大小:887.44KB
数字集成电路设计智能函数发生器.docx
《数字集成电路设计智能函数发生器.docx》由会员分享,可在线阅读,更多相关《数字集成电路设计智能函数发生器.docx(31页珍藏版)》请在冰豆网上搜索。
数字集成电路设计智能函数发生器
北京工业大学
数字集成电路设计
课程设计报告
姓名:
于书伟
学号:
15027321
成绩:
2018年4月
平时情况
(40分)
课题难易度及完成情况(40分)
考试
(10分)
报告
(10分)
成绩
评语
目录
----引用->目录,使用缺省三级即可。
----
目录2
1绪论3
1.1数字集成电路设计流程4
1.2课设任务及所用EDA工具5
2功能设计与仿真6
2.1课题基本原理及模块划分6
2.2“控制寄存器”设计与仿真6
2.3“分频器”设计与仿真8
2.4“寻址计数器”设计与仿真10
2.5“模360加法器”设计与仿真12
2.6“储存波形的ROM”设计与仿真14
2.7顶层模块设计与仿真16
3电路与版图设计22
3.1基于SynopsysDC的电路设计22
3.2基于SynopsysICC的物理设计26
4结论与体会29
绪论
集成电路的出现,开创了人类的硅文明时代,为人类开启了信息化时代的大门。
集成电路作为信息产业的基石,在国民经济中占有举足轻重的作用。
自1958年美国德克萨斯仪器公司发明全球第一块集成电路到现在,集成电路技术经历了从小规模,大规模和超大规模,直到片上系统(SoC)的阶段。
集成电路技术的发展主要体现在以下几个方面:
(1)电路规模和复杂性日益增大。
依照摩尔定理,芯片集成度,即芯片上可容纳的晶体管数目以18个月翻一番的速度高速增长,目前单片芯片上集成的晶体管数目己经发展到数亿量级。
而片上系统(SoC)可以在一块芯片上集成包括CPU、存储器、控制器、A/D转换器的整个系统。
(2)工作频率不断提高。
集成电路工作频率提高迅速,例如微处理器的时钟频率由八十年代的数MHz发展到了目前的数GHz。
(3)器件特征尺寸持续减小。
近十年来,集成电路的最小特征尺寸经历了从0.18μm、0.13μm、90nm到65nm、45nm的发展历程。
集成电路已经进入纳米时代。
随着信息时代的到来,微电子技术成为推动产业进步的核心科技。
半导体产业的发展以IC设计的芯片尺寸急速减小,集成度快速提高为显著特征。
传统的芯片设计方法是手工全定制,但由于半导体工艺的几何缩小,集成电路设计已经到了深亚微米级,在同一面积上晶体管的数目迅猛增加,传统的芯片设计方法几乎变得不可能完成。
同时,用户要求芯片制造商在最短的时间内用最低的费用生产高性能产品,如果继续沿用传统的设计方法,这些都将是IC设计中无法突破的难题。
这就进一步对设计工具和技术提出了更精确更高效的要求。
为了解决这些问题,新的方法学和工具得到了发展。
由此诞生的高性能设计工具和技术不仅
极大的减小了设计人员完成设计的任务,同时设计效率也得到了惊人的提高,晶体管能够最大程度的布满硅片,功能模块能够在短时间内被设计出并且有出色的表现。
高级设计语言,如VHDL/Verilog的应用,取代了手工制作电路图,并且提高了设计重用。
高级逻辑综合工具,能够根据设计描述和约束条件并针对特定的工艺库自动综合出一个优化的门级电路,使得综合能够从行为级开始,大大提高了设计者的设计灵活性,使设计者更进一步脱离了工艺与物理的限制,在最短的时间内最佳的利用硅片完成设计。
物理综合工具的应用,可以直接从门级电路得到版图级的物理实现,根据设置要求自动完成版图合成、时序优化以及布局、绕线的最佳化,并与约束设置相互关联整合,避免了设计中潜在的问题。
此外,前后端设计的分界,更把验证变成了标准的作业流程,前端设计人员将门级网表交给后端设计人员进行布局布线,然后再进行验证操作,不仅减少了人力消耗,也大大缩短了设计时间。
先进的功能及时序验证工具,能够针对复杂、百万门级的芯片进行全芯片的分析验证,让设计者可以比较容易的分析并解决复杂的时序等问题,提高时序收敛的速度。
功能仿真的模拟精度也完全满足深亚微米ASIC设计要求。
本课程设计使用的EDA工具涉及Cadence、Synopsys等主流集成电路设计工具,采用基于标准单元库的数字集成电路的设计流程和方法学,从行为级的HDL描述开始,依次进行系统行为级仿真,RTL级仿真,逻辑综合,综合后仿真,自动化布局布线,最后是版图后仿真。
所有这些步骤都是通过工具自动完成,快速而有效。
数字集成电路设计流程
图1.1集成电路设计流程
具体而言,数字集成电路设计流程如下:
1.设计规格确立(DesignSpecification)
2.架构与设计划分(Architecture&DesignPartition)
3.行为级设计仿真(SystemDesign&Simulation)
4.RTL级设计仿真(RTLdesign&Simulation)
5.综合(Synthesis)
6.形式验证(FormalVerification)
7.静态时序分析(StaticTimingAnalysis,STA)
8.布局前仿真(Pre-LayoutSimulation)
9.布局与布线(AutoPlacement&Route,AP&R)
10.布局后仿真/形式验证/静态时序分析(Post-Sim
&/STA/FormalVerification)
11.DRC/ERC/LVS
12.Tapout
课设任务及所用EDA工具
智能函数发生器
根据题目,在ZeniVDE工具环境下,利用VHDL语言完成集成电路设计,并分别用编写testbench和加激励的方法完成仿真。
基于SynopsysDesignCompiler软件完成电路综合。
基于SynopsysICCompiler软件完成物理综合。
工艺库为smic0.18um。
功能设计与仿真
课题基本原理及模块划分
本次智能函数发生器主要基于直接数字频率合成(DDS)和VHDL技术实现。
主要分为5个部分:
控制寄存器、分频器、寻址计数器、模360加法器和储存波形的ROM。
结构框图如下:
幅度控制字输出
频率控制字
A组
B组
外部时钟
C组
“控制寄存器”设计与仿真
控制储存器的功能是用来将外部输入的数据转换成幅度控制字和频率控制字,进而控制后面的各个功能模块。
源程序中包括两个进程:
sp_proc用来实现输入数据的串并转换;进程mux_proc描述了一个用来输出幅度控制字和频率控制字的多路选择器。
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
entitycontrolleris
port(
clk:
instd_logic;
datain:
instd_logic;
ad:
outstd_logic_vector(15downto0);
freq:
outstd_logic_vector(15downto0)
);
endcontroller;
architecturecontroller_archofcontrolleris
signalout_tmp:
std_logic_vector(16downto0);
begin
sp_proc:
process(clk,datain)
variabletmp:
std_logic_vector(16downto0):
="00000000000000000";
begin
if(clk'eventandclk='1')then
tmp:
=tmp(15downto0)&datain;
endif;
out_tmp<=tmp;
endprocesssp_proc;
mux_proc:
process(out_tmp)
begin
if(out_tmp(16)='1')then
ad<=out_tmp(15downto0);
else
freq<=out_tmp(15downto0);
endif;
endprocessmux_proc;
endcontroller_arch;
仿真程序如下:
libraryieee;
useieee.std_logic_1164.all;
entitycontroller_tis
endcontroller_t;
architecturecontroller_tofcontroller_tis
componentcontroller
port(
CLK:
instd_logic;
DATAIN:
instd_logic;
AD:
outstd_logic_vector(15downto0);
FREQ:
outstd_logic_vector(15downto0)
);
endcomponent;
signalCLK:
std_logic:
='0';
signalDATAIN:
std_logic:
='1';
signalAD:
std_logic_vector(15downto0);
signalFREQ:
std_logic_vector(15downto0);
begin
U0:
controller
portmap(
CLK=>CLK,
DATAIN=>DATAIN,
AD=>AD(15downto0),
FREQ=>FREQ(15downto0));
clk<=notclkafter10ns;
endcontroller_t;
仿真波形如下:
“分频器”设计与仿真
分频器的主要功能是根据频率控制字来决定具体的分频系数,进而输出与频率控制字相对应的时钟信号,然后将输出的时钟信号送入寻址计数器中。
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityclkdivis
port(
mclk:
instd_logic;
freq:
instd_logic_vector(15downto0);
clkout:
outstd_logic
);
endclkdiv;
architectureclkdiv_archofclkdivis
constantcount:
std_logic_vector(15downto0):
="1111111111111111";
signalclk_tmp:
std_logic:
='0';
signalfreq_tmp:
std_logic_vector(15downto0);
signalfreq_count:
std_logic_vector(15downto0):
="0000000000000000";
begin
clkdiv_proc:
process(mclk,freq_count)
begin
freq_tmp<=count-freq;
if(mclk'eventandmclk='1')then
if(freq_count='0'&freq_tmp(15downto1))then
clk_tmp<=notclk_tmp;
freq_count<=freq_count+1;
elsif(freq_count=freq_tmp)then
clk_tmp<=notclk_tmp;
freq_count<=(others=>'0');
else
freq_count<=freq_count+1;
endif;
endif;
endprocessclkdiv_proc;
clkout<=clk_tmp;
endclkdiv_arch;
仿真程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityclkdiv_tis
endclkdiv_t;
architectureclkdiv_tofclkdiv_tis
componentclkdiv
port(
MCLK:
instd_logic;
FREQ:
instd_logic_vector(15downto0);
CLKOUT:
outstd_logic
);
endcomponent;
signalMCLK:
std_logic:
='0';
signalFREQ:
std_logic_vector(15downto0);
signalCLKOUT:
std_logic;
begin
U0:
clkdiv
portmap(
MCLK=>MCLK,
FREQ=>FREQ(15downto0),
CLKOUT=>CLKOUT);
mclk<=notmclkafter5ns;
freq<="0111111111111111";
endclkdiv_t;
仿真波形如下:
“寻址计数器”设计与仿真
寻址计数器的功能是根据分频器送来的时钟信号来产生对存储波形的ROM进行波形输出的寻址信号。
这里的寻址空间是360B,因此这个寻址计数器实际上是一个模为360的计数器。
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityaddress_counteris
port(
clk:
instd_logic;
address:
outstd_logic_vector(8downto0)
);
endaddress_counter;
architectureaddress_counter_archofaddress_counteris
begin
count_proc:
process(clk)
variablecount:
std_logic_vector(8downto0);
begin
if(clk'eventandclk='1')then
if(count<359)then
count:
=count+1;
else
count:
=(others=>'0');
endif;
endif;
address<=count;
endprocesscount_proc;
endaddress_counter_arch;
仿真程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityaddress_counter_tis
end;
architectureaddress_counter_tofaddress_counter_tis
componentaddress_counter
port(
clk:
instd_logic;
address:
outstd_logic_vector(8downto0)
);
endcomponent;
signalclk:
std_logic:
='0';
signaladdress:
std_logic_vector(8downto0);
begin
u0:
address_counterportmap(clk,address);
clk<=notclkafter1ns;
--concurrentstatements
endaddress_counter_t;
仿真图形如下:
“模360加法器”设计与仿真
模360加法器的主要作用是用来产生120°的相移,目的是为了形成三相相差均为120°的输出波形,由于储存波形的ROM的寻址空间为360B,因此当输出的寻址计数大于360时,需对数值进行模360计算。
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitymod360is
port(
address:
instd_logic_vector(8downto0);
address_out:
outstd_logic_vector(8downto0)
);
end;
architecturemod360_archofmod360is
begin
mod_proc:
process(address)
variabletmp:
std_logic_vector(8downto0);
begin
tmp:
=address+120;
if(tmp<360)then
address_out<=tmp;
else
address_out<=tmp-360;
endif;
endprocessmod_proc;
endmod360_arch;
仿真程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitymod360_tis
endmod360_t;
architecturemod360_tofmod360_tis
componentmod360
port(
ADDRESS:
instd_logic_vector(8downto0);
ADDRESS_OUT:
outstd_logic_vector(8downto0)
);
endcomponent;
signalADDRESS:
std_logic_vector(8downto0):
="101010101";
signalADDRESS_OUT:
std_logic_vector(8downto0);
begin
U0:
mod360
portmap(
ADDRESS=>ADDRESS(8downto0),
ADDRESS_OUT=>ADDRESS_OUT(8downto0));
address<=address+1after10ns;
endmod360_t;
仿真波形如下:
“储存波形的ROM”设计与仿真
储存波形的ROM的主要功能是用来储存各种波形数据,目的是通过寻址计数器进行寻址输出,并经过D/A转换来输出各种波形,其中包括方波、正弦波和锯齿波。
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityromis
port(
address:
instd_logic_vector(8downto0);
sel:
instd_logic_vector(1downto0);
data:
outstd_logic_vector(7downto0)
);
endrom;
architecturerom_archofromis
begin
rom_proc:
process(address,sel)
begin
if(sel="00")then
if(address<180)then
data<=(others=>'1');
else
data<=(others=>'0');
endif;
elsif(sel="01")then
if(address<180)then
data<=address(7downto0);
else
data<=address(7downto0)-180;
endif;
else
data<='0'&address(7downto1);
endif;
endprocessrom_proc;
endrom_arch;
仿真程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityrom_tis
endrom_t;
architecturerom_tofrom_tis
componentrom
port(
ADDRESS:
instd_logic_vector(8downto0);
SEL:
instd_logic_vector(1downto0);
DATA:
outstd_logic_vector(7downto0)
);
endcomponent;
signalADDRESS:
std_logic_vector(8downto0);
signalSEL:
std_logic_vector(1downto0):
="00";
signalDATA:
std_logic_vector(7downto0);
begin
U0:
rom
portmap(
ADDRESS=>ADDRESS(8downto0),
SEL=>SEL(1downto0),
DATA=>DATA(7downto0));
sel<=sel+1after10ns;
address<="101011111";
endrom_t;
仿真波形如下:
顶层模块设计与仿真
根据之前的设计,将各个模块作为元件使用,设计顶层模块。
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 集成电路设计 智能 函数 发生器