FPGACPLD数字电路设计经验
简述cpldfpga的原理特点及应用

简述CPLD/FPGA的原理特点及应用1. 什么是CPLD/FPGACPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)和FPGA (Field Programmable Gate Array,场可编程门阵列)都属于可编程逻辑器件的一种。
它们是在数字电路设计领域中广泛应用的一类芯片,能够根据设计者的需求进行灵活的逻辑和功能配置。
CPLD是由可编程逻辑门、触发器和可编程互连电路构成;FPGA则是基于可编程逻辑块、可编程的互连和内部存储单元块。
2. CPLD/FPGA的工作原理CPLD/FPGA的工作原理是通过对其内部的逻辑单元、开关和互连网络进行编程来实现特定的功能和逻辑操作。
2.1 CPLD的工作原理CPLD是由大量可编程逻辑门和触发器构成的,其中逻辑门负责逻辑运算,触发器负责存储数据。
CPLD内部的可编程逻辑门和触发器的连线可以通过编程修改,从而灵活配置逻辑功能。
CPLD通过内部编程存储器(PROM)或者FLASH等方式存储逻辑设计,并在电源打开后加载这些设计。
一旦CPLD内部的逻辑门和连线被编程好后,它们将始终保持不变,从而实现了硬件的逻辑功能。
2.2 FPGA的工作原理FPGA的逻辑块(Logic Block)是由可编程逻辑单元、可编程的互连和内部存储单元块组成。
逻辑单元负责逻辑运算,互连负责连接逻辑单元和存储单元,内部存储单元用于存储数据。
FPGA利用逻辑单元和互连网络构建逻辑功能,通过内部存储单元来实现数据的存储。
与CPLD不同的是,FPGA的逻辑块在每次上电时都需要重新加载设计,因此它可以根据需求重新配置逻辑功能。
3. CPLD/FPGA的特点CPLD/FPGA有以下几个特点:3.1 可编程性CPLD/FPGA可以根据设计者的需要进行编程,从而实现特定的逻辑功能。
这种可编程性使得CPLD/FPGA适用于多种应用场景,能够灵活应对不同的需求。
硬件工程师职位要求

职位描述:任职要求:1、本科及以上学历,有至少3年的实际工作经验。
2、精通高速电路设计,对X86、ARM等有使用经验。
3、精通高速互联技术,对以太网、PCIe等有深入研究和熟练使用经验。
4、精通FPGA/CPLD,有丰富的设计经验。
5、能够熟练使用高速电路设计软件,并有设计经验。
6、精通模拟电子,对模拟采样回路能够进行熟练设计。
职位描述:职位要求1)5年以上电子产品硬件设计经验,有较强的电路分析和设计能力,有较强的调试和问题解决能力;2)熟悉AVR等单片机原理和周边硬件电路,熟悉EMC处理,以及相关安规要求;3)熟悉电路设计软件,PROTEL 99SE , PROTEL DXP,会做4层PCB的layout;4)对大电流低噪声设计和布线原则,DC-DC有较深了解;5)精通数字电路和模拟电路,熟悉LED 恒流驱动工作原理;6)最好是同时能熟练使用AUTOCAD设计2D图纸;7)熟悉项目的统筹与管控,有良好的沟通协调能力,良好的团队精神。
职位描述:岗位职责:1、完成项目经理下达的科研及新产品开发的工作计划;2、根据项目总体设计方案,实施产品设计以及试制,并满足相关标准要求;3、设计软启动器、变频器控制电路;4、完成国产化产品的相关技术资料和产品的认证工作。
任职资格:1、电力电子、电气工程、自动控制等相关专业本科及以上学历;2、熟悉数字电路和模拟电路的设计,有高速数字电路板的设计经验;3、精通TI DSP、ARM单片机,具有两年以上开发经验者优先;4、精通C语言、汇编语言;5、熟悉CPLD、FPGA设计、仿真工具,并具有使用经验。
职位描述:1、职位描述:1)、原理图绘制及整理,pcb布板。
2)、样机的制作及调试。
3)、基本样机测试试验的实施,解决表计emc问题。
4)、设计文件的制作及pdm流程归档。
2、工作要求:1)、应用电子或自动化等相关专业本科学历。
2)、精通protel99se进行原理图和pcb设计,具有一定的电路知识。
用CPLD/FPGA设计A/D采样控制器

