特权同学的FPGA/CPLD设计学习笔记

题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD来的,首先对整理者表示感谢。这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一个有志于FPGA/CPLD方面发展的工程师学习的。

1、硬件设计基本原则

(1)、速度与面积平衡和互换原则:一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。从而实现了用面积复制换取速度的提高。

(2)、硬件原则:理解HDL本质

(3)、系统原则:整体把握

(4)、同步设计原则:设计时序稳定的基本原则

2、Verilog作为一种HDL语言,对系统行为的建模方式是分层次的。比较重要的层次有系统级(system)、算法级(Algorithm)、寄存器传输级(RTL)、逻辑级(Logic)、门级(Gate)、电路开关级(Switch)。

3、实际工作中,除了描述仿真测试激励(Testbench)时使用for循环语句外,极少在RTL级编码中使用for循环,这是因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,不能有效的复用硬件逻辑资源,造成巨大的浪费。一般常用case语句代替。

4、if…else…和case在嵌套描述时是有很大区别的,if…else…是有优先级的,一般来说,第一个if的优先级最高,最后一个else的优先级最低。而case语句是平行语句,它是没有优先级的,而建立优先级结构需要耗费大量的逻辑资源,所以能用case的地方就不要用if…else…语句。

补充:1.也可以用if…; if…; if…;描述不带优先级的“平行”语句。

5、FPGA一般触发器资源比较丰富,而CPLD组合逻辑资源更丰富。

6、FPGA和CPLD的组成:

FPGA基本有可编程I/O单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等6部分组成。

CPLD的结构相对比较简单,主要由可编程I/O单元、基本逻辑单元、布线池和其他辅助功能模块组成。

7、Block RAM:

3种块RAM结构,M512 RAM(512bit)、M4K RAM(4Kbit)、M-RAM(64Kbit).

M512 RAM:适合做一些小的Buffer、FIFO、DPRAM、SPRAM、ROM等;

M4K RAM: 适用于一般的需求

M-RAM: 适合做大块数据的缓冲区。

Xlinx 和Lattice FPGA的LUT可以灵活配置成小的RAM、ROM、FIFO等存储结构,这种技术被称为分布式RAM。

补充:但是在一般的设计中,不提倡用FPGA/CPLD的片内资源配置成大量的存储器,这是处于成本的考虑。所以尽量采用外接存储器。

8、善用芯片内部的PLL或DLL资源完成时钟的分频、倍频率、移相等操作,不仅简化了设计,并且能有效地提高系统的精度和工作稳定性。

9、异步电路和同步时序电路的区别

异步电路:

电路核心逻辑有用组合电路实现;

异步时序电路的最大缺点是容易产生毛刺;

不利于器件移植;

不利于静态时序分析(STA)、验证设计时序性能。

同步时序电路:

电路核心逻辑是用各种触发器实现;

电路主要信号、输出信号等都是在某个时钟沿驱动触发器产生的;

同步时序电路可以很好的避免毛刺;

利于器件移植;

利于静态时序分析(STA)、验证设计时序性能。

10、同步设计中,稳定可靠的数据采样必须遵从以下两个基本原则:

(1)、在有效时钟沿到达前,数据输入至少已经稳定了采样寄存器的Setup时间之久,这条原则简称满足Setup时间原则;

(2)、在有效时钟沿到达后,数据输入至少还将稳定保持采样寄存器的Hold时钟之久,这条原则简称满足Hold时间原则。

11、同步时序设计注意事项:

异步时钟域的数据转换。

组合逻辑电路的设计方法。

同步时序电路的时钟设计。

同步时序电路的延迟。同步时序电路的延迟最常用的设计方法是用分频或者倍频的时钟或者同步计数器完成所需的延迟,对比较大的和特殊定时要求的延时,一般用高速时钟产生一个计数器,根据计数产生延迟;对于比较小的延迟,可以用D触发器打一下,这样不仅可以使信号延时了一个时钟周期,而且完成了信号与时钟的初次同步。在输入信号采样和增加时序约束余量中使用。另外,还有用行为级方法描述延迟,如“#5 a<=4’0101;”这种常用于仿真测试激励,但是在电路综合时会被忽略,并不能起到延迟作用。

