EDA文档文档格式.docx
《EDA文档文档格式.docx》由会员分享,可在线阅读,更多相关《EDA文档文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
3、I/O不够灵活,限制了片内资源的利用率。
4、编程不便,需要专用的编程工具。
CPLD由五个主要部分:
逻辑阵列块、宏单元、扩展乘积项、可编程连线阵列和I/O控制块。
查找表
◆一个N输入查找表(LUT,LookUpTable)可以实现N个输入变量的任何逻辑功能;
◆一个N输入的查找表,需要用2的N次幂个SRAM单元;
◆I/O引脚由I/O单元IOE来驱动,IOE位于行列的末端,IOE引脚可以设置为输入输出或双向引脚。
◆每个I/O单元包括一个双向I/O缓冲器和一个可作为输入/输出的寄存器。
◆IOE具有多种特性:
JTAG编程支持、摆率控制、三态缓冲、漏极开路输出等。
◆每个IOE的时钟、时钟使能、清除和输出使能控制均由I/O控制信号网络提供,称为周围控制总线,采用高速驱动能使通过器件的偏移最小。
◆周边控制总线还有两个专用时钟信号,每个IOE可以使用这两个专用时钟信号中的任意一个用于时钟以及时钟使能的控制
TDI测试数据输入测试指令和编程数据的串行输入引脚。
数据在TCK的上升沿移入
TDO测试指令和编程数据的串行输出引脚,数据在TCK的下降沿移出。
如果数据没有被移出时,该引脚处于高阻态
TMS测试模式选择控制信号输入引脚,负责TAP控制器的转换。
TMS必须在TCK的上升沿到来之前稳定。
TCK测试时钟输入时钟输入到BST电路,一些操作发生在上升沿,而另一些发生在下降沿
TRST测试复位输入低电平有效,异步复位边界扫描电路(在IEEE规范中,该引脚可选)
目前,常见的大规模可编程逻辑器件的编程工艺有三种:
(1)基于电可擦除存储单元的EEPROM或Flash技术;
编程后掉电信息不丢失,编程次数有限,编程速度不快。
(2)基于SRAM查找表的编程单元;
掉电后信息丢失,上电必须重新配置,配置次数为无限。
(3)基于反熔丝编程单元。
一次性可编程。
CPLD编程和FPGA配置可使用专用的编程设备,也可以使用下载电缆。
信号SIGNAL变量VARIABLE
基本用法用于作为电路中的信号连线用于作为进程中局部数据存储单元适用范围在整个结构体内的任何地方都能适用只能在所定义的进程中使用行为特性在进程的最后才对信号赋值立即赋值
◆有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。
◆状态机的结构模式相对简单。
◆状态机容易构成性能良好的同步时序逻辑模块。
◆状态机的VHDL表述丰富多样。
◆在高速运算和控制方面,状态机更有其巨大的优势。
◆就可靠性而言,状态机的优势也是十分明显的
状态机的基本操作有两种:
(1)状态机内部状态转换。
状态机经历一系列状态,下一状态由状态译码器根据当前状态和输入条件决定。
(2)产生输出信号序列。
输出信号由输出译码器根据当前状态和输入条件决定。
用输入信号决定下一状态也称为“转移”。
一般有限状态机的设计
从一个状态转移到另一个状态称为控制定序,而决定下一状态所需的逻辑称为转移函数。
用VHDL设计的状态机有多种形式:
⏹信号输出方式:
Mealy型、Moore型
⏹结构:
单进程、多进程
⏹状态表达式:
符号化、确定状态编码
⏹编码方式:
顺序编码、一位热码编码、其他编码
为了能获得可综合的,高效的VHDL状态机描述,建议使用枚举数据类型来定义状态机的状态,并使用多进程方式来描述状态机的内部逻辑。
一般情况下,可使用两个进程来描述,一个进程描述时序逻辑,包括状态寄存器的工作和寄存器状态的输出;
另一个进程描述组合逻辑,包括进程间状态值的传递逻辑以及状态转换值的输出。
必要时还可引入第三个进程完成其他的逻辑功能。
信号输出方式
moore
☐同步输出状态机;
☐输出为当前状态的函数;
☐在输入变化后,必须等待时钟的到来,时钟使状态发生变化时才导致输出变化。
Mealy
☐异步输出状态机;
☐输出为当前状态和所有输入信号的函数;
☐输出在输入变化后立即发生,不依赖时钟的同步。
☐
Mooore状态机
☐Moore状态机的输出只与有限状态自动机的当前状态有关,与输入信号的当前值无关。
☐Moore有限状态机在时钟脉冲的有效边沿后的有限时延后,输出达到稳定值。
☐即使在一个时钟周期内输入信号发生变化,输出也会在一个完整的时钟周期内保持稳定值而不变。
☐输入对输出的影响要到下一个时钟周期才能反映出来。
☐Moore有限状态机最重要的特点就是将输入与输出信号隔离开来。
mealy状态机
◆Mealy有限状态机的输出不单与当前状态有关,而且与输入信号的当前值有关。
◆输入信号可能在一个时钟周期内任意时刻变化,这使得Mealy有限状态机对输入的响应发生在当前时钟周期,比Moore有限状态机对输入信号的响应要早一个周期。
◆因此,输入信号的噪声可能影响输出信号。
(1)
architecturebeh2ofmux2is
begin
withsel_0select
q<
=aafter10nswhen‘0’;
bafter10nswhenothers;
endbeh2;
1、不可以综合,因为after10ns这个语句只能用于仿真,不能进行综合
(2)process(a,b)
c1<
=nota;
c2<
=aandb;
endprocess;
2、可以综合
(3)process(clk)begin
if(clk’eventandclk=‘1’)then
=d;
else
=a;
endif;
3、不可以综合,if(clk’eventandclk=‘1’)then描述不能有else项
例2:
设计一异步复位、60进制计数器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt60is
port(clk,rst:
instd_logic;
m60:
outstd_logic_vector(5downto0));
endcnt60;
architecturecnt60ofcnt60is
signalcnt60:
std_logic_vector(5downto0);
begin
process(clk,rst)
begin
ifrst='
1'
thencnt60<
=(others=>
'
0'
);
elsifclk'
eventandclk='
then
ifcnt60=59then
cnt60<
else
=cnt60+1;
endif;
m60<
=cnt60;
libraryIEEE;
useIEEE.STD_LOGIC_1164.all;
entitychkis
port(din:
inSTD_LOGIC;
clk,clr:
d:
inSTD_LOGIC_VECTOR(7downto0);
check_out:
outSTD_LOGIC);
endchk;
architecturechkofchkis
signalq:
integerrange0to8;
process(clk,clr)
ifclr='
thenq<
=0;
elsifclk'
then
caseqis
when0=>
ifdin=d(7)thenq<
=1;
elseq<
when1=>
ifdin=d(6)thenq<
=2;
when2=>
ifdin=d(5)thenq<
=3;
when3=>
ifdin=d(4)thenq<
=4;
when4=>
ifdin=d(3)thenq<
=5;
when5=>
ifdin=d
(2)thenq<
=6;
when6=>
ifdin=d
(1)thenq<
=7;
when7=>
ifdin=d(0)thenq<
=8;
whenothers=>
q<
endcase;
process(q)
ifq=8thencheck_out<
='
;
elsecheck_out<
endprocess;
为一个序列检测电路,当检测到输入din为预设值d时,check_out输出为1,否则为0。
1.libraryieee;
2.useieee.std_logic_1164.all;
3.entityterminal_countis
4.port(clock,reset,enableinbit;
5.data:
instd_logic_vector(7downto0);
6.equals,term_cntoutstd_logic;
7.endterminal_count;
8.architecturebheofterminal_countis
9.begin
10.process
11.signalcount:
std_logic_vector(7downto0);
12.begin
13.ifdata=countthen
14.equals='
15.endif;
16end.process;
17.process(clk)
18.begin
19.ifreset='
20.count<
="111111111";
21.elseifclock'
eventandclock='
22.count<
=count+1;
23.endif
24.endprocess;
25.term_cnt<
=countwhenenable=‘1‘else‘z'
26.endterminal_count
entityterminal_countis
port(clock,reset,enable:
inbit;
data:
instd_logic_vector(7downto0);
equals,term_cnt:
inoutstd_logic_vector(7downto0));
endterminal_count;
architecturebheofterminal_countis
signalcount:
std_logic_vector(7downto0);
process(data)
begin
ifdata=countthen
equals<
=“11111111”;
process(clock)
ifreset='
count<
="
11111111"
elsifclock'
term_cnt<
=countwhenenable<
=‘1’else"
ZZZZZZZZ“;
endbhe;
正确程序
例5:
分析下面程序,画出x,y,dout功能仿真波形,并说出该程序的功能。
entityxdouis
clk:
dout:
outSTD_LOGIC
);
endxdou;
architecturebheofxdouis
signalx,y:
std_logic;
process(clk)
ifclk'
x<
=din;
y<
=x;
dout<
=xandy;
endbhe;
1、试编写“01111110”序列发生器的VHDL语言程序。
useIEEE.STD_LOGIC_unsigned.all;
entityrplcontis
port(clk,rst:
zo:
endrplcont;
architecturebhvofrplcontis
std_logic_vector(2downto0);
signalz:
ifrst='
thencount<
000"
ifcount=7thencount<
elsecount<
=count+1;
process(count)
casecountis
when"
=>
z<
001"
010"
011"
100"
101"
110"
whenothers=>
endcase;
process(rst,clk)
thenzo<
zo<
=z;
endbhv;
2、编写8位二进制数求补电路的VHDL程序。
设电路的输入为A[7:
0]、输出为B[7:
0],其中A、B的最高位为符号位。
entityneg8is
port(A:
inSTD_LOGIC_VECTOR(7DOWNTO0);
B:
outSTD_LOGIC_VECTOR(7DOWNTO0);
endneg8;
architectureoneofneg8is
signalBB:
std_logic_vector(7downto0);
求补码:
需要判断符号位
正数的补码=原码,
负数的补码=原码按位取反加1。
process(A)
BB<
=NOTA;
B<
=BB+1;
求补运算规则:
作为一种运算,不考虑符号位,强调的是将二进制数按位取反加1这样一个过程,将符号位作为数值位一同运算。
endone;
3、编写8位二进制数据比较器的VHDL源程序。
设电路的两个8位二进制输入为A[7:
0]和B[7:
0],当A[7:
0]>
B[7:
0]时,输出GT=1,当A[7:
0]<
0]时,输出LT=1,当A[7:
0]=B[7:
0]时输出EQ=1。
entitycomp8is
port(a:
b:
gt,lt,eq:
outstd_logic);
endcomp8;
architectureoneofcomp8is
process(a,b)
ifa>
bthenlt<
gt<
eq<
elsifa<
elselt<
4、编写带复位和预置控制的10进制加法计数器的VHDL源程序。
预置数据输入端为D[3:
0],计数输出端为Q[3:
0],时钟输入为CLK,复位输入为CLR,当CLR=0时,Q[3:
0]=0000。
LDN是预置控制输入端,LDN=0时,Q[3:
0]=D[3:
0],ENA是使能控制输入端,ENA=1时,计数器计数,ENA=0时,计数器保持不变。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK,CLR,ENA,LDN:
INSTD_LOGIC;
D:
INSTD_LOGIC_VECTOR(3DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREbehOFCNT10IS
SIGNALCQI:
STD_LOGIC_VECTOR(3DOWNTO0):
=“0000”;
BEGIN
PROCESS(CLK,CLR,ENA,LDN)
BEGIN
IFCLR=‘0'
THENCQI<
=“0000”
ELSIFCLK'
EVENTANDCLK='
THEN
IFLDN=‘0'
THENCQI<
=D;
ELSE
IFENA=‘1’THEN
IFCQI<
9THENCQI<
=CQI+1;
ELSECQI<
=“0000’;
ENDIF;
ENDIF;
Q<
=CQI;
ENDPROCESS;
COUT<
=CQI(0)ANDCQI(3);
ENDbhv;
第7章作业
1、设计一个111序列检测器电路,其功能是连续输入三个或三个以上的1时,电路输出为1,其余情况下输出为0。
要求:
画出其状态转移图,并编写VHDL程序实现上述功能。
st0:
初始状态,电路还未收到一个有效1。
st1:
收到一个1后的状态
St2:
连续收到两个1后的状态。
st3:
连续收到三个1个后的状态。
entit