EDA整理Word文档格式.docx
《EDA整理Word文档格式.docx》由会员分享,可在线阅读,更多相关《EDA整理Word文档格式.docx(35页珍藏版)》请在冰点文库上搜索。
在半成品基础上的设计方式。
半成品含有加工好的大量的晶体管和IO焊盘,但没有布线。
布线由用户设计,实现特定的功能。
◆标准单元(standardcell):
利用厂家的标准单元进行设计的方式。
◆PLD方式:
器件已经制造好,用户自己编程便可实现各种功能。
5、硬件描述语言的不足
电路采用高级的简明结构HDL描述,它意味着放弃了对电路门级实现定义的控制;
由综合工具生成的逻辑实现效果不好;
工具的不同导致综合质量的不同。
第二部分 可编程逻辑器件(PLD)
1、ASIC:
ApplicationSpecificIntegratedCircuits,即专用集成电路,是面向特定用户、具有专门用途的芯片,并依此区别于通用芯片.
2、PLD,ProgrammableLogicDevices,是20世纪70s发展起来的一种新型器件,它的应用和发展不仅简化了电路设计,降低了成本,提高了系统的可靠性,且给数字系统的设计带来了革命性变化。
(二)PLD的分类(p18)
(四)CPLD的结构与特点(EMP7032内部结构图)
CPLD是在PAL、GAL的基础上发展起来的阵列型PLD,具有高密度高速度的优点。
从结构上看,CPLD一般包括3种结构:
◆ 宏单元:
主要包括与或阵列、触发器和多路选择器
等电路,可独立配置为组合逻辑或时序逻辑;
◆ 可编程IO单元:
可独立配置为输入、输出和双向
IO;
◆ 可编程内部连线(PIA):
其作用是在各逻辑宏单
元之间以及宏单元和IO之间提供互连网络。
(五)FPGA的结构与特点(FLEX10K10内部结构图)
与CPLD相比,FPGA具有更高的集成度、更强的逻辑功能和更大的灵活性。
一般由3部分组成:
⏹ 可配置逻辑块(CLB,ConfigurableLogicBlock)
⏹ 输入输出模块(IOB)
⏹ 可编程互连线(PI)
⏹片内RAM
(五)FPGA的结构与特点
1、可配置逻辑块(CLB,ConfigurableLogicBlock):
是FPGA的基本结构单元,不仅能实现逻辑函数,还可以配置成RAM等形式。
其显著特点是内部有查找表(LUT);
2、输入输出模块(IOB):
作用同CPLD;
3、可编程互连线(PI):
作用同CPLD,不同点是其布线延时不固定,与路径有关,而CPLD的固定。
4、片内RAM:
其读的速度(3-4ns)和写的速度(5ns)非常快,比任何片外解决方案快很多倍,可配置成各种形式。
六)在系统可编程(ISP)与边界扫描(BST)技术
1、在系统可编程:
ISP,InSystemProgrammable,指的是对器件、电路板或整个电子系统的逻辑功能可随时进行修改或重构的能力。
2、边界扫描测试(BST)技术:
由于器件越来越复杂,表面封装技术和电路板制造技术的进步,使得电路板的变小变密,传统的测试方法很难实现。
(七)PLD产品概述:
PLD的发展趋势
☐向大规模、高集成度方向发展;
☐向低电压、低功耗、低价格的方向发展;
☐向高速可预测延时方向发展;
☐在PLD内嵌入多种功能模块;
☐向模数混合可编程的方向发展。
二、ALTERA可编程逻辑器件
(二)MAX7000系列器件
MAX7000系列内部结构:
组成模块:
(1)LAB:
LogicArrayBlock,逻辑阵列块,内含16个宏单元,是器件的主要组成部分;
(2)MC:
Macrocell,宏单元,由逻辑阵列、乘积项选择矩阵和可编程触发器组成,用于实现各种逻辑;
(宏单元结构图)
(3)EPT:
ExpanderProductTerm,扩展乘积项,用于辅助逻辑阵列实现复杂的逻辑;
(4)PIA:
ProgrammableInterconnectArray,可编程连线阵列,把LAB相互连接构成所需的逻辑。
这个全局总线是可编程通道,它把器件中任何信号源连到其目的地;
MAX系列的PIA有固定的布线延时,而FLEX系列的布线延时与路径有关;
(5)I/OControlBlock:
I/O控制块,它允许每个I/O单独地配置为输入、输出和双向输入输出中的一种方式。
(图)
(三)FLEX10K系列内部结构:
小结
1)FLEX系列器件的特点:
1.容量大,用于实现复杂的电路和系统
2.内部含有ROM/RAM;
3.内部含LUT,尽量采用查表法实现逻辑函数;
4.FLEX器件内部布局布线的延时与路径有关。
2)器件的特性设定
1.电压摆率(Slew-Rate)设定:
设置低噪声/高速度方式;
2.漏极开路(Open-Drain)设定:
3.多电压(MultiVolt)I/O接口:
FLEX10K的核和外围IO可以工作于不同的电压,其中Vccin引脚为内核和输入缓冲器提供工作电压,Vccio为I/O引脚提供工作电压。
第三部分 可编程逻辑器件开发软件
第四部分:
基于原理图输入的数字电路(系统)设计
2参数化计数器的使用(lpm_counter)
1)输入信号选择
⏹ data[]:
数据输入,用于预置数;
⏹ clock:
输入时钟;
⏹ clk_en:
输入时钟使能;
⏹ cnt_en:
计数器使能;
⏹ updown:
加(1)减(0)法选择;
⏹ aclr:
异步清零;
⏹ aset:
异步置数(AVALUE);
⏹ aload:
异步置数(data[]);
⏹sclr:
同步清零;
⏹sload:
同步置数(data[]);
⏹sset:
同步置数(SVALUE)。
2)输出信号选择
◆ q[]:
计数值输出;
◆ eq[15..0]:
计数值译码输出:
q[]=0eq[0]=1;
q[]=1eq[1]=1;
……q[]=15eq[15]=1;
3参数化RAM/ROM的使用(lpm_rom)
设计要点1:
存储器输入输出的选择:
INPUTS OUTPUTS
address[]:
输入地址 q[]:
存储器输出
Inclock:
输入锁存时钟
Outclock:
输出锁存时钟
memenab:
使能
(六)小结
(一)基于PLD的数字系统设计的优点
1、系统开发周期短
●设计输入方法灵活多样;
●软件仿真,错误自动定位
●修改方便;
2、系统体积小
3、系统可靠性好
4、系统保密性好
5、价格?
可进一步降低价格。
(二)系统的设计思想
1、TOP-DOWN:
用于设计性能级:
概念-〉产品说明书(性能指标)-〉系统输入输出图(黑匣子);
功能级:
系统输入输出图-〉系统框图(功能划分)-〉功能实现-〉仿真-〉网表;
结构级:
原理图网表-〉版图布局-〉版图布线-〉后仿真-〉网表
物理级:
基本逻辑单元的设计。
重要概念:
●fromconcepttonetlist;
●fromconcepttolayout;
●fromconcepttoproduct;
2、bottom-up:
用于实现基本逻辑单元-〉子功能模块-〉子系统-〉系统
(三)基于MAXPLUSII的系统设计流程
3.1概念-〉功能模块
3.2设计输入
1、原理图输入方法
●最基本的方法;
●充分利用已有基本单元,74XX等;
●缺点:
不够灵活(虽然编译时可自动消除冗余电路),如32位加法器等。
例1:
多路选择器
输入信号:
in1[3..0],in2[3..0],in3[3..0],d[2..0];
输出信号:
q[3..0];
要求:
d[]=110时,q[]=in1[];
d[]=101时q[]=in2[];
d[]=011时q[]=in3[];
点评:
该多路选择器不属于常规电路,没有现成的电路(74XX),用原理图输入非常麻烦,但用文本输入则方便快捷。
SUBDESIGNtrymux
(
in1[3..0],in2[3..0],in3[3..0],d[2..0]:
INPUT;
q[3..0]:
OUTPUT;
)
begin
defaults
q[]=GND;
enddefaults;
cased[]is
whenB"
110"
=>
q[]=in1[];
101"
q[]=in2[];
011"
q[]=in3[];
endcase;
end;
例2:
地址发生器
clk;
111->
110->
101->
011->
110…;
每来一个时钟脉冲,产生循环地址110、101、011;
初始值为111。
1)本地址发生器也不是规范电路,用原理图输入方法非常麻烦,但用AHDL非常方便;
2)在AHDL中,状态机是非常好用的工具,可方便地实现各种时间序列,如计数器、序列发生器、地址发生器、波形发生器等。
3.3设计编译
编译的功能为:
逻辑综合、逻辑试配
1、选择一个器件系列,不知具体选用哪个型号时选AUTO;
2、打开DesignDoctor,进行错误检测和错误定位;
3、打开保护位:
●选择是否设置保护位;
●选择保留资源(reservedsources)的比例;
I/O和逻辑单元一般留10%,使器件留有修改的余地。
4、选择全局的项目逻辑综合方式:
选择是否自动选全局clock、clear、preset、outputenable(缺省);
5、打开FLOORPLANEDITOR观察试配结果
●可以为某些型号指定引脚号;
●一般不能全部指定,否则影响试配的成功;
3.4设计仿真
1、编辑输入波形,注意要覆盖设计电路的所有功能;
2、输入/输出信号可以从SNF选择,把有用的、关键的信号选出,不重要的中间波形可不选;
3、信号可选group形式或单个形式;
4、选择前仿真还是后仿真;
5、结果不对时,重新设计电路。
3.5设计的下载
1、用编程卡+主编程器+适配器下载;
2、用BYTEBLASTER/BITBLASTER下载(ISP器件);
3.5通电试验
1、每个VCC与GND之间要加0.1μF的电容;
2、通电后器件微微发热,是正常现象;
3、学会一些调试手段和方法;
(三)系统设计的要点
1、概念-〉功能模块的能力训练;
2、熟练运用三种设计输入方法,特别是综合运用原理图输入和文本输入方法;
文本输入方法中必须掌握组合逻辑电路和状态机的设计方法;
3、熟练掌握以上数字系统设计的各个环节。
第五部分 VerilogHDL
(一)硬件描述语言的概念
⏹硬件描述语言(HardwareDescriptionLanguage),是电子系统硬件行为描述、结构描述、数据流描述的语言。
⏹硬件描述语言诞生原因:
在计算机辅助电子设计的过程中,逻辑图、分立元件作为整个越来越复杂的电子系统的设计已经不适应,需要一种硬件描述语言来作为EDA工具的工作语言。
二、VerilogHDL语言介绍
1、VerilogHDL实例
moduleadder1(cout,sum,a,b,cin,enable);
//模块声明
output[7:
0]sum;
//输出声明
outputcout;
input[7:
0]a,b;
//输入声明
inputcin,enable;
regcout;
//变量类型声明
reg[7:
always@(posedgeenable) //always语句
{cout,sum}=a[7:
0]+b[7:
0]+cin;
end
endmodule
2、VerilogHDL程序基本结构
module<
顶层模块名>
(输入输出端口列表)
output 端口名1,。
。
,端口名N;
input 端口名1,。
,端口名M;
wire//结果信号名
assign
always@(敏感信号表达式)
元件例化:
andmyand(a,b,c);
Endmodule
3、VerilogHDL中逻辑功能的定义
1)用assign语句
AssignF=~((A&
B)|(C&
D));
2)用元件例化
Andmyand3(f,a,b,c);
3)用always@语句描述各种逻辑功能
(二)数据类型及常量、变量
1、常量的表示
8’b11000101
8’hc5
197
6’b1001xx-------------不定值
8’b1010zzzz----------高阻态
ParameterSEL=8,CODE=8’ha3;
2、变量的表示
Wire数据名1,。
,数据名n;
VerilogHDL的缺省输入输出信号类型,只能用assign赋值,取值为0,1,x,z。
Reg数据名1,。
Reg[7:
0]data;
0]mymem[1023:
0]
变量小结:
s型变量:
其输出始终根据输入的变化而更新其值的变量,它一般指硬件电路中的各种物理连接。
如wire变量。
2.register变量:
它对应的是具有状态保持作用的电路元件,如触发器、寄存器等。
如reg,integer变量。
3.register与nets变量的根本区别:
前者有记忆性,后者无。
(三)运算符及表达式
6、缩减运算符
&
:
与;
~&
与非;
|:
或;
~|:
或非;
^:
异或;
^~,~^:
同或
缩减运算符是单目运算符,对单个操作数进行运算。
例若定义reg[3:
0]a;
则:
b=&
a等效为
b=a[0]&
a[1]&
a[2]&
a[3];
又如,若A=5’b11001,则
A=0;
|A=1;
7、移位运算符
>
右移<
<
左移;
例:
若A=5’b11001,则A>
2的值为:
5‘b00110
8、条件运算符----?
是一种三目运算符,对三个操作数进行运算。
其用法如下:
Signal=condition?
true_expression:
false_expression
Condition=1时执行true_expression,condition=0时执行false_expression.
9、位拼接运算符:
{ }
作用:
把两个或多个信号的某些位拼接起来。
例如:
全加器的描述
input[3:
0]ina,inb;
ina+inb+cin的进位自动放入
inputcin;
output[3:
assign{cout,sum}=ina+inb+cin;
(三)运算符及表达式:
运算符的优先级
不清楚优先级时,用扩号()来控制运算的优先级。
(四)赋值语句
1、连续赋值语句(continueassignments)assign为连续赋值语句,它对wire型变量进行赋值。
assignc=a&
b;
这里abc为wire型变量,a和b信号的任何变化都随时反映到c上来,因此称为连续赋值方式;
2、过程赋值语句(proceduralassignments)对寄存器型(reg)变量进行赋值。
分为非阻塞赋值语句和阻塞赋值语句。
(1)非阻塞赋值(non-blocking):
b<
=a;
特点:
非阻塞赋值必需在块结束时才完成赋值操作,即b的值不是立刻就变的。
(2)阻塞赋值(blocking):
b=a;
赋值语句结束时就完成赋值操作,即b的值在赋值语句结束后立刻就变。
(五)条件语句
1、if–else语句(p144)
语句若为多句,用begin-end括起来。
2、case语句(p145)
要点:
敏感表达式一般为一个变量或表达式;
一般要列出敏感表达式的所有可能取值,不能穷举时,剩余其它情况执行default语句;
2)casez与casex语句
当case的分支取值每些位为高阻z,那末对这些位不予比较,只比关注别的位的比较结果,这时用casez语句;
当case的分支取值每些位为高阻z或不定值x,那末对这些位不予比较,只比关注别的位的比较结果,这时用casex语句;
可以用“?
”标识x或z,表示无关值.如:
Casez(select)
4’b?
?
1:
out=a;
10:
out=b;
//优先编码器
100:
out=c;
4’b1000:
out=d;
endcase
3、条件语句小结:
1)使用条件语句时,应注意列出所有条件分支,否则编译器认为条件不满足时,会引进一个触发器保持原值;
2)不可能列出所有分支时,if语句后加else,case语句最后加default语句;
例6.9:
Moduleburried_ff(c,b,a);
Outputc;
Inputb,a;
Regc;
Always@(aorb)
if((a==1)&
(b==1))c=1;
实现的功能为实现的电路为
例6.10
Moduletryand2(c,b,a);
if(a==1)&
(b==1)c=1;
elsec=0;
(六)循环语句:
for语句
For(表达式1;
表达式2;
表达式3)
表达式1:
循环变量初值;
表达式2:
循环结束条件;
表达式3:
循环变量增值。
Modulevoter7(pass,vote);
Outputpass;
Input[6:
0]vote;
Reg[2:
Integeri;
Regpass;
Always@(vote)
Begin
sum=0;
for(i=0;
i<
=6;
i=i+1)
if(vote[i])sum=sum+1;
if(sum[2])pass=1;
//4人以上为1。
elsepass=0;
(七)结构说明语句:
always@语句
格式:
always@(<
敏感信号表达式>
敏感信号表达式:
又称敏感表,当该表达式的值改变时,就会执行一遍块内的语句。
always@(in0orin1orin2orin3);
always@(posedgeclkornegedgeclear);
上升沿posedge;
下降沿negedge
(八)语句的顺序执行与并行执行
always@块内的语句按照指定的顺序执行;
always@块语句、assign语句、元件例化语句之间并行执行。
moduleserial1(q,a,clk);
inputclk;
outputq,a;
regq,a;
always@(posedgeclk)
q=~q;
a=~q;
moduleserial2(q,a,clk);
再如:
moduleparal1(q,a,clk);
moduleparal2(q,a,clk);
注:
两个模块的功能是一样的!
(九)不同抽象级别的VerilogHDL模型
VerilogHDL的门级描述(p179):
调用门原语(primitive)进行电路描述。
VerilogHDL行为级描述(p180):
用各种语句进行电路描述。
对于设计者而言,采用的描述级别越高,设计越容易。
但对综合器而言,有可能无法将某些抽象级别高的描述转化为电路。
因此设计者应了解综合器的性能。
第六部分:
用VerilogHDL语言