数字电路设计教程范例6篇

前言:中文期刊网精心挑选了数字电路设计教程范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。

数字电路设计教程

数字电路设计教程范文1

[关键词]数字电路 逻辑设计 CDIO 教学方法

[中图分类号] G642.0 [文献标识码] A [文章编号] 2095-3437(2015)03-0132-02

“数字电路与逻辑设计”是电子电气信息类等专业电子技术方面入门性质的专业基础必修课程,服务于电气自动化、电子科学与技术、电子信息与智能检测、通信与信息系统等学科,是一门重要的技术基础课,对实现应用型人才培养目标具有承上启下的关键作用。然而目前该课程教学模式与信息专业快速发展的要求相脱节;课程教学内容偏重理论分析,教学方式较为单一,以课堂讲授为主。部分学生感到本课程学习内容枯燥无味,接受知识被动。很多学生仅仅把应付考试而不是应用知识作为课程学习的目标,结果导致即使考试成绩不错,许多学生对数字系统的构成、设计、生产等流程依然不甚了解,无法做到学以致用,限制了课程对学术专业素质培养的关键作用的发挥。

针对这一现状,本文借鉴国外先进的CDIO工程教育理念,遵循“首要教学原理”,提出“数字电路与逻辑设计”立体化教学改革方案:通过设定工程化培养目标、教学内容的体系层次化建设、改进教学方法和手段、改革考核方式等措施,提高学生自主性和独立性,培养学生创新思维,探索培养具有现代创新思维卓越工程人才的立体化教学模式。

一、立体化课程教学资源建设

(一)课程教学内容的体系化、层次化建设

“数字电路与逻辑设计”的知识点很多,学生在初学时往往难以抓住课程思路主线,容易失去学习的动力和积极性,因此要特别重视教学内容的体系化。

对于理论教学内容,可以通过设计“脉络图”或“层次结构图”的形式把课程的主要内容及其应用、发展形象的表示出来。在每章节内容学习之前都要强调所学内容在整个课程体系的位置,从而使学生深入理解数字电子技术的发展历程、知识构成体系和各种有价值的应用,从而调动学生的学习兴趣,提高学习的积极性。

其次,根据学科发展,对课程的内容不断进行更新和优化设计,建立由简单到复杂、由基础到综合的循序渐进的教学内容体系,从而让学生逐步理解和掌握课程的内容体系。

(二)多维立体化课程教学平台建设

除了基本的课程教学内容建设外,还应该充分利用各种网络技术和现代教育技术手段建设多维度立体化的课程教学平台,依托教学平台进一步提高课程的教学效果。

课程的立体化教学平台的建设,应体现以学生为本的指导思想,将教材、教案、多媒体课件、教学录像、试验指导、试题和试卷库等各种形式的教学资源进行优化组合,以提供多维度开放性的教学环境。学生可以通过平台进行教学内容的预习,并可下载教学内容和相关资料,作业可以通过平台提交,教师可以进行在线作业批改、成绩统计,为学生的课外学习提供了很好的网络课堂,从而使课堂在时间和空间上得到有效拓展。

二、立体化课程实验体系建设

(一)构建“基础实验”、“大型实验”和“综合型实验”三个层次的实验教学内容

基础层次的教学包括电路基础实验和模拟电子基础实验内容,目的是培养学生的基本实验技能,及其基本分析和解决问题的能力,采取分组的实验方法,保证每个学生都有机会实际操作,动手练习;大型实验层次主要是模电大型实验,教学目的是培养学生独立分析、处理问题的能力,鼓励创新思维,促进知识更新,让学生在系统分析、设计与应用上有所提高,采取的教学方法是由学生在规定范围内自主选题,在实验室自主完成,一人一组;综合提高型层次开设的是电子系统设计与实践实验,教学目的是让学生综合运用前面各实验层次所学到的专业知识和工程技能,面对较大规模的电子系统进行设计分析,培养学生自主学习、创新、系统分析、设计与应用的能力,此层次的实验教学结合电子设计竞赛等课外科技活动进行,采取的教学方法是在指导教师的辅导下,在开放式的实验环境中,经过需求分析、资料查询、方案论证、设计调试、测试分析等过程,最后完成课题。

