第一部分CPLD器件及开发系统的使用
提下,可以采用状态机分步运行,使并行处理该为串行处理。下面以16位的乘法为例介绍
例:采用单一并行16位的乘法器,如下图所示:
图5-32 并行16位乘法器
如果选择10K10器件,从编译结果可以看出需要733个逻辑单元,而10K10器件只能提供576个逻辑单元,因此会产生一个错误信息。如果将并行的16位乘法改成串行8位乘法分4次相乘,结果使用的逻辑单元仅为原来的1/3左右。设计如下:
a、设计八位乘法器
图5-32 8位乘法器
b、利用八位乘法器进行16位乘法器的设计,AHDL语言程序如下:
173
第一部分CPLD器件及开发系统的使用
include \
subdesign serial16x16
(inclk,start,a[15..0],b[15..0]: input; c[31..0] ) variable st[1..0]:dff; mc[31..0]:dff; multx: tmult8; begin
(st[],mc[]).clk=inclk; c[]=mc[]; case st[] is when 0=>
multx.a[]=a[7..0];multx.b[]=b[7..0]; mc[]=(0,multx.q[]); st[]=1; when 1=>
multx.a[]=a[15..8];multx.b[]=b[7..0]; mc[]=mc[]+(0,multx.q[],0,0,0,0,0,0,0,0); st[]=2; when 2=>
multx.a[]=a[7..0];multx.b[]=b[15..8]; mc[]=mc[]+(0,multx.q[],0,0,0,0,0,0,0,0); st[]=3; when 3=>
multx.a[]=a[15..8];multx.b[]=b[15..8];
mc[]=mc[]+(multx.q[],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); if start then st[]=0; else st[]=3; end if; oe=vcc;
174
,oe : output;
第一部分CPLD器件及开发系统的使用
end case; end;
2、速度优化的原则:
当设计的电路速度成为第一要素时,应当采用速度优化的原则,以提高系统(1) 添加流水线的设计方法
图5-33中利用图形编辑的方法设计两组并行八位加法器,由于没有加流水线,因此整体速度只能是82MHz。
的整体运行速度。速度优化的方法有多种,下面就几种典型的方法介绍如下:
图5-33 无流水线的加法器
图50-34 是完成上例中同样功能的加法器,但在两级加法运算中插入了一级
175
第一部分CPLD器件及开发系统的使用
流水线,因此整体运算速度可以上升到90MHz以上。如果设计的系统复杂,加入流水线的效果会更加明显。
图5-34 加入流水线后的加法运算
经过上面的例子分析可以看出流水线的概念如图5-35和图5-36所示:其中
176
第一部分CPLD器件及开发系统的使用
图5-35是无流水线的设计,图5-36是加入一级流水线后的设计。 CLK CLK
图5-36 有流水线设计
从图5-35中可以看出,由于系统的整体延时是由大的组合逻辑的延时决定,延时时间为T。整体的运行频率有T决定,因此最大频率FMAX=1/T。图5-36插入一级流水线后,将一个大的延迟组合逻辑分成两个小的组合逻辑,其中T=T1+T2(忽略触发器的延迟),TMAX=MAX(T1,T2)。虽然整个路径的延迟没变,但每各TMAX时间就会有一个结果输出,因此系统的最高频率FMAX=1/TMAX。可以看出虽然整个路径的延迟没有减小,但整体速度却提高了。图5-33、图5-34的设计正是利用了这种添加流水线的方法实现速度的提升。在复杂的组合逻辑设计中还可以插入多级流水线以实现系统速度的提升。插入流水线的方法不仅在图形编辑中可以使用,在AHDL语言、VHDL语言、Verilog HDL语言中也可以用同样的原理实现。
在插入流水线时,由于FMAX=1/TMAX,因此最好将组合逻辑分割成延迟相等的部分。如图5-36中如果T1=T2,则TMAX=T1=T2,此时TMAX为最小,因此系统的速度也达到最大值。
在一个复杂的系统中可能有多个并行的路径,并不是所有的路径都是关键路径,至于那一个路径是关键路径与所要解决的问题有关。关键路径是影响整个电
177
触发触器发锁器存 锁存
大延时的组合逻辑延时时间为T 触发器锁存 图5-35 无流水线设计 触发器锁存 小延时的组合逻辑 T1 触发器锁存 触发器锁存 小延时的组合逻辑 T2 第一部分CPLD器件及开发系统的使用
路的关键,因此在时序分析时应找出影响整个电路关键路径。如图5-37所示:
输入 2
图5-37 关键路径研究法
输入 1 延TD3 输关键路径TD 出2 迟延TD2 迟最大延迟TD1 输 出 1 从图5-37 可以在CPLD/FPGA的设计中存在两套输入、输出,如果输入2到输出2之间的速度要求很高,则它们之间的路径成为关键路径。因此主要问题是解决关键路径的延迟,也就是添加流水线的关键路径。对于非关键路径要找出最大延迟路径,对于不能满足要求的最大延迟路径,也要加流水线解决。
178