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 Phase Locked Loop 模拟锁相环)或 DLL Delay Locked Loop 数字锁相环)资源完成时钟的分频、倍频率、移相等
操作 ,不仅简化了设计,并且能有效地提高系统的精度和工作稳定性。
DLL 是基于数字抽样方式,在输入时钟和反馈时钟之间插入延迟,使输入时钟和反馈时钟的上升沿一致来实现的。又称数字锁相环。 PLL 使用了电压控
制延迟,用 VCO 来实现和 DLL 中类试的延迟功能。又称模拟锁相环。功能上都可以实现倍频、分频、占空比调整,但是 PLL 调节范围更大,比如说: XILINX
使用 DLL ,只能够 2 4 倍频; ALTERA PLL 可以实现的倍频范围就更大毕竟一个是模拟的、一个是数字的。两者之间的对比:对于 PLL ,用的晶振存在不稳
定性,而且会累加相位错误,而 DLL 在这点上做的好一些,抗噪声的能力强些;但 PLL 在时钟的综合方面做得更好些。总的来说 PLL 的应用多 ,DLL 则在 jitter power
precision 等方面优于 PLL
目前大多数 FPGA 厂商都在 FPGA 内部集成了硬的 DLL Delay-Locked Loop )或者 PLL Phase-Locked Loop ),用以完成时钟的高精度、低抖动的倍
频、分频、占空比调整移相等。目前高端 FPGA 产品集成的 DLL PLL 资源越来越丰富,功能越来越复杂,精度越来越高(一般在 ps 的数量级)。 Xilinx 芯片
主要集成的是 DLL ,而 Altera 芯片集成的是 PLL Xilinx 芯片 DLL 的模块名称为 CLKDLL ,在高端 FPGA 中, CLKDLL 的增强型模块为 DCM Digital Clock
Manager )。 Altera 芯片的 PLL 模块也分为增强型 PLL Enhanced PLL )和高速( Fast PLL )等。这些时钟模块的生成和配置方法一般分为两种,一种是在 HDL
代码和原理图中直接实例化,另一种方法是在 IP 核生成器中配置相关参数,自动生成 IP Xilinx IP 核生成器叫 Core Generator ,另外在 Xilinx ISE 5.x 版本
中通过 Archetecture Wizard 生成 DCM 模块。 Altera IP 核生成器叫做 MegaWizard 。另外可以通过在综合、实现步骤的约束文件中编写约束属性完成时钟模
块的约束。
9 异步电路和同步时序电路的区别
异步电路 :
1 / 8 电路核心逻辑有用组合电路实现;
异步时序电路的最大缺点是容易产生毛刺;
不利于器件移植;
不利于静态时序分析( 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) 、替换异步脉冲产生单元(毛刺生成器)。
2 / 8 3 / 8
解决:用同步时序设计脉冲电路。
(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)
2. 综合: Quartus II (Compiler Tool, RTL Viewer, Technology Map Viewer, Chip Planner)
3. 时序: Quartus II (TimeQuest Timing Analyzer, Technology Map Viewer, Chip Planner)
4. 调试: Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)
5. 验证: 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 项基本功的某几个方面可能很扎实。但是由于某个或某几个方面能力的
欠缺,限制了他们独自完成整个设计流程的能力。入职培训的目的就是帮助他们掌握整体设计流程,培养自我获取信息的能力,通过几个设计流程来
回的训练,形成自我促进、自我发展的良性循环。在这一过程中,随着对工作涉及的知识的广度和深度的认识逐步清晰,新员工的自信心也会逐步增
强,对个人的发展方向也会逐步明确,才能积极主动地参与到工程项目中来。 2 FPGA 芯片速度等级认识(分享)
最初接触 speed grade 这个概念时,很是为 Altera -6 -7 -8 速度等级逆向排序的方法困惑过一段时间。不很严密地说, 序号越低,速度等级越高
这是 Altera FPGA 的排序方法, 序号越高,速度等级也越高 这是 Xilinx FPGA 的排序方法。 riple
从那时起,就一直没搞明白 speed grade 是怎么来的,唯一的概念是:同一款芯片可以有多个速度等级,不同的速度等级代表着不同的性能,不同的
性能又导致芯片价格的巨大差异。脑子里总有一个模模糊糊的推测: FPGA 厂家为了提高利润,专门给同一款芯片生产了不同的速度等级。 riple
直到一年前和一位学过 IC 设计的同事 hammer 讨论这一问题时,才有了新的认识:对 FPGA 厂家来说,为了得到同一款芯片的不同速度等级而专门设
计不同的芯片版图是不划算的; 所以芯片的速度等级不应该是专门设计出来的,而应该是在芯片生产出来之后,实际测试标定出来的;速度快的芯片
在总产量中的比率低,价格也就相应地高。 riple
这一解答很是合理,纠正了我的一个错误认识。但是我仍然有两点困惑:
1. 是什么因素导致了同一批芯片的性能差异; 2. 如果因素已知,为什么不人为控制这些因素,提高高速芯片的产率,达到既增加芯片厂商的利润又降
低高速芯片价格的目的呢。 riple
前些天在博客里看到 huge 朋友的一篇 FPGA speed grade ,激发了我进一步探索上述问题的动力。通过在网络上搜索,逐步得到了以下一些认识:
riple
1. 芯片的速度等级决定于芯片内部的门延时和线延时,这两个因素又决定于晶体管的长度 L 和容值 C ,这两个数值的差异最终决定于芯片的生产工艺。
怎样的工艺导致了这一差异,我还没找到答案。 riple
2. 在芯片生产过程中,有一个阶段叫做 speed binning 。就是采用一定的方法、按照一组标准对生产出来的芯片进行筛选和分类,进而划分不同的速
度等级。 测试和封装 应该就包含这一过程。 riple
关于 speed binning 的技术有很多专利: riple
Integrated circuit with adaptive speed binning
Semiconductor device with speed binning test circuit and test method thereof
Binning for semi-custom ASICs
Method and apparatus for determining wafer quality profiles
Method of sorting dice by speed during die bond assembly and packaging to customer order
Method for prioritizing production lots based on grade estimates and output requirements
3. 速度等级的标定不仅仅取决于芯片本身的品质,还与芯片的市场定位有很大关系,返修概率和成本也是因素之一。 riple
4. 芯片的等级可以在测试后加以具体调整和改善,在存储器芯片的生产中这一技术应用很广泛。 riple
5. 芯片生产的过程是充满各种变数的,生产过程可以得到控制,但是控制不可能精确到一个分子、一个原子,产品质量只能是一个统计目标。同一个
wafer 上的芯片会有差异,即使是同一芯片的不同部分也是有差异的。 速度等级是一个统计数字,反映了一批芯片的某些共同特性, 不代表个别芯片的
4 / 8 质量。而且由于某些芯片的测试是抽样进行的,也不排除个别芯片的个别性能会低于标定的速度等级。不过,据说 FPGA 的测试是极严格的,很可能
我们拿到手的芯片个个都经过了详尽的测试。这也是 FPGA 芯片价格高于普通芯片的原因。 riple
6. 同一等级的芯片中的绝大多数,其性能应该高于该速度等级的划分标准。这也是为什么在 FPGA 设计中,有少许时序分析违规的设计下载到芯片中
仍然能够正常运行的原因(时序分析采用的模型参数是芯片的统计参数,是最保守也是最安全的)。不过,由于同一等级的芯片仍然存在性能差异,
存在时序违规但是单次测试成功的 FPGA 设计不能确保在量产时不在个别芯片上出现问题(出了问题就要返修或现场调查,成本一下子就上去了)。
所以,还是要把时序收敛了才能放心量产,这就是工程标准对产品质量的保证。 riple
7. 概率和统计学源于工程实践,对工程实践又起到了巨大的指导作用。工程实践中的标准都是前人经验教训的积累,是人类社会的宝贵精神财富。 ri
ple
8. 现实世界是模拟的,不是数字的。在考察现实问题时,我们这些数字工程师和软件工程师应该抛弃 一是一、〇是〇 的观念,用连续的眼光看待这
个连续变化的真实世界。 riple
9. 芯片生产过程中的不确定性导致了芯片的性能差异,这一差异影响了芯片的价格,价格和性能的折中又影响了我们这些 FPGA 设计工程师在器件选
型、设计方法上的决策,我们生产的产品的性价比决定了产品的销售,产品的销量又决定了芯片的采购量,采购量又影响了芯片的采购价格 ... 。原子、
分子级别上的差异,就这样一级一级地传递和放大。人类社会就是这样环环相扣,互相制约的。嘿,真是神奇!
3 、转 FPGA 学习
学习 FPGA 我主要经历了这么几个阶段:
①、 Verilog 语言的学习,熟悉 Verilog 语言的各种语法。
②、 FPGA 的学习,熟悉 QuartusII 软件的各种功能,各种逻辑算法设计,接口模块 (RS232,LCD,VGA,SPI,I2c ) 的设计,时序分析,硬件优化等,
自己开始设计简单的 FPGA 板子。
③、 NiosII 的学习,熟悉 NiosII 的开发流程,熟悉开发软件 (SOPC,NiosII IDE), 了解 NiosII 的基本结构,设计 NiosII 开发板,编写 NiosII C 语言程
序,调试板子各模块功能。
其实有 C 语言的基础,学起 Verilog 的语言很简单,关键要有并行的概念,所有的 module assign always 都是并行的,这一点与软件语言有
明显不同。这里推荐几本评价比较好的学习 Verilog 的书籍:
①、 verilog 数字系统设计教程》 ,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。但本书对于资源优化方面
的编程没有多少涉及到。
5 / 8 ②、 《设计与验证 Verilog HDL ,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。
学习 Verilog 其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。
Verilog 语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。
刚开始我拿了实验室一块 CPLD 的开发板做练习,熟悉 QuartusII 的各种功能,比如 IP 的调用,各种约束设置,时序分析, Logiclock 设计方法
等,不过做到后面发现 CPLD 的资源不太够 ( 没有内嵌的 RAM 、不能用 SignalTapII LE 太少等 ) ,而实验室没有 FPGA 开发板,所以就萌生了自己做
FPGA 开发板的意图,刚好 Cadence 我也学的差不多了,就花了几天时间主要研究了 FPGA 配置电路的设计,在板子上做了 Jtag AS 下载口,在
做了几个用户按键和 LED ,其他的口全部引出作为 IO 口,电路比较简单,板子焊好后一调就通了 ( 心里那个爽啊 ...) 。我选的 FPGA cycloneII 系列
EP2C5 ,资源比以前的 FPGA 多了好几倍,还有 PLL ,内嵌的 RAM ,可以试试 SignalTapII ,用内嵌的逻辑分析仪测试引脚波形, 对于 FPGA 的调
试,逻辑分析仪是至关重要的。 利用这块板子我完成了项目中的几个主要功能: RS232 通信,指令译码,配置 DDS AD 数据高速缓存,电子开关状
态设置等,在实践中学习起来真的比平时快很多,用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好:
①、 Altera FPGA/CPLD 设计(基础篇)》 :讲解一些基本的 FPGA 设计技术,以及 QuartusII 中各个工具的用法( IP RTL SignalProbe Si
gnalTapII Timing Closure Floorplan chip Editor 等),对于入门非常好。
②、 Altera FPGA/CPLD 设计(高级篇)》 :讲解了一些高级工具的应用, LogicLock ,时序约束很分析,设计优化,也讲述了一些硬件编程的
思想,作为提高用。
③、 FPGA 设计指南 -- 器件,工具和流程》 :这本书看了他的目录忍不住就买了,这本书讲述了 FPGA 设计的各个方面,虽然每个方面都是点到
为止,但能让你有个整体的概念,了解 FPGA 的所有设计功能,了解 FPGA 开发的整个流程。
④、在这里也推荐几个学习 FPGA 比较好的论坛
http://www.edacn.net/bbs
http://www.eetop.cn/
⑤、其实最好的学习网站莫过于 Altera 的官方网站 www.altera.com ,不过很多人一看到英语就不想看,其实上面的英文很简单,很多时候不敢看是
因为对自己没信心或心静不下来看。不过官方网站上资料很多,刚开始可能会觉得资料安排的有点乱,不方便查找,以后有时间我列个资料的链接目
录,整理一下,方便大家查找。
到这里,自己最 FPGA 的学习有一段时间了,练习了很多实例,自己也编写了不少程序,也有了一些项目经验,算是对 FPGA 有些了解了。在不
断的学习中发现 FPGA 不仅可以做逻辑设计,算法设计等,还能做嵌入式开发, altera 先后开发了 Nios NiosII 两款 FPGA 的嵌入式软核 ,并有配套
的软件,刚开始看到这些我真是心中突然豁然开朗,学习真的是无止境,又一个全新的领域摆在我面前,我决定学习 NiosII ,要学就要学最好。
刚开始入门是很痛苦的, 嵌入式设计需要从硬件到驱动到软件全部熟悉 ,硬件系统问题还不是很大 ( 以前做过单片机, DSP MCU), 处理器的架
构心里还有点数,对于驱动和软件工程,刚开始学习真的很头痛。 NiosII 应该还算比较新的内容 ( 应该是 2004 年出的 ) ,国内的书籍不算很多,网上这
方面的资料也比较零碎,所以我就开始将 Altera 网站上这方面的资料系统的看一边,这里推荐几本网站上的 handbook
①、 Embedded Design Handbook
6 / 8 ②、 Nios II Processor Reference Handbook
③、 Nios II Software Developer's Handbook
④、 Quartus II Handbook, Volume 4: SOPC Builder
⑤、 Quartus II Handbook, Volume 5: Embedded Peripherals
看完这些 handbook ,总算基本明白整个架构,软硬件设计方法,驱动的编写等,感觉自己可以编一些嵌入式的程序了,不过虽然前面做的那块 e
p2c5 的板子支持 NiosII 系统,不过对于嵌入式设计来说还是显得单薄了一点,没有 SDRAM Flash 这两个比较基本的模块, Ep2C5 内嵌的 RAM
小,程序写不大,而且每次总要绞尽脑汁优化程序代码大小,很多时候优化了后函数功能会受到限制,不利于初学者,也不利于调试。所以到这里我
有产生了自己做一块 Nios 开发板的想法 ( 直接买比较贵,自己做便宜,而且还能锻炼自己,一举两得 ) ,通过借鉴其他开发板,选择自己开发板上需要
包含什么模块,确定各个模块使用什么芯片,阅读各个芯片的 datasheet ,画出原理图并做出 PCB 图,这块板子我选的是 Ep2c8Q208 ,比上一块资源
又将近多了一倍,板子上还有以下模块: SDRAM Flash EPCS4 RS232 USB,VGA,PS2,AD,DA,LCD 等,满足了一般开发板的配置要求。板子回
来以后调试了四五天, (flash 工作了, LCD 显示了, RS232 通了, USB 通了, AD DA 工作了, SDRAM 正常了 ...) ,真是每天都有惊喜,每个模块都
编写了 NiosII 软件测试程序,调试硬件的时候对软件的运行也更熟悉了。在这次调试的过程中真的学到了很多,为此专门写了好几页调试笔记,下次
拿出来和大家一起分享。现在硬件平台有了, NiosII 也了解的差不多了,终于可以自己编写一些规模大一点的程序了。
以后的路还很长,不过也有很多惊喜在等着我们
4 FPGA 牛人的经验谈(转)
这里我谈谈我的一些经验和大家分享,希望能对 IC 设计的新手有一定的帮助,能使得他们能少走一些弯路,欢迎讨论!
我相信 如果有梦想,就会实现!
IC 工业中有许多不同的领域, IC 设计者的特征也会有些不同。在 A 领域的一个好的 IC 设计者也许会花很长时间去熟悉 B 领域的知识。在我们职业
生涯的开始,我们应该问我们自己一些问题,我们想要成为怎样的 IC 设计者?消费? PC 外围?通信?微处理器或 DSP ?等等?
IC 设计的基本规则和流程是一样的,无论啥样的都会加到其中。 HDL,FPGA 和软件等是帮助我们理解芯片的最好工具。 IC 的灵魂是知识。因此我们遇
到的第一个挑战将是获得设计的相关信息,然后理解信息并应用它。
但是有些信息不是免费的,我们需要加入一些协会或从如 IEEE/ISO 等那些组织购买一些文档。设计者应该有很强的背景知识来很快的理解他们,甚至
能改进存在的标准或。一个好的设计者应该有足够的设计技能和工具应用知识并且不断的积累他们。
HDL ,计算机仿真和只能解决 ASIC 设计流程的数字部分。如果在 IC 中有任何模拟部分,他将依赖模拟设计者或从另外的厂家购买。甚至一些纯数字
部分也能从另外一些厂家购买以加速上市时间。 那些不是被我们设计的部分称为 IP ,包括 HDL 代码,网表,硬核。 对于我们设计的技术取决于硬核。
一些 IP 是非常贵的,如在 USB2.0 中的 PHY 。一些小的公司没有足够的人力和软件资源来完成有些工作,甚至他们不能在缺货期预定足够的晶原,因
此涉及服务公司取代了他们的工作。但并不是每个 IP 都满足我们的需要,有时我们需要在购买后作一些修改。我们要在设计前决定所要用到的 IPs
7 / 8 在设计开始,设计者必须理解所有相关的标准、规范和算法。但是有许多方法来应用这些规范和算法。最好的结构是快速和最小芯片尺寸的结合。不
幸的是,快速的需求常常和最小芯片尺寸的需求是对立的。因此,在 HDL 编码工作前规划一个最优的结构也是一个重要的问题。
以下条款是一些对一个稳步的和成功的设计的建议:(可能有些朋友也指出了其中的部分,我这里只作简要说明,可能稍有不同)
命名风格:
1 不要用关键字做信号名; 2 不要在中用 VERILOG 关键字做信号名; 3 命名信号用含义; 4 命名 I/O 口用尽量短的名字; 5 不要把信号用高和低的
情况混合命名; 6 信号的第一个字母必须是 A-Z 是一个规则; 7 使模块名、实例名和文件名相同;
编码风格:记住,一个好的代码是其他人可以很容易阅读和理解的。
1 尽可能多的增加说明语句; 2 在一个设计中固定编码格式和统一所有的模块,根从项目领导者定义的格式; 3 把全部设计分成适合数量的不同的模
块或实体; 4 在一个 always/process 中的所有信号必须相关; 5 不要用关键字或一些经常被用来安全综合的语法; 6 不要用复杂逻辑; 7 在一个 if
句中的所有条件必须相关;
设计风格
1 强烈建议用同步设计; 2 在设计时总是记住时序问题; 3 在一个设计开始就要考虑到地电平或高电平复位、同步或异步复位、上升沿或下降沿触发
等问题,在所有模块中都要遵守它; 4 在不同的情况下用 if case 5 在锁存一个信号或总线时要小心; 6 确信所有寄存器的输出信号能够被复位 /
置位; 7 永远不要再写入之前读取任何内部存储器(如 SRAM 8 从一个时钟到另一个不同的时钟传输数据时用数据缓冲,他工作像一个双时钟 FIF
O 9 VHDL 中二维数组可以使用,它是非常有用的。在 VERILOG 中他仅仅可以使用在测试模块中,不能被综合; 10 遵守 register-in register-out
规则; 11 synopsys DC 的综合工具是非常稳定的,任何 bugs 都不会从综合工具中产生; 12 确保 FPGA 版本与 ASIC 的版本尽可能的相似,特别
SRAM 类型,若版本一致是最理想的; 13 在嵌入式存储器中使用 BIST 14 虚单元和一些修正电路是必需的; 15 一些简单的测试电路也是需要
的,经常在一个芯片中有许多测试模块; 16 除非低功耗不要用门控时钟; 17 不要依靠脚本来保证设计。但是在脚本中的一些好的约束能够起到更好
的性能(例如前向加法器); 18 如果时间充裕,通过时钟做一个多锁存器来取代用 MUX 19 不要用内部 tri-state, ASIC 需要总线保持器来处理内部
tri-state 20 top level 中作 pad insertion 21 选择 pad 时要小心(如上拉能力,施密特触发器, 5 伏耐压等); 22 小心由时钟偏差引起的问题;
23 不要试着产生半周期信号; 24 如果有很多函数要修正,请一个一个地作,修正一个函数检查一个函数; 25 在一个计算等式中排列每个信号的位数
是一个好习惯,即使综合工具能做; 26 不要使用 HDL 提供的除法器; 27 削减不必要的时钟。它会在设计和布局中引起很多麻烦,大多数 FPGA 1
4 个专门的时钟通道;
以上是大家在设计中最好遵守的要点,它可以使你的设计更好。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SKCQTGZX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值