(二)实验教学内容的动态更新和优化

根据学科发展,对实验教学内容不断进行更新和优化设计:设计一些跨课程的实验项目,建立由简单到复杂、由基础到综合的循序渐进的实验教学内容体系,从而逐步培养学生动手实践能力和创新精神。如:在基础层次的数电实验环节可以进行计数器、数字钟等基于MSI的验证和设计性实验,在数电大型实验中可以让学生进行基于VHDL的QuatusII数字钟设计,并下载于FPGA芯片,使学生对SOC有最基本的认识,在综合提高型实验中又可以让学生用单片机系统完成同样的设计。

三、基于CDIO理论的教学方法改革

CDIO工程教育理念是麻省理工学院和瑞典皇家学院等四所大学工程教育改革的成果。CDIO分别代表构思 (Conceive)、设计(Design)、实现(Implement)和运作(Operate)。CDIO理念倡导工程教育从科学向工程回归,以工程和生产设计环节为核心,让学生主动地、实践地学习。“首要教学原理”是当代美国著名教授Merrill博士提出的教学理论,认为学习者只有处于五项情境之中,才能促进学习。CDIO理念与“首要教学原理”相辅相成。在教学方法上面,主要从以下几个方面入手进行改革。

(一)建立新型的多层立体授课体系

根据CDIO能力培养大纲,“数字电路与逻辑设计”课程的教学体系可以设计为课堂教学、试验教学和创新应用的层次结构,如图1所示。

按照图1所示的课程授课体系,通过在课堂教学、试验教学和创新应用三个不同层次上的教学和实践,能够在让学生充分掌握理解所学知识的基础上,达到培养学生的创新精神、实践能力、自学能力、综合能力、团队合作精神的课程教学目标。

(二)遵循CDIO理念,增加教学的引导性、开放性和前瞻性

CDIO理念倡导以应用环节为核心,让学生主动实践地学习。教学的引导性就是课堂教学以应用中的问题为起点,引导学术思考,组织教学内容。开放性指的是针对问题,采用启发式教学,让学生列举和搜索多元化解决方案,不拘泥于教材示例。前瞻性是指通过教师展示数字技术新的思想、最新的科研成果,让学生思考技术的发展趋势和未来的核心技术。

四、课程考核方式改革

CDIO模式是能力本位的培养模式,与知识本位的培养模式是有本质区别的。CDIO标准要求采用有效的方法来衡量学生的基本个人能力和人际合作能力、产品和系统构建能力以及学科专业知识。在对课程内容进行优化整合以后,建立了新的教学评价体系,细化了课程考核方法,加大了平时考核力度,将一次考核变为全程考核,并且在开学之初就向学生公布课程考核办法,使学生在学习的过程中有明确的努力方向。课程的考核成绩包括:课堂回答问题的情况、作业完成的质量、实验项目完成的质量、期末试卷得分情况,同时对于一些在实验项目中有突出表现的团队和个人给予加分。

五、总结

本文针对现有“数字电路与逻辑设计”课程教学过程中存在的种种问题,借鉴CDIO工程教育理念,从课程教学资源建设、教学方法和课程考核方式改革等几个方面论述了如何对课程进行立体化教学改革的具体措施。笔者所研究立体化教学改革不是某个教学环节的独立改变,而是教学内容、教学手段、教学方法和考核方式等整个教学过程的立体化变革。以先进的教学理论引导课程教学改革,必将激发学生学习的兴趣与热情,消除学生对学习的乏味感和知难感,使其主动、积极地投入课程的学习和实践中去,从而提高教学效果,为专业基础课程的教学探索出一种新模式,实用性强,具有重要推广价值。

[ 参 考 文 献 ]

[1] 刘越,李华等.高校计算机基础课程多维立体化教学研究与实践[J].电脑与信息技术,2013(12).

[2] 吴军,彭芳等.CDIO模式下课程教学改革的探索与实践[J].中国电力教育,2013(35).

[3] 符强,任风华.Multisim10在《电路与电子学》理论课程中的应用[J].现代计算机,2011(12).