Verilog 定义的reg型,不一定综合成寄存器。在Verilog代码中最常用的两种数据类型是wire和reg型,一般来说,wire型指定的数据和网线通过组合逻辑实现,而reg型指定的数据不一定就是用寄存器实现。

12、常用设计思想与技巧

(1)、乒乓操作;

(2)、串并转换;

(3)、流水线操作;

(4)、异步时钟域数据同步。是指如何在两个时钟不同步的数据域之间可靠地进行数据交换的问题。数据时钟域不同步主要有两种情况:

两个域的时钟频率相同,但是相差不固定,或者相差固定但是不可测,简称为同频异相问题。

两个时钟频率根本不同,简称异频问题。

两种不推荐的异步时钟域操作方法:一种是通过增加Buffer或者其他门延时来调整采样;另一种是盲目使用时钟正负沿调整数据采样。

13、模块划分基本原则:

(1)、对每个同步时序设计的子模块的输出使用寄存器(用寄存器分割同步时序模块原则)。

(2)、将相关逻辑和可以复用的逻辑划分在同一模块内(呼应系统原则)。

(3)、将不同优化目标的逻辑分开。

(4)、将送约束的逻辑归到同一模块。

(5)、将存储逻辑独立划分成模块。

(6)、合适的模块规模。

(7)、顶层模块最好不进行逻辑设计。

14、组合逻辑的注意事项

(1)、避免组合逻辑反馈环路(容易毛刺、振荡、时序违规等)。

解决:

A、牢记任何反馈回路必须包含寄存器;

B、检查综合、实现报告的warning信息,发现反馈回路(combinational loops)后进行相应修改。

(2)、替换延迟链。

解决:用倍频、分频或者同步计数器完成。

(3)、替换异步脉冲产生单元(毛刺生成器)。

解决:用同步时序设计脉冲电路。

(4)、慎用锁存器。

解决:

A、使用完备的if…else语句;

B、检查设计中是否含有组合逻辑反馈环路;

C、对每个输入条件,设计输出操作,对case语句设置default操作。特别是在状态机设计中,最好有一个default的状态转移,而且每个状态最好也有一个default的操作。

D、如果使用case语句时,特别是在设计状态机时,尽量附加综合约束属性,综合为完全条件case语句。

小技巧:仔细检查综合器的综合报告,目前大多数的综合器对所综合出的latch都会报“warning”,通过综合报告可以较为方便地找出无意中生成的latch。

15、时钟设计的注意事项

(1)、同步时序电路推荐的时钟设计方法:

时钟经全局时钟输入引脚输入,通过FPGA内部专用的PLL或DLL进行分频/倍频、移相等调整与运算,然后经FPGA内部全局时钟布线资源驱动到达芯片内所有寄存器和其他模块的时钟输入端。

FPGA设计者的5项基本功

《佟林传》里,佟林练的基本功是“绕大树、解皮绳”,然后才练成了什么“鬼影随行、柳叶绵丝掌”。

在我看来,成为一名说得过去的FPGA设计者,需要练好5项基本功:仿真、综合、时序分析、调试、验证。

对于FPGA设计者来说,练好这5项基本功,与用好相应的EDA工具是同一过程,对应关系如下:

  1. 仿真:Modelsim, Quartus II(Simulator Tool)

    1. 综合:Quartus II (Compiler Tool, RTL Viewer, Technology Map Viewer, Chip Planner)

    2. 时序:Quartus II (TimeQuest Timing Analyzer, Technology Map Viewer, Chip Planner)

    3. 调试:Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)

    4. 验证:Modelsim, Quartus II(Test Bench Template Writer)

掌握HDL语言虽然不是FPGA设计的全部,但是HDL语言对FPGA设计的影响贯穿于整个FPGA设计流程中,与FPGA设计的5项基本功是相辅相成的。

对于FPGA设计者来说,用好“HDL语言的可综合子集”可以完成FPGA设计50%的工作——设计编码。

练好仿真、综合、时序分析这3项基本功,对于学习“HDL语言的可综合子集”有如下帮助:

  1. 通过仿真,可以观察HDL语言在FPGA中的逻辑行为。

  2. 通过综合,可以观察HDL语言在FPGA中的物理实现形式。

  3. 通过时序分析,可以分析HDL语言在FPGA中的物理实现特性。

