在设计中
,发送状态机和接收状态机采用三段式的描述方法完成。完成状态机设计之后,
发
送
状
态
机
包
括
send_start、send_byte、send_parity、pop_byte、idle、wait_to_send_byte、wait_to_send_parity、send
_stop
、 和
wait_to_send_stop 等 九 个 状 态 , 接 收 状 态 机 包 括
rec_bit
、
rec_parity
、
rec_stop
、
check_parity
、
idle
、
rec_st-
art、rec_prepare 、end_bit 、ca_lc_parity 、wait_rec_stop 、push 和 wait_idle 等 12 个状态。
完成之后的设计包括七个
Module,分别是:ram,rfifo,tfifo,transmitter,receiver,registers 和
top,代码行数总计 2524 行。
3.3 优化
本文追求设计成本与串行传输速度之间的折衷
,这就要求在低成本的 FPGA 上对设计以
时序性能为目标进行优化。
造成设计时序性能差的原因有很多
,但其直接原因可分为三类,即布局欠佳、信号扇出过
高以及逻辑级数过多
[5]。其中的布局欠佳和信号扇出过高等问题可通过 EDA 工具的优化来
解决
,归于 EDA 优化的范畴;而关键路径逻辑级数过高的问题则必须通过修改设计来解决,归
于电路优化的范畴。本文就以此为切入点从
EDA 优化和电路优化两方面来对初步设计进行
优化。
3.3.1 EDA 优化
首先是针对布局欠佳的
EDA 优化。当路径中布线延时占用了超过 50%的整体延迟即为
布局欠佳。表
1 即为在对设计进行优化时遇到的布局欠佳的示例。从表中可以看出:在整条路
径中连线的延迟占整体延迟的
57.7%,为布局太差。本设计采用调整布局工具的 Extra Level;
利用布局布线工具的
Extra Effort 和 MPPR 功能;利用底层编辑器 FPGA Editor 优化布线和使
用区域约束重新对设计进行布局规划等方案来解决此问题
,最终使设计的布线延迟减少到
50%以内。
其次是针对信号扇出过高的
EDA 优化。逻辑门的高扇出系数表明信号传输路径过长,会
造成延迟过大使设计时序性能降低。从表
2 中可以看出: counter_2 信号的逻辑门扇出系数高
达
11,且该路径上驱动 NXT_STATE<2>信号的逻辑门扇出系数也达到了 10,是为扇出系数过
高。本设计采用的解决方案包括利用逻辑复制
,利用区域约束和充分利用 FPGA 片内资源等
等
,将设计中各个逻辑门的扇出系数降低到合适的范围之内。
虽然借助于
EDA 工具可以对设计完成 EDA 优化,实现设计性能的一定提升。但是基于
工具努力程度的
EDA 优化有无法逾越的瓶颈,限制了设计性能的进一步提升。而电路优化则
是解决这一问题的有效途径。
3.3.2 电路优化
电路优化能够消除
EDA 优化过程中遇到的瓶颈,使设计性能进一步提高。电路优化主要
是针对
FPGA 设计中关键路径逻辑级数过多的问题。对此情况 EDA 优化不会有任何改善,必
须通过修改代码来解决。
本设计中采用的解决方法有
:1)使用流水线技术[6]。简单来说,数字系统的最小时钟周期
由
data path - clock path skew + uncertainty 的值来决定,且其中的 data path 占主导地位。因此
可以通过在组合逻辑中插入寄存器来简化原有的逻辑结构
,缩短寄存器之间延迟时间,最终达
到提高设计的时序性能的目的。
2)设置多周期路径。检查关键路径是否为多周期路径,是通过修改设计并添加相应的多
周期约束来实现的。在多周期路径中
,数据可用不止一个时钟周期到达其目的地。多周期技术
多适用于高位宽的计数器和加法器。本设计中的波特率除数计数器
DLC 位宽为 16,最坏的情
况下最低位的进位需要传递
15 位,严重制约了设计性能的提高。解决方法是将波特率除数计