[4] 金建设,张树坤,徐伟明等.电路与电子线路实验教学改革的实践[J].实验技术与管理,2006(12).

数字电路设计教程范文2

关键词:光电编码器;4倍频;方向判别;FPGA

中图分类号:TM41文献标识码:B文章编号:1004373X(2008)1917503

Angle Measurement Circuit Design for Multi-channel Incremental

Photoelectric Encoder Based on FPGA

FENG Xi1,2, LIANG Yanbing1, ZHANG Tao1,2

(1.Xi′an Institute of Optics and Precision Mechanics,Chinese Academy of Sciences,Xi′an,710119 China;

2.Graduate School,Chinese Academy of Sciences,Beijing,100039,China)

Abstract:

A design scheme of angle measurement circuit for multi-clannel incremental encoder based on FPGA is interoduced,which is composed of 4 multiple frequency,direction-judgment and counter circuit.The circuit produces 12 bit digital signals for angles and one signal for direction.The design is completed in Altium Designer 6.0 with both schematic document and VHDL program as input.The simulation is based on chip XC25300E-6PQ208C of Xilinx Company.The design can meet the high speed rotation requirements,which can be validated through the simulation waveforms and experiment results,it is feasible.

Keywords:photoelectric encoder;4 multiple frequency;direction-judgment;FPGA

1 引 言

光电编码器是一种高精度的角位置测量传感器。它是由高精度计量圆光栅盘和光电检测装置组成,其原理示意图如图1所示。当电动机旋转时,光栅盘与电动机一起旋转,光敏元件接受透过光栅的光,通过光电转换,将输入的角位置信息转换成相应的数字脉冲,并可与计算机或其他显示装置相连接,实现数字测量与数字控制。目前光电编码器已经普遍应用在雷达、光电经纬仪、地面指挥仪、机器人、数控机床和高精度闭环调速系统等诸多领域[1]。

通常,根据形成脉冲代码的方式不同,光电编码器分为绝对式和增量式两大类,二者最大的区别在于码盘。绝对式光电编码器一般采用二进制码盘,如图2所示。码盘上沿径向有若干同心码道,每条道上由透光和不透光的扇形区相间组成。每一分辨率区间对应惟一的二进制数。它具有可以直接读出角度、没有累计误差、电源切除后位置信息不丢失、固定零点、抗干扰能力强的优点。但码盘的制造工艺复杂,精度越高需要越复杂的码盘,不易实现小型化。增量式光电编码器的码盘如图3所示,其刻线间距均一,对应每一个分辨率区间,可输出一个增量脉冲,因此,增量式光电编码器输出的是A、B、Z三列脉冲,其中A、B两列脉冲占空比为1∶1,相位相差90°,用来实现鉴相和计数;Z是复位脉冲,每旋转一圈出现一个脉冲,作为清零信号。对输出脉冲设计辅助计数和接口电路便可以实现位置的测量。增量式编码器的优点是易于实现小型化,响应迅速,结构简单。

本文介绍一种新的数字电路实现方法,完成增量式光电编码器的角位置测量。该电路完成4倍频、鉴相和计数功能,计数模块使用单脉冲,与其他采用双脉冲计数[4]有所不同,具有不丢步、工作状态稳定、适用于电机高转速下测角的良好特性。

2 数字电路框图

由于高转速时输出的A、B脉冲会很密集,如果用微处理器计数需要多次中断,效率较低且容易漏计,故适宜使用数字电路实现;同时考虑到设计需要对三路测角输入进行处理,采用FPGA实现会更快速稳定、集成度高,且使设计容易模块化和移植;并且,FPGA能够提供统一的时钟clk,不仅可以使得倍频的延迟时间(即计数时钟cp)具有相同的宽度,而且能够同步整个电路。因此基于FPGA设计是个很好的选择。

电路的输入是三组脉冲信号,每一组的处理方法相同,这里只介绍其中一组。总体功能框图如图4所示。

3 数字电路的各功能模块介绍

3.1 4倍频电路