对于FPGA设计者来说,用好“HDL语言的验证子集”,可以完成FPGA设计另外50%的工作——调试验证。

  1. 搭建验证环境,通过仿真的手段可以检验FPGA设计的正确性。

  2. 全面的仿真验证可以减少FPGA硬件调试的工作量。

  3. 把硬件调试与仿真验证方法结合起来,用调试解决仿真未验证的问题,用仿真保证已经解决的问题不在调试中再现,可以建立一个回归验证流程,有助于FPGA设计项目的维护。

FPGA设计者的这5项基本功不是孤立的,必须结合使用,才能完成一个完整的FPGA设计流程。反过来说,通过完成一个完整的设计流程,才能最有效地练习这5项基本功。对这5项基本功有了初步认识,就可以逐个深入学习一些,然后把学到的知识再次用于完整的设计流程。如此反复,就可以逐步提高设计水平。采用这样的循序渐进、螺旋式上升的方法,只要通过培训入了门,就可以自学自练,自我提高。

市面上出售的有关FPGA设计的书籍为了保证结构的完整性,对FPGA设计的每一个方面分开介绍,每一方面虽然深入,但是由于缺少其他相关方面的支持,读者很难付诸实践,只有通读完全书才能对FPGA设计获得一个整体的认识。这样的书籍,作为工程培训指导书不行,可以作为某一个方面进阶的参考书。

对于新入职的员工来说,他们往往对FPGA的整体设计流程有了初步认识,5项基本功的某几个方面可能很扎实。但是由于某个或某几个方面能力的欠缺,限制了他们独自完成整个设计流程的能力。入职培训的目的就是帮助他们掌握整体设计流程,培养自我获取信息的能力,通过几个设计流程来回的训练,形成自我促进、自我发展的良性循环。在这一过程中,随着对工作涉及的知识的广度和深度的认识逐步清晰,新员工的自信心也会逐步增强,对个人的发展方向也会逐步明确,才能积极主动地参与到工程项目中来。

