1 概述
目前, 可编程逻辑器件(PLD) 的密度、速度和I/O 接口已经可以满足大多数的数字ASIC 的设计要求, 因而得到了越来越广泛的使用. 同时, 所涉及的门数已经从几百门增加到几十万门, 使得原先设计所使用的逻辑图输入、真值表和卡诺图的设计方法已经远远不能满足数字系统的复杂性要求. 采用硬件描述语言(Hardware Description Language) 作为设计输入的方法是近年来ASIC 设计的最新的、最先进的设计方法.目前, 流行的FPGA 设计方式是: 用VHDL 语言作为硬件输入描述, 对HDL 硬件描述通过采用综合器综合使硬件语言描述映射到逻辑电路上, 然后再采用FPGA 厂商提供的工具进行布局布线将综合产生的逻辑电路真正对应到具体FPGA 结构上这样一套流程.
在这样的设计流程中, 综合以及后面的布局布线工作都是基于HDL 描述上进行的, 因此硬件语言描述的好坏就直接决定了最后的综合后的电路的优劣. 同时, 在FPGA 设计中, 仅仅只是利用硬件描述语言和综合技术是不够的. 如果想要最终器件在性能和面积上都达到优化, 就必须要熟悉器件的体系结构, 然后针对该器件进行VHDL 设计.
2 FPGA 的特点
FPGA 通常被认为是ASIC 实现的一种替代手段. 一般ASIC 包括三种, 既全定制、半定制(含标准单元和门阵列) 以及可编程器件. 对于前两种, 需要支付不可重复使用的工程费用NRE (Non recurring Engineering) , 主要用于芯片的流片、中测、分析的工程开销, 一次费用一般在1 万至数万美元以上. 如果一次不成功、返工、甚至多次返工,NRE 费用将要上升. 成本高、风险大, 而通常对每个ASIC 品种的需求量往往不大,NRE 费用分摊到每个产品上价太高, 用户无法接受. 而对于可编程器件PLD (Programmable Logic Device) 正是可以解决上述问题的新型ASIC, PLD 以其操作灵活、使用方便、开发迅速、投资风险小等突出优点, 特别适合于产品开发初期、科研样品研制或小批量的产品. FPGA 是一种新型的
PLD, 其除了具有PLD 的优点外, 其规模比一般的PLD 的规模大. 目前,Xilinx 推出的XC4025 可以达到25000 门的规模,Altera 公司的FLEX10K100 系列芯片可达到十万门的规模,完全可以满足用户的一般设计需要.
FPGA 的主要特点是: 寄存器数目多, 采用查找表计数,适合时序逻辑设计. 但是互连复杂, 由于互连采用开关矩阵,因而使得延时估计往往不十分准确.
FPGA 也有其自身的局限性, 其一就是器件规模的限制,其二就是单元延迟比较大. 所以, 在设计者选定某一FPGA器件后, 要求设计者对器件的结构、性能作深入的了解, 在体系结构设计时, 就必须考虑到器件本身的结构及性能, 尽可能使设计的结构满足器件本身的要求. 这样就增加了设计的难度.
离开对FPGA 结构的详细了解, 设计人员就不可能优化设计. 因而设计人员必须了解FPGA 器件的特性和限制, 熟悉FPGA 的结构.
在了解FPGA 结构特点的基础上, 就可以利用VHDL 语言描写出高效的电路描述实现性能优化的电路.
3 VHDL 可综合语言模型
在数字电路设计中, 由于输入的到达时间不完全一样, 可能会引起竞争冒险现象, 因此, 如果在设计中可以避免这种情况的发生, 那么就可以大大提高设计的成功率. 为了避免这种情况, 我们在设计中采用RTL 描述, 也就是寄存器传输级描述. 就是在整个电路设计中, 以寄存器作为主要对象, 在寄存器之间插入组合逻辑. 如图1 所示:
图1 RTL 电路基本单元
在具体的电路设计中, 应该尽可能将所有输入采用寄存器输入, 同时将所有输出采用寄存器输出. 这样的设计, 使得所有的设计模块都是以寄存器为边界, 有利于综合器进行综合优化, 并便于进行静态时序分析.
3. 1 时钟的使用
在VHDL 语言中, 对于时钟的描述是:wait until clk'event and clk= '1'; 或者是if clk'event and clk= '0'then其中event 表示时钟信号进行变化, clk 为1 表示是上跳沿, clk 为0 表示是下跳沿. 在VHDL 描述中如果出现了上述语句, 那么在对应生成电路中一定会出现寄存器. 一般来说,VHDL 语言中的时钟描述应该遵循以下原则:
1) 如果异步复位, 那么时钟语句可以出现在elsif 中, 否则应该在进程的首句中出现;
2) 一个进程只能有一个时钟;
3) 如果在进程中的其他位置出现时钟语句, 那么就有可能会产生不可综合的现象;
4) 在整个设计中, 如果能够用一个时钟就用一个时钟.在一个设计中使用多个时钟, 不利于综合器进行优化, 也不利于布局布线. 同时, 对于关键路径的分析也会受到很大影响;
5) 在整个设计中, 尽量统一使用一个时钟的上升沿或者是下降沿, 这样的设计便于综合优化, 便于时序分析. 同时, 不同沿的设计会带来关键路径增长的问题.
3. 2 时序部件
在数字电路中, 时序部件有两种: 寄存器、锁存器. 其中,寄存器是时钟边沿触发的, 锁存器是时钟电平触发的. 在FPGA 设计中, 应该尽量采用寄存器设计, 而不是锁存器设计.原因在于: 锁存器无法阻断毛刺的传播, 对信号没有整形作用, 而毛刺很容易影响电路的正常工作, 导致电路的误操作.同时, 在FPGA 中, 没有真正的锁存器部件, 所有的锁存器都是用寄存器加上外围电路构成的, 这样一来, 电路面积就会变大. 对于电路的综合优化来说, 目前的工具对于寄存器的优化作用要优于对锁存器的. 因此, 在VHDL 描述中, 应该尽量采用寄存器描述.
一般来说, 往往在VHDL 描述中锁存器的产生是由于对信号量的不完全赋值引起的. 例如:
if a= '1'then
b< = c;
end if;
这样的赋值语句, 将导致一个锁存器的产生. 当然, 这个电路的功能是正确的, 但是这样带来的结果是面积增大. 因此, 如果这个电路关心的只是a= 1 时候的情况, 那么就可以对a 进行缺省赋值.
b< = '0';
if a= '1'then
b< = c;
end if;
这样, 产生的就是一个组合逻辑.
如果在设计中, 锁存器无法避免, 那么应该用时钟沿来寄存.
wait until clk'event and clk= '1';
if a= '1'then
b< = c;
end if;
这样, 就产生一个寄存器, 避免的毛刺的传播.
3. 3 同步和异步置位
存储部件在上电后状态是不确定的, 为了确定状态, 电路采用复位信号来设置初值. 根据与时钟的关系, 分为同步复位和异步复位. 同步复位只有在指定的时钟沿才发生作用, 而异步复位一旦有效就发生作用. 如图2 所示:
图2 异步复位和同步复位
由于异步复位容易受到毛刺影响, 因此在实际设计中, 除了将外部输入管脚信号作为异步复位信号外, 其他所有复位信号都作为同步复位信号.
4 针对FPGA 的设计
上面是一些VHDL 语言的设计基本规范, 对于FPGA 来说, 根据其结构特点, 还有一些注意事项.
4. 1 计数器设计
在FPGA 设计中, 最好使用LFSR 计数器, 而不是二进制计数器. 原因是: LFSR 更加象移位寄存器, 速度很快, 同时, 二进制计数器在翻转的时候, 会产生毛刺, 如果这个时候计数器的值被作为其他信号的输入, 那么结果必将是错误的.同时,LFSR 的扇入比较小, 而二进制计数器的扇入比较大,虽然所用的寄存器数目二进制计数器比其他两种要少, 但是从总的规模上来说, 或者在性能上,LFSR 计数器要优于二进制计数器.
下面实现了计数8 的LFSR 计数器和二进制计数器,VHDL 语言描述如下:
1) LFSR 计数器
if rst= '0'then
cnt< = (others= > '1') ;
elsif clk'event and clk= '0'then
cnt< = lfsr_ hign&cnt (7 downto 1) ;
end if;
lfsr_ hign< = cnt(0) xor cnt(4) xor cnt(5) xor cnt(6)
2) 二进制计数器
if rst= '0'then
cnt< = (o thers= > '0') ;
elsif clk'event and clk= '0'then
cnt< = cnt+ ”1”;
end if;
表1 给出了两种计数器在xilinx 器件XC2S15VQ 100 上实现的面积比较和最大速度.
LFSR 计数器 | 二进制计数器 | |
SLICE 数目 | 4 | 4 |
SLICE 寄存器数目 | 8 | 8 |
4输入LUT数目 | 1 | 0 |
等效门数 | 70 | 109 |
最快频率 | 264.901MHz | 186.324MHz |
最大线时延 | 1.576ns | 1.409ns |
最大组合路径时延 | 8.424ns | 7.461ns |
从表1 可以得到,LFSR 计数器的等效面积要比二进制计数器的等效面积小30% , 最高频率要高40%. 因此, 对于某些只需要计数过程, 而不需要计数值的设计, 比如说计时器,就完全可以使用LFSR 计数器代替二进制计数器.
4. 2 多路选择器设计
多路选择器在FPGA 中有两种实现方式, 一种是多选器, 一种是三态逻辑. VHDL 描述如下:
多选器
c< = a when ( sel= '0') else b
三态逻辑
c< = a when ( sel= '0') else 'z';
c< = b when ( sel= '1') else 'z';
表2 是16 选1 设计的面积报告(使用器件为XC2S305CS144)
三态逻辑 | 多选器 | |
使用的SLICE 数目 | 8 | 5 |
使用的4 输入LUT数目 | 16 | 9 |
使用的TBUF数目 | 16 | 0 |
等效门数 | 147 | 72 |
最大组合延时 | 15.669ns | 12.959ns |
最大线延时 | 4.921ns | 1.953ns |
从表2 来看, 发现无论是面积大小, 还是速度快慢, 用多选器实现的设计都要优于三态逻辑实现的设计. 因此, 一般来说, 在FPGA 中都使用多选逻辑来实现多选器. 三态逻辑一般只是用在总线设计上.
5 结论
表1 和表2 都是在特定FPGA ( XILINX SPATAN 2 )器件上实现的结果. 如果使用不同的FPGA 或者是CPLD 器件, 那么根据器件结构的不同, 很可能出现不同的结论. 这就需要设计者在设计之前了解所选器件的结构特点来确定自己的编码方式, 以实现面积和速度的最佳方案.VHDL 语言是提高设计速度的强有力工具, 通过掌握这门语言, 并且深入了解FPGA 的结构特点, 又针对性的编程,可以发挥器件最大的性能, 同时避免不必要的面积、速度甚至功耗上的损失.
文章评论(0条评论)
登录后参与讨论