A、B脉冲的频率与电机转速相关,是时刻在变的,所以采用锁相环电路进行倍频复杂费时,可以用更简单的方法,即在A和B的上升沿和下降沿均产生脉冲,实现4倍频。基本原理是延迟同一信号取反后所得信号与原信号相异或,波形图如图5所示,倍频电路原理图如图6所示。由于延迟采用统一时钟控制,和以往采用R、C延迟相比,脉冲宽度可以取得一致。

3.2 鉴相电路

当A超前B 90°相位时,电机正转,输出高电平;当B超前A 90°相位时,电机反转,输出低电平。波形图如图7所示,对应的电路原理图如图8所示。输出信号updn除作为计数器加减功能的判断信号外,也可单独引出来作为他用。

从波形图中可以看出,转换方向后的第一个c上升沿触发时仍在做加运算,第二个c上升沿触发时正常。由于用作计数的cp是在上升沿有效,cp上升沿对应c的下降沿,因此第二个cp以后都是做减运算;同理,从反转到正转时,第一个cp是做减运算,第二个cp以后都做加运算。这样来回改变转向的情况下,二者相抵消,不影响位置的确定。

3.3 计数电路

光电编码器是1 000线,4倍频后一圈有4 000个cp,精度为0.09°,输出位置信号为12位。电路设计是在Altium Designer 6.0下采用原理图和VHDL编程混合输入,编译仿真完成的。计数部分使用3个同步置数的16进制加、减计数器级联。原理图如图9所示。需要指出:计数范围是0~3999。遇到清零z信号后,当正向转动时,置数0,反向转动时,置数为3999=(1111 1001 1111)2。因此置数端信号可以从updn信号引过来即:D11D10D9D8D7D6D5D4D3D2D1D0=(/updn/updn/updn/updn/updnupdnupdn/updn/updn/updn/updn/updn)。

3.4 锁存电路与输出

计数模块输出的位置数据要先存入锁存器,再向外传输,以保证读出数据稳定,避免时序错误。锁存器是由VHDL语言描述的同步时钟锁存器[3]。读取数据后可以使用数码管显示或者直接采用标准RS 232协议串行输出给上位机。使用数码管显示时,要将计数信号转化为相应的实际角度二进制信号再交给数码管显示。

4 仿真验证

仿真的clk周期取2 ns,A、B信号周期取40 ns。在实际中,3 000转/分的高速度,使用1 000线的码盘,4倍频,电路所需clk是1 MHz,FPGA提供的时钟远远高于这个需要。仿真基于的器件是Xilinx公司Spartan2E XC25300E-6PQ208C。仿真中设计了三种情况的测试平台,仿真结果如图10所示。

5 结 语

基于FPGA设计光电编码器信号处理模块,电路简单,功能实现快速稳定。从软件环境下的仿真波形到实验检测可以看出,本文提出的数字电路设计方案满足

电机高速转动条件下实时准确处理的要求,可以应用在实际系统中。

参考文献

[1]董莉莉,熊经武,万秋华.光电轴角编码器的发展动态[J].光学精密工程,2000,8(2):198-202.

[2]闫胜利,袁芳革.Altium Designer 6.0 FPGA设计教程[M].北京:电子工业出版社,2006.

[3]叶东,周志炜,张飚,等.基于FPGA的多路光电编码器数据采集系统[J].传感器与微系统,2006,25(5):45-47.

[4]葛一楠,杨显富.基于CPLD的光电脉冲码盘信号四倍频电路设计[J].成都大学学报:自然科学版,2004,23(3):34-37.

[5]候伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,1997.

数字电路设计教程范文3

【关键词】基准源;Altium Designer;电路设计

随着电子技术的飞速发展及印制电路板加工工艺的不断提高,印制电路板的设计和制作的要求也越来越高。Altium Designer凭借其使用方便且功能强大等特点成为电子企业广泛使用的制作印制电路板的软件之一。本文根据基准源电路的实例通过Altium Designer软件对设计电路板时的常见问题和技巧进行了总结。

1 基准源原理框图

2 项目文件的建立

2.1 原理图文件的建立

1)新建jizhunyuan.PrjPcb项目,再新建原理图jizhunyuan.SchDoc文件,文件命名中英文皆可。

2)放置元器件。放置元器件后先修改参数,主要包括修改元件编号和封装[1]。修改技巧如下。

