深圳市华为技术有限公司
研 究管 理部文档中心
文档编号
产品版本
密级
V1.0
内部公开
产品名称 FPGA设计高级技巧
共62页
FPGA设计高级技巧 Xilinx篇
(仅供内部使用)
拟 制
审 核
批 准
周志坚
中研基础
日 期
日 期
日 期
2001/09/15
yyyy/mm/dd
yyyy/mm/dd
深圳市华为技术有限公司
版权所有 不得复制
FPGA设计高级技巧 Xilinx篇
内部公开
请输入文档编号
日期
2001/09/1
5
修订版本
1.00
描述
修订记录
作 者
周志坚
2001-9-19
版权所有 侵权必究
第2页 共63页
FPGA设计高级技巧 Xilinx篇
内部公开
请输入文档编号
目 录
3 FPGA器件结构 VirtexII
1 前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 综合工具与代码风格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1 理解综合两个过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 不同综合工具的性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 综合性能对Coding Style 影响 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1 器件结构对Coding Style的影响 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 FPGA结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2 ASIC结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3 Coding Style的对比 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 VirtexII功能概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 结构概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.1 CLB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.2 Slice
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.3 LUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.4 Shift Register LUT SRL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.5 MUXFX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.6 Carry Logic 和Arithmetic Logic Gates
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.7 SOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.8 FFX/FFY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.1 Distributed RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.2 Block RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 乘法器资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 IOB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1 IOB结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.2 Select I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.3 DCI
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.1 Global Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.2 CLK MUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.3 DCM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8 补充说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
9
10
10
10
11
11
11
11
12
12
13
14
15
16
16
17
20
21
21
21
23
25
27
27
28
29
29
29
30
32
33
3.7 Clock Resource
3.8.1 LUT如何配置成组合逻辑电路 揭开 门数增加 逻辑级数未
变 但资源占用减少 速度更快 之谜 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8.2 解剖Block SelectRAM内部结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 设计技巧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1 合理选择加法电路 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 串行进位与超前进位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2 使用圆括号处理多个加法器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2IF语句和Case语句 速度与面积的关系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 减少关键路径的逻辑级数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
35
37
38
38
39
40
41
2001-9-19
版权所有 侵权必究
第3页 共63页
FPGA设计高级技巧 Xilinx篇
内部公开
请输入文档编号
4.3.1 通过等效电路 赋予关键路径最高优先级 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2 调整if语句中条件的先后次序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 合并if语句 提高设计速度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5 资源共享 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1 if语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.2 loop语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.3 子表达式共享 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.4 综合工具与资源共享 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 流水线 Pipelining
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7 组合逻辑和时序逻辑分离 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.8 利用电路的等价性 巧妙地 分配 延时 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.9 复制电路 减少扇出 fanout
提高设计速度 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.10 多路选择器与三态电路 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.10.1 virtex以前的系列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.10.2 virtex系列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11 利用LUT四输入特点 指导电路设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.12 高效利用IOB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.13 Distributed RAM的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.14 Block SelectRAM的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.15 SRL的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.16 LFSR加1计数器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 如何使用后端工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1 布局布线 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 设计前期 设计方案阶段
对关键电路的处理 . . . . . . . . . . . . . . . . . . . . . . .
5.1.2 布局布线策略 兼谈如何做第一次布局布线 . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.3 正确看待map之后的资源占用报告 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 FPGA Editor的作用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 FloorPlanner的作用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 TimingAnalyzer的作用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 综合运用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1 可能成为关键路径的电路 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 如何提高芯片速度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 引入放松约束 TIG False path 和Multi-Cycle-Path
. . . . . . . . . . . . . . . . . . .
6.2.2 对线延时比较大的net 设置Maxdelay和Maxskew . . . . . . . . . . . . . . . . . . . . . .
6.2.3 采用BUFGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.4 基本设计技巧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.5 专有资源的利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.6 关键路径在同一个Module
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.7 关键路径单独综合 不与其它模块放在一起综合 . . . . . . . . . . . . . . . . . . . . . . .
6.2.8 针对关键路径 进行位置约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.9 迂回策略 降低非关键路径上的面积 为关键路径腾挪空间 . . . . . . . . . . . .
6.3 如何降低芯片面积 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.1 Distributed RAM代替BlockRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.2 Distributed RAM代替通道计数器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.3 专有资源的利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
42
43
44
44
45
46
46
47
49
52
52
53
53
54
54
55
56
57
57
57
58
58
58
58
59
59
59
60
60
60
60
60
61
61
61
61
61
61
61
61
61
61
61
62
2001-9-19
版权所有 侵权必究
第4页 共63页
FPGA设计高级技巧 Xilinx篇
内部公开
请输入文档编号
6.3.4 基本设计技巧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 感谢 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
62
表目录
表1 VirtexII 的分布式RAM 配置表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表2 VirtexII 的BlockRAM 分布表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表3 带奇偶校验位的Block RAM配置表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表4 VirtexII 乘法器速度表 厂家数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表5 VirtexII 的DCM分布表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
24
25
27
33
图目录
图1 使用二进制描述的Mux
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图2 使用内部三态线描述的Mux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图3 VirtexII 结构示意图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图4 VirtexII 的CLB结构示意图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图5 SLICE结构示意图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图6 VirtexII 的Slice 结构图 上半部分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图7 SRL的移位链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图8 VirtexII的MUXFX连接图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图9 进位链结构示意图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图10 使用进位链实现加法器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图11 使用进位链级联实现高速宽函数运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图12 VirtexII 的两个独立进位链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图13 VirtexII 的SOP 链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图14 FFX/FFY结构示意图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图15 单端口32x1 RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图16 双端口16x1 RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图17 VirtexII 的Block RAM 分布规律 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图18 Write first 模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图19 Read first 模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图20 No Change 模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图21 乘法器与Block RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图22 XC2V40的乘法器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图23 乘法器块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图24 VirtexII的IOB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图25 VirtexII 的IOB中的DDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图26 VirtexII 的IOB 实际结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图27 VirtexII 的Clock Pads
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图28 VirtexII 的时钟 顶部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图29 VirtexII 的时钟资源分布原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
13
14
14
15
16
17
18
18
19
20
21
21
22
23
24
25
25
25
26
26
26
27
28
28
29
30
30
2001-9-19
版权所有 侵权必究
第5页 共63页
FPGA设计高级技巧 Xilinx篇
内部公开
请输入文档编号
图30 VirtexII的BUFGMUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图31 VirtexII的BUFG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图32 VirtexII 的BUFGCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图33 VirtexII 的BUFGCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图34 VirtexII 250 的DCM 位置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图35 VirtexII 的DCM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图36 门数增加 逻辑级数未变 但资源占用减少 速度更快 . . . . . . . . . . . . . . . . . . . . . .
图37 完整的单端口Block Select RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图38 Read first mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图39 Write first mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图40 No-read-on-write mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图41 串行进位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图42 超前进位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图43 串行加法电路 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图44 并行加法电路 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图45 if-else完成多路选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图46 case语句完成电路选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图47 critical信号经过2级逻辑 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图48 critical信号只经过一级逻辑 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图49 资源共享前 2个加法器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图50 资源共享后 1个加法器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图51 资源共享前4个加法器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图52 资源共享后一个加法器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图53 采用流水线之前电路结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图54 采用流水线之后的电路结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图55 Mealy状态机的基本结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图56 组合逻辑 加法器 在后 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图57 组合逻辑 加法器 在前 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图58 扇出较大 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图59 扇出较小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图60 多路选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图61 采用三态电路实现电路选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图62 VirtexE IOB结构示意图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图63 输入输出寄存器移入IOB中 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图64 采用Distributed RAM实现多路加1计数器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
图65 15位基本型LFSR计数器在VIRTEX器件中的实现 . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
31
31
31
32
33
35
36
36
37
37
38
39
39
39
40
41
42
42
44
45
45
46
48
49
49
52
52
53
53
54
54
55
55
57
58
2001-9-19
版权所有 侵权必究
第6页 共63页
FPGA设计高级技巧 Xilinx篇
FPGA设计高级技巧 xilinx篇
内部公开
请输入文档编号
关键词 FPGA器件结构 速度与面积 关键路径 压缩线延时 降低LUT级数 腾挪空间
摘 要
本文从FPGA器件结构角度出发 以速度和面积为主题 描述在FPGA设计过程中应当注意
的问题和可以采用的设计技巧
缩略语清单:
ASIC Application Specific Integrated Circuit
CLB Configurable Logic Block
DCI Digitally Controlled Impedance
DCM Digital Clock Manager
DDR Double Data Rate
DLL Delay-Locked Loop
FPGA Field Programmable Gate Array
GRM General Routing Matrix
IOB Input/Output Block
LFSR Linear Feedbak Shift Register
LUT Look Up Table
SOP Sum of Product
SRL Shift Register LUT
UCF Custom Constraints File
参考资料清单:
名称
作者
编号
发布日期
查阅地点或
参考资料清单
周志坚/钱晶
苏文彪
牛风举
苏文彪
喻志清/周志坚
喻志清
VHDL数字电路设计
指导
Virtex系列器件结构
简介
VerilogHDL编码入门
指导
基于FPGA器件的编
码规范
UCF应用指导
Xilinx后端工具使用
指导
LFSR计数器原理及应
用
渠道
中研基础
中研基础
中研基础
中研基础
中研基础
中研基础
中研基础
2001-9-19
版权所有 侵权必究
第7页 共63页
FPGA设计高级技巧 Xilinx篇
同步电路设计技术及
规则
VirtexII时钟资源 初
稿
ds031(virtexII).pdf
lfsr.pdf
sp_block_mem.pdf
VirtexII_DesignConsid
eration.pdf
gensim.pdf
周志坚
陈亮
xilinx
xilinx
xilinx
xilinx
xilinx
1 前 言
内部公开
请输入文档编号
中研基础
中研基础
周志坚
周志坚
周志坚
周志坚
周志坚
随着HDL Hardware Description Language 硬件描述语言 语言 综合工具及其它相关工
具的推广 使广大设计工程师从以往烦琐的画原理图 连线等工作解脱开来 能够将工作重心
转移到功能实现上 极大地提高了工作效率
任何事务都是一分为二的 有利就有弊 我们发现 现在越来越多的工程师不关心自己的
电路实现形式 以为 我只要将功能描述正确 其它事情交给工具就行了
在这种思想影响
下 工程师在用HDL语言描述电路时 脑袋里没有任何电路概念 或者非常模糊 也不清楚自
己写的代码综合出来之后是什么样子 映射到芯片中又会是什么样子 有没有充分利用到
FPGA的一些特殊资源 遇到问题 立刻想到的是换速度更快 容量更大的FPGA器件 导致物
料成本上升 更为要命的是 由于不了解器件结构 更不了解与器件结构紧密相关的设计技
巧 过分依赖综合等工具 工具不行 自己也就束手无策 导致问题迟迟不能解决 从而严重
影响开发周期 导致开发成本急剧上升
目前 我们的设计规模越来越庞大 动辄上百万门 几百万门的电路屡见不鲜 同时 我
们所采用的器件工艺越来越先进 已经步入深亚微米时代 而在对待深亚微米的器件上 我们
的设计方法将不可避免地发生变化 要更多地关注以前很少关注的线延时 我相信 ASIC设计
以后也会如此
此时 如果我们不在设计方法 设计技巧上有所提高 是无法面对这些庞大
的基于深亚微米技术的电路设计 而且 现在的竞争越来越激励 从节约公司成本角度出发
也要求我们尽可能在比较小的器件里完成比较多的功能
本文从澄清一些错误认识开始 从FPGA器件结构出发 以速度 路径延时大小 和面积
资源占用率 为主题 描述在FPGA设计过程中应当注意的问题和可以采用的设计技巧
本文对读者的技能基本要求是 熟悉数字电路基本知识 如加法器 计数器 RAM等
熟悉基本的同步电路设计方法 熟悉HDL语言 对FPGA的结构有所了解 对FPGA设计流程比
较了解
2 综合工具与代码风格
硬件描述语言和综合工具的产生 极大地提高了工程师的工作效率 然而 随着它们的普
及与推广 一种不好的现象也在逐步蔓延 在设计过程中 只关注功能是否实现 而不考虑或
2001-9-19
版权所有 侵权必究
第8页 共63页