<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=182 </link><title>基于FPGA的verilog&amp;nbsp;HDL语言设计优化</title><author>cindy</author><pubDate>2009-12-01 9:34:18</pubDate><description><![CDATA[<strong>0引言</strong>
<p>　　现场可编程门阵列(<a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/FPGA">FPGA</a>)是1985年由美国Xilinx公司首先推出的一种新型的PLD。 FPGA在结构上由逻辑功能模块排列成阵列，并由可编程的内部连线连接这些功能模块来实现一定的逻辑功能。FPGA的功能由逻辑结构的配置数据决定，这些配置数据存放在片外的EPROM或其他存储器上。由于FPGA规模大、集成度高、灵活性更强，实现的逻辑功能更广，因此已逐步成为复杂数字硬件电路设计的首选。</p>
<p><strong>　　1 FPGA的基本结构</strong></p>
<p>　　FPGA通常由可编程逻辑单元 CLB、可编程输入输出单元lOB及可编程连线资源组成。通常CLB包含组合逻辑部分和时序逻辑部分，组合逻辑一般又包括查询表(Look-up Table)和相关的多路选择器(Multiplexer)。而时序逻辑部分则包含触发器(DFF)和一些相关的多路选择器。lOB主要提供FPGA内部和外部的接口，连线资源则提供CLB与lOB之间以及各CLB之间的通讯功能。FPGA芯片的基本结构如图1所示，其中开关盒可对水平和竖直连线资源进行切换，连接盒可将CLB的输入输出连接到连线资源中。</p>
<p align="center"><img style="letter-spacing: normal" alt="FPGA的基本结构" src="http://pagesadmin.ednchina.com/images/article/25c8539b-ff06-49ea-8dbf-9a70317e6a91/xsj091212_1.jpg" /></p>
<p><strong>　　2 verilog <a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/HDL">HDL</a>语言的特点与优化设计</strong></p>
<p>　　<a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/Verilog">Verilog</a> HDL语言是硬件描述语言的一种。它能形式化地抽象表示电路的行为和结构，同时支持层次设计中逻辑和范围的描述。设计时可借用高级语言的精巧结构来简化电路行为的描述。此外，该语言还具有电路仿真与验证机制，可以保证设计的正确性，同时支持电路描述由高层到低层的综合转换，且硬件描述与实现工艺无关，便于文档管理，易于理解和设计重用。</p>
<p>　　由于Verilog HDL语言易于理解、设计灵活，因此，Verilog HDL语言已经成为目前FPGA编程最常用的工具之一。然而，正是其设计灵活的特点使工程师必须面对采用哪种编程风格才能使逻辑电路精确工作的问题。因为如果某些原因导致逻辑电路发生误动作，则有可能会造成系统无法正常工作。而电路设计中的&quot;<a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/毛刺">毛刺</a>&quot;问题则是电路设计中最常见的。下面，本文将对容易产生&quot;毛刺&quot;的电路进行分析，并给出对应的优化方法及仿真波形。</p>
<p><strong>　　3出现&quot;毛刺&quot;的原因</strong></p>
<p>　　当信号在FPGA器件内部通过连线和逻辑门时，一般都有一定的延时。延时的大小与连线的长短和门单元的数目有关，同时还受器件的制造工艺、工作电压、温度等条件的影响。此外，信号的高／低电平转换也需要一定的过渡时间。由于存在这些因素的影响，多路信号的电平值发生变化时，在信号变化的瞬间，组合逻辑的输出都有先后顺序，而并不是同时变化，这往往就会出现一些不正确的&quot;毛刺&quot;。</p>
<p>　　&quot;毛刺&quot;信号的电路有两种类型。第一种是输入信号经过FPGA内部布线以后产生不同延时的异步电路；第二种是由于在编程时内部信号变化落后。在多个信号关联时，第一个信号变化如果发生落后情况，后面的信号将产生不确定状况，从而出现&quot;毛刺&quot;。 &quot;毛刺&quot;的存在说明该电路存在不稳定状况，因此，这很可能导致整个系统的误动作。</p>
<p><strong>　　4 &quot;毛刺&quot;信号的消除</strong></p>
<p>　<strong>　4.1组合逻辑电路&quot;毛刺&quot;的同步消除</strong></p>
<p>　　现以一个组合逻辑电路为例来介绍该方法。从图2所示的仿真波形可以看出，&quot;in1、in2、in3、in4&quot;四个输入信号经过布线延时以后，其高低电平变换不是同时发生的，这会导致输出信号&quot;out&quot;出现了毛刺。由于设计时无法保证所有连线的长度一致，所以，即使四个输入信号在输入端同时变化，经过 FPGA内部走线到达或门的时间也是不一样的，毛刺必然产生。一般情况下，即使输入信号同时变化，经过内部走线后的组合逻辑也将产生&quot;毛刺&quot;。这样，如果将它们的输出直接连接到时钟输入端、清零或置位端口，就可能会导致不可预料的结果。</p>
<p align="center"><img style="letter-spacing: normal" alt="仿真波形" src="http://pagesadmin.ednchina.com/images/article/25c8539b-ff06-49ea-8dbf-9a70317e6a91/xsj091212_2.jpg" /></p>
<p>　　针对这类&quot;毛刺&quot;电路，设计时可以通过&quot;毛刺&quot;信号对同步电路不敏感的特性，来在系统中加入同步时钟，这是因为同步电路信号的变化都发生在时钟沿的保持时间。因而可以在电路中加入同步时钟，使输出信号跟随时钟同步变化。图3所示是同步法去除&quot;毛刺&quot;的对应仿真波形。</p>
<p align="center"><img style="letter-spacing: normal" alt="同步法去除" src="http://pagesadmin.ednchina.com/images/article/25c8539b-ff06-49ea-8dbf-9a70317e6a91/xsj091212_3.jpg" /></p>
<p><strong>　　4.2信号变化落后的&quot;毛刺&quot;消除</strong></p>
<p>　　程序中的内部信号的判别赋值并不是立即发生变化，而是存在一个延迟。这也是最容易产生&quot;毛刺&quot;的一种情况。这样，在计数分频器程序设计中，可使用 counter％(delay-1)==0这个条件来约束分频的模数，由于条件判别的延时使分频输出产生&quot;毛刺&quot;的仿真波形如图4所示。</p>
<p align="center">&nbsp;<img style="letter-spacing: normal" alt="条件判别的延时使分频输出产生" src="http://pagesadmin.ednchina.com/images/article/25c8539b-ff06-49ea-8dbf-9a70317e6a91/xsj091212_4.jpg" /></p>
<p>　　对于这种电路，设计时可以采用加触发器的方法来消除&quot;毛刺&quot;，可以引入一个名为temp的触发器来有效除去这些&quot;毛刺&quot;，其仿真波形如图5所示。具体的程序代码如下：</p>
<p align="center"><img style="letter-spacing: normal" alt="名为temp的触发器来有效除去这些" src="http://pagesadmin.ednchina.com/images/article/25c8539b-ff06-49ea-8dbf-9a70317e6a91/xsj091212_5.jpg" /></p>
<p align="left"><img style="letter-spacing: normal" alt="程序代码" src="http://pagesadmin.ednchina.com/images/article/25c8539b-ff06-49ea-8dbf-9a70317e6a91/xsj091212_6.jpg" /></p>
<p><strong>　　5结束语</strong></p>
<p>　　&quot;毛刺&quot;信号是威胁逻辑电路稳定性的重大隐患，因此，发现&quot;毛刺&quot;和去除&quot;毛刺&quot;就成为FPGA开发人员必须要考虑的问题。本文总结了最为容易产生&quot;毛刺&quot;信号的两种典型电路，并且分别给出了有效的消除方法及仿真波形图。</p>]]></description></item></channel></rss>