技巧一:相同元件可以先全部放完,再批量修改参数。快捷批量修改属性可通过“Find Similar Objects…”进行修改。

技巧二:相同元件可以自动编号,编号顺序可以从上到下,也可以从左到右等,可以按照自己的习惯进行任意顺序的编号。

3)绘置库元件[2-3]。当默认的元件库中不包括所需绘制的元件时,可分以下三种情况进行绘制。

情况一:根据实物的外形和管脚的分配进行绘制。

情况二:在元件库中找相似的元件符号进行编辑。

情况三:直接替代。直接替代的话注意编辑封装时,封装的引脚顺序必须和实物完全一致,否则实际焊接时会出现错误。例如元件库中没有MAX232芯片,只有排针Header 8×2,可以用该排针直接进行替代,但是封装须编辑为MAX232芯片的实际封装。

在绘制库元件时还有些注意事项。

事项一:在绘制库文件时,要在十字架的中心处绘制元件的图形边框和放置管脚,否则将无法准确地在原理图中对绘制好的库元件进行移动。

事项二:在放置元件引脚时,带电气特征的引脚一端向外(将视图放大后,引脚两端中有四个白点的一端具有电气特性,方向必须朝外),否则当元件调入原理图中时会连不上线。

事项三:元件管脚的注释(“Display Name”)最好与实际管脚的功能一致或接近,以增强原理图的可读性。

事项四:如果库中元件有相似的元件,只需对元件的引脚进行编辑,可先放置库中已有的元件后,双击元件将“Lock Pins”选项的勾去掉以解锁引脚,编辑完后再对引脚“Lock Pins”选项进行勾选,这样能更加快捷地绘制出元件符号。

4)布局连线

布局需按照电路的功能进行合理的分区,如电源区、模拟电路区、数字电路区等,这样便于检查连线是否正确。各个分区间通过网络标号进行连接,以便于绘制、检查、修改,同时也增强了原理图的可读性和美观性。本文设计的基准源原理图如图2所示。

2.2 PCB文件的建立

1)在项目文件jizhunyuan.PriPcb中新建PCB文档。

2)在原理图编辑器下,检查每个元件的封装是否正确。有两个方面需要特别注意。

方面一:封装的尺寸必须和实物的尺寸完全一致,否则实际焊接时会出现焊接不上的现象。

方面二:元件封装的引脚序号必须与元件在原理图中的引脚序号一样,否则就会出现加载网络表后在PCB板中元件没有连接的现象。例如电阻在原理图中元件的引脚序号为1和2,而在其对应的封装中引脚序号为A和K,则必须将引脚序号更改为一致(如都为1和2)。

3)制作封装库[4]。默认封装库中没有所需的封装时,可根据以下两种情况进行制作。

情况一:精确测量实物实际尺寸进行封装的绘制。

情况二:精确测量实物实际尺寸在已有的封装库中对相似的封装进行编辑。

同时,制作封装时放置的焊盘其中心孔要比器件引线直径稍微大些,这样方便焊接。当然,焊盘也不宜太大,太大易形成虚焊。

4)将原理图jizhunyuan.SchDoc导入到PCB板中。

5)元器件布局

布局时要将电路板合理分区,通常分为电源区、模拟电路区、数字电路区、功率驱动区、用户接口区等,这样能够减小导线的长度,也能降低布线的复杂度。各个区按各自的电气特性放置元件,不可交叉放置元件,否则会出现导线的相互交叉,不容易实现良好的布线。

6)布线规则参数设置[5]。布线规则参数设置主要包括设置安全距离,线宽,布线层等。参数的设置有以下技巧。

技巧一:地线应尽量宽,且最好大面积敷铜,这能在很大程度上改善接地点问题。

技巧二:根据印制线路板中电流的大小来设计电源线的宽度。尽量加粗电源线宽度,以减少环路电阻。

技巧三:通常情况下,信号线宽度设为10mil-15mil(常取12mil),电源和地线宽度设为30mil-50mil(常取40mil)。

7)布线。布线具有若干规则。

规则一:石英晶体振荡器下要大面积覆铜,不应穿过其它信号线,这样才可以使石英晶体振荡器产生稳定的振荡。