7
.
1 引 言
CP F GA ( 杂 可 编 程 逻 辑 器 件 / 场 可 编 I D/ P 复 现
0 l
C CK LO I ' Nl l
E_ 0 G0 1
E I6 0 AD G 『 1 DA ^m A
E 【 0 G 2 J 7
^ I E
程 门 阵 列 ) 数 字 系 统 的 设 计带 来 了极 大 的灵 活 性 , 为 兼有串、 行工作方式 和高集成度、 并 高速 、 可靠 性 高 等 明 显 的 特 点 , 超 高 速 领 域 和实 时 测 控 方 面有 非 在 常 广 泛 的应 用 。 VHDl 言 主 要 用 于 描 述 数 字 系统 的 结 构 、 语 行 为 、 能 和 接 口, 其 他 的硬 件 描 述 语 言 相 比, 功 与 VHDI 有 更 强 的 行 为 描 述 能 力 , 而 决 定 它 成 具 从 为 系 统 设 计 领 域最 佳 的硬 件 描 述 语 言 用 VHD1 设
件 , 而生 成硬 件 电路 。VHDI 是 一 种 仿真 语 言 , 从 还
结 束 标 志 , 电 平 转 为 高 电 平 时 转 换 结 束 ; TART 低 S 为转换启动信号 , 升沿有效j 上 OE 为 数 据 输 出 允 许 端 , 电 平 有 救 ;DO D7 为 A, 变 换 数 据 输 出 高 [ … 3 / D 端 其工 作 时 序 如 图 2所 示 。
言 进行 描 述 。
关 键词 : LD/ PGA, CP F 采样 控 制 器 , ADC 8 9 VHDL语 言 , 限 状 态 机 0 0. 有
[ sr c ] A s mp i g c n r l ri d sg e y u ig C F GA.Ac o d n O Ab ta t a l o to l s e i n d b sn PI n e D/ P c r i g t
逻辑设计中的FPGA与CPLD技术应用

逻辑设计中的FPGA与CPLD技术应用在现代电子行业中,逻辑设计是一个至关重要的环节。
FPGA (Field-Programmable Gate Array)和CPLD(Complex Programmable Logic Device)技术作为两种主要的可编程设备,已经在逻辑设计中广泛应用。
它们具有灵活性、可编程性以及高度集成的特点,使得它们在各种应用领域中扮演着重要的角色。
一、FPGA技术应用FPGA是一种可编程逻辑器件,其内部可通过编程实现各种逻辑功能和数字电路设计。
FPGA通常由可编程逻辑单元(CLB)、输入输出引脚和输入输出模块等部分构成。
其设计过程包含RTL(Register-Transfer Level)描述、综合、布局布线以及配置等环节。
1. 通信与网络领域在通信领域,FPGA被广泛应用于协议转换、调制解调器设计以及网络加速器等方面。
由于FPGA的可编程性,可以根据需要灵活配置不同的协议,实现不同网络之间的无缝对接。
2. 数字信号处理(DSP)领域在数字信号处理领域,FPGA被广泛应用于图像处理、音频处理以及实时数据处理等方面。
由于FPGA具有并行处理的能力,能够同时处理多个数据流,因此在实时性要求较高的应用中表现出色。
3. 汽车电子领域在汽车电子领域,FPGA被广泛应用于汽车控制单元(ECU)和车载娱乐系统等方面。
由于汽车电子应用对可靠性和安全性要求较高,FPGA的可编程性以及自适应性能使其成为理想的选择。
二、CPLD技术应用CPLD是一种更小规模的可编程器件,与FPGA相比,CPLD通常更适用于复杂逻辑功能的实现。
CPLD通常由可编程逻辑阵列(PLA)、输入输出引脚以及输入输出缓冲区组成。
1. 控制系统领域在控制系统领域,CPLD被广泛应用于逻辑控制器的设计。
由于CPLD具有高速、低功耗以及可靠性强的特点,被广泛应用于各类自动化控制系统中。
2. 电源管理系统领域在电源管理系统领域,CPLD被广泛应用于电源管理单元(PMU)的设计。
CPLD实验报告

实验一 Xilinx软件及状态机设计一实验目的:学习FPGA设计软件, 掌握软件流程, 掌握状态机编程。
二实验内容:设计一个状态机三实验说明:状态机设计是数字电路中使用非常广泛和方便的时序设计工具。
由于硬件是并行的触发, 相对软件是串行执行, 那么让硬件电路按照节拍执行串行操作指令就成为一个问题, 这就是状态机的主要功能。
相应的, 软件指令中的几十条简单顺序执行代码可能需要硬件的几十上百个触发器去实现其功能。
所以, 软件与硬件的设计思路有相当大的区别。
当然, 随着FPGA规模的不断扩大, 这些问题也越来越容易解决了。
我们可以用软件的思路去描述自己的设计, 可能最终实现的电路是几十万门级的器件, 但是你只要花费几美元就能买到。
状态机是数字电路的基础, 因此, VHDL的学习也从这个实验开始。
四实验过程:1.在进行实验之前, 我先自学了VHDL语言。
2.熟悉Xilinx软件环境。
3.通过仿真, 读懂了states这段代码所实现的功能及其出现的问题。
五思考题:1.通过仿真, 这段代码实现相应功能时出了什么问题?请修正代码。
答:这段程序完成的是对红绿灯的控制功能。
通过仿真发现所有的灯都比预期的多亮了2秒, 比如东西方向绿灯亮62秒(应该是60秒), 黄灯是5秒(应该是3秒)。
出现此问题的原因是没有考虑到硬件的延时问题。
所以只要把程序中的59改为57, 39改为37, 3改为1, 再进行仿真, 结果就正确了。
2.状态机输出分成同步输出和异步输出, 状态机异步输出直接用状态机的某个状态进行组合逻辑运算来得到一个输出, 同步输出是在该状态的时钟上跳沿控制输出变化。
请问同步输出和异步输出利弊各在哪里?答: 同步输出的优点是: 时钟脉冲的间距解决了组合逻辑电路中的延时和竞争问题。
只要时钟脉冲的宽度合适, 输出就不会存在竞争与现象。
缺点是: 外部输入信号的变化应满足触发器正常工作所需的建立和保持时间。
因为上述特点使得同步时序输出的工作速度的提高受到限制, 且对时钟脉冲到达个触发器的时间及外部信号的变化有较严格的要求。
FPGA与CPLD 总结

CPLD(complex programable logic device)复杂可编程逻辑器件FPGA(field programable gate array)现场可编程门阵列FPGA和CPLD的逻辑单元本身的结构与SPLD相似,即与阵列和可配置的输出宏单元组成。
FPGA逻辑单元是小单元,每个单元只有1-2个触发器,其输入变量通常只有几个因而采用查找表结构(PROM形式)这样的工艺结构占用的芯片面积小,速度高(通常只有1-2纳秒),每个芯片上能集成的单元数多,但逻辑单元功能弱。
如果想实现一个较复杂的功能,需要几个这样的单元组合才能完成(总延时是各个单元延时和互连延时的和),互连关系复杂。
CPLD中的逻辑单元是单元,通常其变量数约20-28个。
因为变量多,所以只能采用PAL结构。
由于这样的单元功能强大,一般的逻辑在单元内均可实现,因而其互连关系简单,一般通过集总总线既可实现。
电路的延时通常就是单元本身和集总总线的延时(通常在数纳秒至十几纳秒),但是同样集成规模的芯片中的触发器的数量少得多。
从上面分析可知道:小单元的FPGA较适合数据型系统,这种系统所需要的触发器数多,但是逻辑相对简单;大单元的CPLD较适合逻辑型系统,如控制器等,这种系统逻辑复杂,输入变量多,但触发器需求量相对较少。
反熔丝工艺只能一次性编程,EPROM EEPROM 和FLASH工艺可以反复的编程,但是他们一经编程片内逻辑就被固定。
他们都是只读型(ROM)编程,这类编程不仅可靠性较高还可以加密。
XILINX公司的FPGA芯片采用RAM型编程,相同集成规模的芯片中的触发器数目较多,功耗低,但是掉电后信息不能保存,必须与存储器联用。
每次上电时必须先对芯片配置,然后才能使用,这似乎是RAM型PLD的缺点,但是ROM型PLD中的编程信息在使用时是不能变化的,RAM型PLD却可以在工作时更换内容,实现不同的逻辑。
CPLD和FPGA的结构,性能对照:CPLD FPGA PROM集成规模:小(最大数万门)大(最高达百万门)单元粒度:大(PAL结构)小(PROM结构)互连方式:集总总线分段总线长线专用互连编程工艺:EPROM EEPROM FLASH SRAM编程类型:ROM RAM型须与存储器联用信息:固定可实时重构触发器数:少多单元功能:强弱速度:高低222222222222222222222222222222222222延迟:确定,可以预测不能确定不能预测功耗:高低加密性能:可加密不能加密适用场合:逻辑型系统数据型系统LCA(LOGIC CELL ARRAY)逻辑单元阵列CLB(CONFIGURABLE LOGIC BLOCK)可配置逻辑模块IOB(INPUT OUTOUT BLOCK)输入输出块Spartan-xl系列FPGA的主要特性SPARTAN-XL系列的FPGA具有低压,低功耗的特点。
基于CPLD-FPGA技术的数字系统设计研究
基于CPLD/FPGA技术的数字系统设计研究摘要:cpld/fpga是复杂的可编程逻辑器件,都是由pal、gal 等器件发展而来。
cpld/fpga技术的数字系统设计,主要包括设计面积和速度两个方面,该文主要通过资源共享设计和流水线设计等来研究cpld/fpga技术的数字系统设计,希望在应用中有一定的借鉴作用。
关键词:数字系统 cpld/fpga 设计中图分类号:tp332 文献标识码:a 文章编号:1674-098x(2013)02(c)-00-011 cpld/fpga技术cpld/fpga是复杂的可编程逻辑器件,属于规模化的集成电路的范畴。
目前,该技术的集成度已经达到200万门/片,融合了asic 高集成度的特点以及可编程逻辑器便于设计生产的特点,比较适用于开发小批量产品和样品的研究制造,缩短了产品上市的时间。
cpld内利用长度固定的金属线把各逻辑块连接起来,设计出的各种逻辑电路都可以很好的预测时间,有效地弥补了分段式互连结构在时序不完全预测中的缺点。
cpld的特点有编程灵活、设计开发周期短、集成度高、适用范围宽、工具先进、成本较低、不用测试、价格大众化等。
cpld在众多的电路设计规模比较大,所以在产品的设计和生产上得到广泛应用,可以说cpld适用于所有可以使用中小型数字系统的集成电路的场合。
目前,cpld技术的数字系统器件已经成为电子产品必要的组成部分,关于cpld的设计和使用是电子工程师一种必备的技能。
fpga也是由pal和gal等发展而来,它以半定制电路的形式在asic中出现,既弥补了定制电路的缺陷,又消除了可编程器件的缺点。
fpga主要由输出输入模块、可配置逻辑模块和内部连线构成,在编程方面不限次数。
fpga作为复杂的可编程逻辑器件,在结构上和传统逻辑电路以及pal和gal器件有着很大的不同。
fpga采用小型查找表进行组合逻辑,每一个查找表都通过输入端连接一个触发器,再由触发器驱动另外的逻辑电路,构成的这种基本的逻辑单元模块有组合逻辑功能和时序逻辑功能,不同的逻辑模块之间是由金属线连接在一起的。
FPGA设计的重要规范和经验精华
从大学时代第一次接触FPGA至今已有10多年的时间。
至今记得当初第一次在EDA实验平台上完成数字秒表,抢答器,密码锁等实验时,那个兴奋劲。
当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。
后来读研究生,工作陆陆续续也用过Quartus II,Foundation,ISE,Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。
工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。
逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性。
在逻辑方面,我觉得比较重要的规范有这些:1.设计必须文档化。
要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。
这样做乍看起来很花时间,但是从整个项目过程来看,绝对要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。
2.代码规范。
如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行重新例化就行了,从而使得代码更加易于重用。
b.信号命名要规范化。
1)信号名一律小写,参数用大写。
2)对于低电平有效的信号结尾要用_n标记,如rst_n。
3)端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后方便很多。
4)一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个entity。
第三章 FPGA/CPLD设计流程
EDA技术讲义
FPGA芯片叫板微处理器 FPGA 芯片在一定程度上正在蚕食微处理器的市场。 FPGA 芯片也开始用于消费类的电子设备中,包括手机和数码相机。 飞利浦、诺基亚、 Palm及索尼均在其消费类的电子产品中采用 了FPGA芯片。 XILINX 的首席执行官 W.Roelandts 亲眼目睹了 FPGA 如何改 变电脑构架。50多年前,匈牙利数学家纽曼(John von Neumann )提出了电脑的设计构想 ----通过中央处理器从存储器中存取数 据,并逐一处理各项任务。现在,通过采用可编程芯片FPGA取 代微处理器,电脑可并行处理多项任务。 W.Roelandts说,“由纽曼提出的电脑架构已经走到尽头” ,“可编程芯片将掀起下一轮应用高潮。
尽管FPGA芯片的主频要低于奔腾处理器,但是由于FPGA 芯片可并行处理多项任务 ,因此处理速度要比奔腾处理器 或数字信号处理器快得多!
FPGA芯片武装超级电脑
EDA技术讲义
FPGA芯片叫板微处理器 美国赢通系统公司(Wincom Systems)推出一款令人惊叹的服 务器。这款专为网站运行而设计的服务器尺寸仅有 DVD 播放机 大小,工作能力却相当于 ,甚至超过 50 台戴尔、IBM 或 SUN 公司 售价 5000 美元的服务器。赢通公司的这款服务器并未采用目前 电脑中不可或缺的微处理器。 传统的个人电脑及服务器通常采用英特尔的奔腾处理器或 SUN 计算机系统公司的 SPARC 芯片作为中央处理单元。而赢通的这 一产品却没有采用微处理器,而是由FPGA芯片驱动。 FPGA芯片的运行速度比奔腾处理器慢,但可并行处理多项任务 ,而微处理器一次仅能处理一项任务。因此,赢通公司的服务 器只需配置几个价格仅为 2000 多美元的 FPGA 芯片,便可击败 SUN 计算机系统公司的服务器或采用英特尔处理器的电脑,“ 我们的服务器处理速度要比普通服务器快50到300倍”。
精品课件-Xilinx FPGACPLD设计初级教程-实验七
input sys_clk; input sys_rst; input button;
output [3:0] DLA; output [7:0] DL;
实验七 数字秒表一
reg [3:0] DLA; reg [7:0] DL; //****************************************** ********************* // Generate the ms5_clk signal //****************************************** ********************* reg ms5_clk; reg [13:0] ms5_cnt; always @ (posedge sys_clk or negedge sys_rst) begin
实验七 数字秒表一 图T7.14 进行布局布线
实验七 数字秒表一
注意:布局布线完成后,如有错误出现,请查看芯片类型 和引脚配置是否正确。
(5) 接通板卡电源和JATG下载线,并下载jed程序到板卡 上进行测试。
具体步骤如下: ① 用JTAG-USB下载线或并口JTAG下载线将PC机与 EZBoard板卡JTAG接口连接起来。 ② 展开“Generate Programming File”,双击 “Configure Device (iMPACT)”,如图T7.15所示。在出现 “iMPACT-Welcome to iMPACT”对话框后,单击“Finish” 按钮。
⑥ 按照相关步骤,最后仿真出来的参考波形如图T7.12 所示。
实验七 数字秒表一 图T7.12 时序波形
实验七 数字秒表一
(4) 分配引脚,并完成布线,生成下载的二进制文件。 具体步骤如下: ① 在工程项目的“Sources”窗口中,确保“Sources for”选择了“Synthesis/Implementation”选项。此时单击 工程的顶层文件lab7.v,在工程项目的资源操作窗口 (Processes)中,展开“User Constraints”,并双击 “Assign Package Pins”。在随后出现的“Project Navigator”对话框里,点击“Yes”按钮。 ② 在Xilinx PACE中浏览“Design Object List-I/O Pins”窗口,在Loc中输入对应的引脚。图T7.13为配置好的 此实验的引脚图表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FPGA/CPLD数字电路设计经验分享摘要:在数字电路的设计中,时序设计是一个系统性能的主要标志,在高层次设计方法中,对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解RTL电路时序模型的基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证明采用这种方式可以使电路的后仿真通过率大大提高,并且系统的工作频率可以达到一个较高水平。
关键词:FPGA数字电路时序时延路径建立时间保持时间1 数字电路设计中的几个基本概念:1.1 建立时间和保持时间:建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。
数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。
PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间注:在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考虑时钟树向前偏斜的情况。
在进行后仿真时,最大延迟用来检查建立时间,最小延时用来检查保持时间。
建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就可以使系统完成工作。
保持时间是一个和时钟周期无关的参数,如果设计不合理,使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。
因此合理的设计系统的时序是提高设计质量的关键。
在可编程器件中,时钟树的偏斜几乎可以不考虑,因此保持时间通常都是满足的。
1.2 FPGA中的竞争和冒险现象信号在FPGA器件内部通过连线和逻辑单元时,都有一定的延时。
延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。
信号的高低电平转换也需要一定的过渡时间。
由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。
如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在"冒险"。
(与分立元件不同,由于PLD内部不存在寄生电容电感,这些毛刺将被完整的保留并向下一级传递,因此毛刺现象在PLD、FPGA设计中尤为突出)是一个逻辑冒险的例子,从图3的仿真波形可以看出,"A、B、C、D"四个输入信号经过布线延时以后,高低电平变换不是同时发生的,这导致输出信号"OUT"出现了毛刺。
(我们无法保证所有连线的长度一致,所以即使四个输入信号在输入端同时变化,但经过PLD内部的走线,到达或门的时间也是不一样的,毛刺必然产生)。
可以概括的讲,只要输入信号同时变化,(经过内部走线)组合逻辑必将产生毛刺。
将它们的输出直接连接到时钟输入端、清零或置位端口的设计方法是错误的,这可能会导致严重的后果。
所以我们必须检查设计中所有时钟、清零和置位等对毛刺敏感的输入端口,确保输入不会含有任何毛刺冒险往往会影响到逻辑电路的稳定性。
时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须要考虑的问题。
如何处理毛刺我们可以通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。
例如,在数字电路设计中,常常采用格雷码计数器取代普通的二进制计数器,这是因为格雷码计数器的输出每次只有一位跳变,消除了竞争冒险的发生条件,避免了毛刺的产生。
毛刺并不是对所有的输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们可以说D触发器的D 输入端对毛刺不敏感。
根据这个特性,我们应当在系统中尽可能采用同步电路,这是因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。
(由于毛刺很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)去除毛刺的一种常见的方法是利用D触发器的D输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。
如前所述,优秀的设计方案,如采用格雷码计数器,同步电路等,可以大大减少毛刺,但它并不能完全消除毛刺。
毛刺并不是对所有输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害。
因此我们可以说D触发器的D输入端对毛刺不敏感。
但对于D触发器的时钟端,置位端,清零端,则都是对毛刺敏感的输入端,任何一点毛刺就会使系统出错,但只要认真处理,我们可以把危害降到最低直至消除。
下面我们就对几种具体的信号进行探讨。
1.3 清除和置位信号在FPGA的设计中,全局的清零和置位信号必须经过全局的清零和置位管脚输入,因为他们也属于全局的资源,其扇出能力大,而且在FPGA内部是直接连接到所有的触发器的置位和清零端的,这样的做法会使芯片的工作可靠、性能稳定,而使用普通的IO脚则不能保证该性能。
在FPGA的设计中,除了从外部管脚引入的全局清除和置位信号外在FPGA内部逻辑的处理中也经常需要产生一些内部的清除或置位信号。
清除和置位信号要求象对待时钟那样小心地考虑它们,因为这些信号对毛刺也是非常敏感的。
在同步电路设计中,有时候可以用同步置位的办法来替代异步清0。
在用硬件描述语言的设计中可以用如下的方式来描述:异步清0的描述方法:process(rst,clk)beginif rst=’1’ thencount<=(others=>’0’);elsif clk’event and clk=’1’ thencount<=count+1;end if;end process;同步清0的描述方法:processbeginwait until clk’event and clk=’1’;if rst=’1’ thencount<=(others=>’0’);elsecount<=count+1;end if;end process;1.4 触发器和所存器:我们知道,触发器是在时钟的沿进行数据的锁存的,而所存器是用电平使能来锁存数据的。
所以触发器的Q输出端在每一个时钟沿都会被更新,而所存器只能在使能电平有效器件才会被更新。
在FPGA设计中建议如果不是必须那么应该尽量使用触发器而不是所存器。
那么在使用硬件描述语言进行电路设计的时候如何区分触发器和所存器的描述方法哪?其实有不少人在使用的过程中可能并没有特意区分过,所以也忽略了二者在描述方法上的区别。
下面是用VHDL语言描述的触发器和所存器以及综合器产生的电路逻辑图。
触发器的语言描述:processbeginwait until clk’event and clk=’1’;q<=d;end process;所存器的语言描述:process(en,d)beginif en=’1’ thenq<=d;end if;end process;由上述对Latch的描述可见,其很容易于选择器的描述相混淆,用VHDL语言对选择器的描述方法如下:process(en,a,b)beginif en=’1’ thenq<=a;elseq<=b;end if;end process;2 FPGA/CPLD中的一些设计方法2.1 FPGA设计中的同步设计异步设计不是总能满足(它们所馈送的触发器的)建立和保持时间的要求。
因此,异步输入常常会把错误的数据锁存到触发器,或者使触发器进入亚稳定的状态,在该状态下,触发器的输出不能识别为l或0。
如果没有正确地处理,亚稳性会导致严重的系统可靠性问题。
另外,在FPGA的内部资源里最重要的一部分就是其时钟资源(全局时钟网络),它一般是经过FPGA的特定全局时钟管脚进入FPGA内部,后经过全局时钟BUF适配到全局时钟网络的,这样的时钟网络可以保证相同的时钟沿到达芯片内部每一个触发器的延迟时间差异是可以忽略不计的。
在FPGA中上述的全局时钟网络被称为时钟树,无论是专业的第三方工具还是器件厂商提供的布局布线器在延时参数提取、分析的时候都是依据全局时钟网络作为计算的基准的。
如果一个设计没有使用时钟树提供的时钟,那么这些设计工具有的会拒绝做延时分析有的延时数据将是不可靠的。
在我们日常的设计中很多情形下会用到需要分频的情形,好多人的做法是先用高频时钟计数,然后使用计数器的某一位输出作为工作时钟进行其他的逻辑设计。
其实这样的方法是不规X的。
比如下面的描述方法:processbeginwait until clk’event and clk=’1’;if fck=’1’ thencount<=(others=>’0’);elsecount<=count+1;end if;end process;processbeginwait until count(2)’event and count(2)=’1’ ;shift_reg<=data;end process;在上述的第一个process电路描述中,首先计数器的输出结果(count(2))相对于全局时钟clk已经产生了一定的延时(延时的大小取决于计数器的位数和所选择使用的器件工艺);而在第二个process中使用计数器的bit2作为时钟,那么shift_reg相对于全局clk的延时将变得不好控制。
布局布线器最终给出的时间分析也是不可靠的。
这样产生的结果波形仿真如下图所示:正确的做法可以将第二个process这样来写。
processbeginwait until clk’event and clk=’1’ ;if count(2 downto 0)=”000” thenshift_reg<=data;end if;end process;或者分成两步来写:process(count)beginif count(2 downto 0)=”000” thenen<=’1’;elseen<=’0’;end if;end process;processbeginwait until clk’event and clk=’1’ ;if en=’1’ thenshift_reg<=data;end if;end process;这样做是相当于产生了一个8分频的使能信号,在使能信号有效的时候将data数据采样到shift_reg寄存器中。