- 1、本文档共41页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
fpga数字电路设计基础(李桥)
一、同步设计
什么是同步设计?同步设计:上游数据到下游逻辑单元的传递是通过时钟来同步的。-只要能满足时延要求,就可以确保下游逻辑单元能正确采样到上游数据。异步设计:上游数据发生变化的时机是不确定的,甚至会出现中间态。-下游逻辑对上游数据的采样是不确定的,会发生数据传递的错误。
为什么要做同步设计?两年前我做的FPGA设计,现在却不能工作。FPGA本身有什么变化吗?-如果采用的是异步设计,能否工作有很多无法控制的随机因素。我的设计原来可以工作,但将FPGA重新布线后,就不行了。怎么回事?-异步设计也许在特定布线下能工作,但布线改变后就不行了。很危险吧?我的设计通过了时间仿真,但上板调试时不干活。时间仿真对不对?-对于异步设计,通过了时间仿真也不一定能正常工作。要小心,时钟信号和异步复位可别产生毛刺啊。快速FPGA中的触发器会对非常窄的毛刺信号作出反应。-异步设计可能会产生以下问题:异步设计中,设计者老要想着去消除时钟、异步复位信号以及锁存器使能端的毛刺,但这一点很困难,甚至不可能。同步设计的一个简单原则:永远不要将组合逻辑产生的信号用作时钟、异步复位/置位。
门产生的时钟有问题此例中,计数终点信号会产生毛刺,使用该信号作时钟会引起问题。-MSB布线更短,信号变化先到达与门。与门会“感知”到1111的中间态。由于与门为电平敏感,会输出高电平的毛刺,从而引起寄存器的误动作。布线更短此处会产生毛刺,并且与计数器的时钟无关MSB01111000计数器的操作为:011111111000因为MSB更快计数器flopMSB此处的与门为电平敏感
相应的VHDL代码signalCounter: std_logic_vector(3downto0);signalTC: std_logic; signalflop: std_logic;process(Clk)begin ifrising_edge(Clk)then Counter=Counter+1; endif;endprocess;TC=‘1’whenCounter=“1111”else‘0’; --TC为组合逻辑输出process(TC)begin ifrising_edge(TC)then --使用组合逻辑输出作时钟,是异步设计,禁止!!! flop=… endif;endprocess;
毛刺和同步设计组合逻辑的毛刺通常总是存在,难于甚至无法消除毛刺只有在异步设计中(连接到时钟、异步复位、锁存器的使能端)才存在问题在同步设计中,由于寄存器在时钟沿才会动作,只要能满足时延要求,就能确保采样到稳定正确的结果毛刺无法消除,但其造成的问题却可以消除采用同步设计并达到时延要求
DQ3AsyncRINPUTCLOCKCounterQ2Q1Q0DQ同步设计方法中TC的生成和使用
对照前面异步设计中TC生成和使用的例子TC
相应的VHDL代码signalCounter: std_logic_vector(3downto0);signalTC: std_logic; signalflop: std_logic;process(TC,Clk)begin ifTC=‘1’then --此复位为寄存器信号,为同步设计,可行 Counter=“0000”; TC=‘-’; elsifrising_edge(Clk)then Counter=Counter+1; ifCounter=“1110”then --注意和异步设计中TC信号的比较 --此处TC为寄存器输出 TC=‘1’; else TC=‘0’; endif; endif;endprocess;
同步设计的更多例子(可行)DQ1DTCCounterINPUTCLOCKCounterQ0INPUTCLOCKDCEQRSDATA
相应的VHDL代码例2signalCounter:std_logic_vector(3downto0);signalTC: std_logic; signals: std_logic;process(Clk)beginifrising_edge(Clk)thenifINPUT=‘1’then Counter=Counter+1; endif; ifTC=‘1’then --TC用在寄存器的CE端,为同步设计,可行 s
您可能关注的文档
最近下载
- 抖音短视频播放数据分析表.xlsx VIP
- 2023年甘肃二造《建设工程计量与计价实务(土木建筑)》考试重点题库资料200题(含解析).pdf
- “国基药粤健康”临床合理用药知识竞赛题库及答案(1000题).docx VIP
- 绿化苗木养护方案2016年.doc VIP
- 小学基础摄影课PPT(1)省公开课获奖课件市赛课比赛一等奖课件.pptx
- GB_T 19066.2-2020 管法兰用金属波齿复合垫片 第2部分:Class系列.pdf
- 露天矿山森林防火专项预案.doc
- 深度学习论文Hinton, Geoffrey E., and Ruslan R. Salakhutdinov. Reducing the dimensionality of data with neural networks..pdf
- 德图testo510差压仪使用说明书.pdf
- 物流管理系统论文.doc VIP
文档评论(0)