规则二:电容引线不能太长,尤其是高频旁路电容不能有引线,以减少干扰。

规则三:地线、电源线的走向和数据传递的方向应一致,这样有助于抗噪声能力的增强。

规则四:大面积铜箔应尽量避免,否则,在长时间受热后易出现铜箔膨胀和脱落现象。必须用大面积铜箔时,最好采用栅格状,这样有利于铜箔与基板间粘合剂受热产生的挥发性气体的排出。

规则五:双层板布线时两面的导线宜相互交叉,以减小寄生耦合[6]。

8)DRC检查。布线设计完成后进行DRC检查,同时确认所制定的规则是否满足实际生产印制板的需求。

3 结论

本设计应用Altium Designer绘图软件完成了基于触摸技术的多功能基准源设计原理图绘制,以及总结了使用该软件设计印刷电路板过程中的注意事项,极大地提高了设计的效率。当然,正确把握设计规则,熟练运用技巧,才能快速地设计出所需的电路板。

【参考文献】

[1]闫胜利.Altium Designer实用宝典:原理图与PCB设计[M].北京:电子工业出版社,2007:78-80.

[2]谷树忠,刘文洲.Altium Designer教程:原理图、PCB设计与仿真[M].北京:电子工业出版社,2010:84-88.

[3]江思敏,胡烨.Altium Designer原理图与PCB设计教程[M].北京:机械工业出版社,2009:57-59.

[4]韩国栋,赵月飞,娄建安.Altium Designer Winter09电路设计入门与提高[M].北京:化学工业出版社,2010:104-110.

数字电路设计教程范文4

【关键词】亚稳态;建立时间;保持时间;异步FIFO;握手协议

1.引言

在FPGA同步时序电路设计中,即所有时钟寄存器的时钟共享一个时钟,可以有效地消除亚稳态。然而,许多实际应用要求在同一个可编程逻辑器件内采用多个时钟,且核心模块与外设的通信设计也涉及跨时钟域的数据传递。跨时钟的异步时序电路含有的多个时钟源,它们存在频率和相位的差异,当它们用作寄存器的输入时钟时,就可能违背建立时间和保持时间的要求,出现亚稳态[1-5]。亚稳态问题是跨时钟域异步数据传输过程面临的主要问题。

在FPGA设计中,每种触发器都有时序要求。“建立时间”(Setup time)是指在时钟沿到来之前,触发器输入信号必须保持稳定的时间。“保持时间”(Hold time)则是指在时钟沿之后,信号必须保持稳定的时间。这些指标通常比较保守,以应对不同的PVT(工艺、电压、温度)环境下时序各有差异的情况。如果一个设计满足了这些时序要求,则触发器出现错误的可能性可以忽略不计。

亚稳态是当信号在跨时钟的异步电路中或是无关的时钟域之间传输时导致数字系统失效的一种现象。为了使触发器能够正确捕获并输出数据,FPGA的信号传输数据信号都会有一定的时序要求,为了确保可靠的操作,输入寄存器的数据信号必须在时钟沿的某段时间(寄存器的建立时间Tsu)之前保持稳定,并且持续到时钟沿之后的某段时间(寄存器的保持时间Th)之后才能改变。寄存器的输入反映到输出则需要经过一定的延时(时钟到输出的时间Tco)。如果数据信号的变化违反了Tsu和Th的要求,那么寄存器的输出就会处于亚稳态[6]。此时,寄存器的输出会在高电平1和低电平0之间盘旋一段时间,这也意味着寄存器的输出达到一个稳定的高或者低电平的状态所需要的时间会大于Tco。

随着跨时钟域设计的愈发常见和复杂化,只要系统中存在跨时钟域,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。前者要靠同步来实现,而后者根据不同的设计应用有不同的处理办法。

2.FPGA设计中的亚稳态

2.1 亚稳态

在FPGA设计中,数据信号在不同时钟域间传递,最容易产生亚稳态,即触发器无法在时序要求的规定时间段内达到一个可确认的状态。数据信号在传输过程中触发器的建立时间或保持时间不满足时序要求,即信号在稳定前的状态,一般是由于时序余量不够,使得电路的输入电平无法上升或下降到所需逻辑电平1或0。