Altera FPGA\CPLD设计(基础篇)——Altera FPGA\CPLD推荐教材。。。 第1章 FPGA/CPLD简介 1.1 可编程逻辑设计技术简介 1.1.1 可编程逻辑器件发展简史 1.1.2 可编程逻辑器件分类 1.2 FPGA/CPLD的基本结构 1.2.1 FPGA的基本结构 1.2.2 CPLD的基本结构 1.2.3 FPGACPLD的比较 1.3 FPGA/CPLD设计流程 1.4 FPGA/CPLD的常用开发工具 1.5 下一代可编程逻辑设计技术展望 1.5.1 下一代可编程逻辑器件硬件上的四大发展趋势 1.5.2 下一代EDA软件设计方法发展趋势 1.6 小结 1.7 问题与思考 第2章 Altera FPGA/CPLD的结构 2.1 Altera高密度FPGA 2.1.1 主流高端FPGA——Stratix 2.1.2 内嵌高速串行收发器的FPGA Stratix GX 2.1.3 新一代90nm高端FPGA StratiX II 2.2 Altera低成本FPGA. 2.2.1 主流低成本FPGA Cyclone 2.2.2 新一代低成本FPGA Cyclone II 2.3 Altera的CPLD器件 2.3.1 主流的CPLD MAX 3000A 2.3.2 CPLD的革 MAX II 2.4 小结 2.5 问题与思考 第3章 Altera Quartus II开发流程 3.1 Quartus II软件综述 3.1.1 Quartus II软件的特点及支持的器件 3.1.2 Quartus II软件的工具及功能简介 3.1.3 Quartus II软件的用户界面 3.2 设计输入 3.2.1 设计输入方式 3.2.2 设计规划 3.2.3 设计输入文件实例 3.2.4 设计约束 3.3 综合 3.3.1 使用Quartus II软件集成综合 3.3.2 控制综合 3.3.3 综合实例 3.3.4 第三方综合工具 3.4 布局布线 3.4.1 设置布局布线参数 3.4.2 布局布线实例 3.4.3 增量布局布线 3.4.4 反标保留分配 3.5 仿真 3.5.1 指定仿真器设置 3.5.2 建立矢量源文件 3.5.3 仿真实例 3.5.4 第三方仿真工具 3.6 编程与配置 3.6.1 建立编程文件 3.6.2 器件编程和配置 3.7 小结 3.8 问题与思考 第4章 Altera的IP工具 4.1 IP的概念、Altera的IP 4.1.1 IP的概念 4.1.2 Altera可提供的IP 4.1.3 Altera IP在设计中的作用 4.2 使用Altera的基本宏功能 4.2.1 定制基本宏功能 4.2.2 实现基本宏功能 4.2.3 设计实例 4.3 使用Altera的IP核 4.3.1 定制IP核 4.3.2 实现IP核 4.3.3 设计实例 4.4 小结 4.5 问题与思考 第5章 Quartus II的常用辅助设计工具 5.1 I/O分配验证 5.1.1 I/O分配验证功能简介 5.1.2 I/O分配验证流程 5.1.3 用于I/O分配验证的输入 5.1.4 运行I/O分配验证 5.2 功率分析 5.2.1 Excel.based功率计算器 5.2.2 Simulation-based功率估算 5.3 RTL阅读器 5.3.1 RTL阅读器简介 5.3.2 RTL阅读器用户界面 5.3.3 原理图的分页和模块层次的切换 5.3.4 过滤原理图 5.3.5 将原理图中的节点定位到源设计文件 5.3.6 在原理图中查找节点或网线 5.3.7 使用RTL阅读器分析设计中的问题 5.4 SignalProbe及SignalTap II逻辑分析器 5.4.1 SignalProbe 5.4.2 SignalTap II逻辑分析器 5.5 时序收敛平面布局规划器(Timing Closure Floorplan) 5.5.1 使用Timing Closure Floorplan分析设计 5.5.2 使用Timing Closure Floorplan优化设计 5.6 Chip Editor底层编辑器 5.6.1 Chip Editor功能简介 5.6.2 使用Chip Editor的设计流程 5.6.3 Chip Editor视图 5.6.4 资源特性编辑器 5.6.5 Chip Editor的一般应用 5.7 工程更改管理(ECO) 5.7.1 ECO简介 5.7.2 ECO的应用范围 5.7.3 ECO的操作流程 5.7.4 使用Change Manager查看和管理更改 5.7.5 ECO验证 5.8 小结 5.9 问题与思考 第6章 编程与配置 6.1 配置Altera FPGA 6.1.1 配置方式 6.1.2 主动串行(AS) 6.1.3 被动串行(PS) 6.1.4 快速被动并行(FPP) 6.1.5 被动并行异步(PPA) 6.1.6 JTAG配置方式 6.1.7 ByteBlaster II下载电缆 6.1.8 配置芯片 6.2 配置文件和软件支持 6.2.1 软件支持 6.2.2 配置文件 6.3 单板设计及调试注意事项 6.3.1 配置的可靠性 6.3.2 单板设计要点 6.3.3 调试建议 6.4 小结 6.5 问题与思考 第7章 MAX+PLUS II过渡到Quartus II 7.1 MAX+PLUS II与Quartus II的功能比较 7.2 转换MAX+PLUS II设计 7.2.1 改变GUI风格 7.2.2 转换MAX+PLUS II工程 7.2.3 查看新工程 7.2.4 导入MAX+PLUS II配置文件 7.3 编辑工程 7.3.1 修改设计芯片 7.3.2 设置编译选项 7.4 编译 7.4.1 运行编译器 7.4.2 查看工程结构 7.4.3 编译报告 7.5 时序分析 7.5.1 时序设置 7.5.2 运行时序分析器 7.5.3 时序分析指定路径 7.5.4 时序约束布局器 第9章 刀路的模拟、校验和后置处理 9.1 模拟刀路 9.2 校验刀路 9.3 后置处理 9.4 加工文档 9.5 总结 附录A A.1 Cimatron快捷键 A.2 Cimatron主菜单参数设置 A.3 FILE-SETUP设置 A.4 NC常见旗标含义 A.5 Cimatron数据转换 A.6 数控加工工艺卡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值