2.2 亚稳态分析

跨时钟异步输入信号可以在任何时间点翻转,它与下级同步采样信号没有必然联系。此外,在数据翻转前,设计者无法预知该被采样信号的时钟沿或翻转顺序,也就不能保证信号满足建立时间。无法保证稳定的采样,给跨时钟域的FPGA设计带来难题。

跨时钟域的转换的核心就是要保证下级时钟对上级时钟数据的采样的Tsu和Th时间。如果触发器的Tsu时间或Th时间不能满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后较长时间处于不确定状态,在这段时间内Q端产生毛刺并不断振荡,最终固定在某一个值,这个值不一定等于原来数据输入端口D的数值,这短时间称为判决时间(Resolution time),经过Resolution time之后Q端经稳定到0或1上,但究竟是0还是1,是随机的。与输入没有必然的联系。

如图1所示,时钟CLK_A在上升沿时采样数据DATAIN,数据信号data是时钟CLK_A同步产生的,输入信号data对下一级的触发器的时钟CLK_B是跨时钟的异步信号,由于data的变化与CLK_B时钟域时钟的采样边沿太接近,未满足采样建立时间,造成的亚稳态周期。输出DATAOUT传递到后面的组合逻辑会产生不定状态,若在进入下一级采样前还没有进入稳定状态,就会导致系统混乱。

亚稳态的危害主要是破坏系统的稳定性。由于输出在稳定前可能有毛刺、振荡、固定的某一电压值,因此亚稳态将导致逻辑误判,严重的情况输出0~1之间的电压值还会使下一级产生亚稳态,即亚稳态的传播。逻辑误判导致功能性错误,而亚稳态传播则扩大故障面。另外,在亚稳态下,电源干扰、环境噪声、工作温度等细微的扰动都可能导致更恶劣的状态不稳定,这时系统的传输延迟增大,状态输出错误。

3.FPGA跨时钟解决方案

FPGA设计中,要减少亚稳态导致的错误并使系统对产生的错误不敏感,就要正确定义和处理FPGA内部与外部时钟之间的接口。对于异步或无关时钟域间传输的信号,在FPGA本地时钟域使用该信号前,必须对其进行同步。同步器的功能是采样异步输入信号,使产生的输出信号满足同步系统对建立时间和保持时间的要求,从而抑制亚稳态对电路的影响。在许多应用中,跨时钟域传送的不只是简单的信号,数据总线、地址总线和控制总线都会同时跨域传输,这些复杂的情况,就需要应用握手协议和异步FIFO的手段来处理这些情况。因此处理跨时钟域常用的方法有两级触发器同步法、握手协议和异步FIFO法3种。

3.1 两级寄存器同步法

为了避免进入亚稳态,通常采用的方法是使用两级寄存器,即一个信号要进入另外一个时钟域之前用另一时钟域的时候进行两次寄存,在图2中,左边为异步的输入端,经过两级触发器采样,在右边的输出与时钟CLK_B同步,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK时钟周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。理论上如果再添加一级寄存器,是同步采样达3级。则末级输出为亚稳态的概率几乎为0。因此使用两级寄存器采样可以有效地减少亚稳态继续传播的概率。

使用图2所示两级寄存器采样不仅能降低亚稳态的概率。但是并不能保证第二级的输出的稳定电平就是正确的电平。前面说过经过Resolution time之后寄存器输出电平是一个不正确定的稳态值。也就是说这种处理方法不能排除采样错误的产生。这时就要求所设计的系统对采样错误有一定的容忍度。有些应用本身就对采样错误不敏感,有些系统对错误采样比较敏感,可以采用一些纠错编码手段完成错误的纠正。

3.2 握手协议

握手协议是实现总线数据跨时钟域通信的一种有效方法,它能在避免亚稳态传播的同时正确地捕获总线数据。握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应。使用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(req、ack)分别使用脉冲检测方法进行同步。在具体实现中,首先,电路A声明它的请求信号,即先把数据放入总线,随后发送有效的请求req信号给电路B。然后,电路B检测到有效的req信号后锁存数据总线,声明它的响应信号,即回送一个有效的ack信号表示读取完成应答。当电路A检测到电路B回应的响应信号有效后,中止自己的请求信号,即撤销当前的req信号。最后,当电路B检测到电路A的信号req撤销后也相应撤销ack信号,此时完成一次正常握手通信。此后,可以继续开始下一次握手通信,如此循环。该方式能够使接收到的数据稳定可靠,有效的避免了亚稳态的出现,以上所述的通信流程如图3所示。

信号跨越一个时钟域要花两个时钟周期的时间,信号在跨越多个时钟域前被电路寄存。全部的时间序列是:A时钟域中最多五个周期加上B时钟域最多六个周期。握手有效的避免了亚稳态的出现,因为通过检测请求与响应信号,每个电路都清楚地知道对方的状态。但控制信号握手检测会消耗通信双方较多的时间,完成所有交互的整个过程要花费很多时钟周期。

3.3 异步FIFO

异步FIFO[7-8]是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓冲在两个跨时钟异步时钟之间的数据传输。使用一个异步FIFO在两个时钟域的交界处通信,通过它来实现数据流的传输。由发送时钟域将数据写入,接收时钟域将数据取出,在数据传输的同时实现了数据的缓存,因此是一种较理想的方法。

由图4可以看出:整个系统分为两个完全独立的时钟域——读时钟域和写时间域;FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时钟部分由读地址产生逻辑产生读控制信号和读地址。在空/满标志产生部分,由读写地址相互比较产生空/满标志。

不同时钟域间数据传递的问题及其解决方法不同时钟域间数据传递的最重要问题就是亚稳态问题。当数据信号通过两个时钟域的交界处时,将会分别由这两个时钟来控制信号的值。此时如果两时钟信号的敏感沿非常接近并超过了允许的额度,则将出现数据信号的不稳定,即电路陷入亚稳态,也称为同步失败,同样会产生亚稳态。但是通过设计改进可以将其发生的概率降低到一个可以接受的程度。

在FIFO设计中,FIFO指针逻辑使用了格雷码,代替指针使用的二进制码。格雷码在每一次计数增减时只改变其中的一位。你可以在格雷码总线上使用同步器,因为每一次总线改变时只有一根信号线有变化,于是就消除了格雷码总线各位通过不同同步器时的竞争情况,降低了亚稳态的产生,在异步FIFO设计中,通过提高空/满标志产生逻辑的可靠性,能够很好地抑制亚稳态,进一步的降低了亚稳态的产生。

4.结语

在FPGA跨时钟域设计中,亚稳态与设计可靠性有着密切的联系。本文探讨分析了跨时钟域亚稳态的产生机制及FPGA设计中亚稳态问题的解决方法,提出的这些方法行之有效。传输在不相关时钟域的信号,都有可能在相对于捕获寄存器时钟沿的任何时间点变化。因此,设计者无法预测信号变化的顺序或者说信号两次变化间经过了几个锁存时钟周期。设计者必须考虑到电路的这些情况,在实际应用中,设计者可根据具体的实际情况而使用异步FIFO传输信号或者使用握手信号进行控制。

一般情况下两级寄存器同步适合步时钟域之间单信号传输;当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信;总线数据同步、高速数据传输、数据在跨越时钟域时需要存储容量大的缓冲时则可以采用异步FIFO。这些措施能够有效解决FPGA设计中跨时钟域的亚稳态问题,能实现数据跨越时钟域的安全传递。

参考文献

[1]夏字闻.Verilog数字系统设计教程(2版)[M].北京:北京航空航天大学出版社,2008.

[2]魏堃.跨时钟域信号同步技术研究[D].西安:西安电子科技大学,2009.

[3]Michelle Lange.Automated CDC verification protects complex electronic hardware from metastability failures.Mentor Graphics Corporation.Aug.2008.

[4]孟宪元,译.高级FPGA设计结构、实现和优化[M].北京:机械工业出版社,2009.

[5]徐翼,郑建宏.异步时钟域的亚稳态问题和同步器[J].微计算机信息,2008,24(2):171-172.

[6]吴小蕻.跨时钟域若干问题的研究-同步与亚稳态[D].合肥:中国科学技术大学,

2008.