⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 分频器的硬件描述语言设计.htm

📁 很好的VHDL源码,里面有不少实用的实例!
💻 HTM
字号:
<html><!-- #BeginTemplate "../../Templates/main.dwt" --><!-- DW6 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!-- #BeginEditable "doctitle" -->
<title>分频器的硬件描述语言设计</title>
<!-- #EndEditable -->
<link rel="stylesheet" href="../../CSS/Style.css" type="text/css">
<style type="text/css">
<!--
body,td,th {
	font-size: 9pt;
	color: #333333;
}
-->
</style>
</head>
<BODY vLink=#000066 aLink=#FE818D link=#0000FF bgColor=#ffffff 
leftMargin=2 topMargin=2 rightMargin=2 MARGINHEIGHT="2" MARGINWIDTH="2"> 
<table width=778 height="36" border=0 align="center" cellpadding=0 cellspacing=0 bgcolor="#000066"> 
  <tbody> 
    <tr> 
      <td class=tbgc rowspan="2" background="/images/index/mast_logo.gif" width=116>&nbsp;</td> 
      <td width=37 bgcolor="#504A8A" height="20">&nbsp;</td> 
      <td width=303 bgcolor="#504A8A" height="20"> <div align="right"><font color="#FFFFFF" class="font10"><span class="font10"><b class="font10_white">可编程逻辑器件 中文网站</b></span></font></div></td> 
      <td width=304 bgcolor="#504A8A" height="20"> <div align="right"><font color="#6699cc"><font color="#FAFAFA" class="index2"><span class="index2">推荐使用1024x768分辨率</span></font><span class="index2"><font color="#CCCCCC" class="index2"> </font></span></font></div></td> 
    </tr> 
    <tr> 
      
    </tr> 
  </tbody> 
</table> 
<table border="0" cellpadding="0" cellspacing="0" width="778" align="center" class="font10"> 
  <tr bgcolor="#000066" align="center" valign="middle"> 
    <td width="119" height="17" bgcolor="#000066" class="font9"> <div align="center"><b><a href="../../index.htm" class="index"> 主 页</a></b></div></td> 
    <td class="font9" height="17" width="80"><b><font color="#CCCCCC"><a href="../../introduction1.htm" class="index">新手入门</a></font></b></td> 
    <td class="font9" height="17" width="80"><b><font color="#CCCCCC"><a href="../../advance.htm" class="index">设计进阶</a></font></b></td> 
    <td class="font9" height="17" width="80"><b><font color="#CCCCCC"><a href="../../hdl.htm" class="index">HDL语言</a></font></b></td> 
    <td class="font9" height="17" width="80"><b><font color="#CCCCCC"><a href="../../manufacturer.htm" class="index">PLD厂商</a></font></b></td> 
    <td class="font9" height="17" width="80"><b><font color="#CCCCCC"><a href="../../freeip.htm" class="index">参考设计</a></font></b></td> 
    <td class="font9" height="17" width="80"><b class="index"><a href="../../software.htm" class="index">开发软件</a></b></td> 
    <td class="font9" height="17" width="80"><b><font color="#CCCCCC"><a href="../../application.htm" class="index">应用文章</a></font></b></td> 
    <td class="font9" height="17" width="80"><b><font color="#CCCCCC"><a href="http://www.pld.com.cn/BBS/index.asp" class="index">PLD论坛</a></font></b></td> 
  </tr> 
  <!--msnavigation--> 
</table> 
<table border="0" cellpadding="0" cellspacing="0" width="778" align="center" class="font10"> 
  <tr> 
    <td width="119" bgcolor="#E8E8E8">&nbsp;</td> 
    <td colspan="8"> <marquee align="middle" bgcolor="#FFFFFF" width="100%" scrollamount="5" scrolldelay="100" class="font9" border="0"> 
      <font color="#000066">欢迎来到可编程逻辑器件中文网站! www.PLD.com.cn </font> 
      </marquee></td> 
  </tr> 
  <!--msnavigation--> 
</table> 
<table border="0" cellpadding="0" cellspacing="0" width="778" align="center"> 
  <tr> 
    <td valign="top" width="119" bgcolor="#E8E8E8"> <div align="left"><!-- #BeginEditable "column" --><!-- #EndEditable --> </div></td> 
    <!--msnavigation--> 
    <td valign="top" height="52"> <div align="center"> 
        <center> 
          <!-- #BeginEditable "Content" -->
          <p>&nbsp;</p>
          <p>&nbsp;</p>
          <p align="center" class="font12B"><strong>分频器的硬件描述语言设计 </strong></p>
          <p align="center"><strong>&nbsp; </strong></p>
          <blockquote>
            <p align="left">在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号。我们知道,在硬件电路设计中时钟信号是最重要的信号之一。 下面我们介绍分频器的 VHDL 描述,在源代码中完成对时钟信号 CLK 的 2 分频, 4 分频, 8 分频, 16 分频。 这也是最简单的分频电路,只需要一个计数器即可。</p>
            <p align="left">&nbsp; </p>
            <blockquote>
              <p align="left">LIBRARY IEEE; </p>
              <p align="left">USE IEEE.STD_LOGIC_1164.ALL; </p>
              <p align="left">USE IEEE.STD_LOGIC_ARITH.ALL; </p>
              <p align="left">USE IEEE.STD_LOGIC_UNSIGNED.ALL; </p>
              <p align="left">&nbsp;</p>
              <p align="left">ENTITY clkdiv IS </p>
              <blockquote>
                <p align="left">PORT(clk : IN STD_LOGIC; </p>
                <blockquote>
                  <p align="left">clk_div2 : OUT STD_LOGIC; </p>
                  <p align="left">clk_div4 : OUT STD_LOGIC; </p>
                  <p align="left">clk_div8 : OUT STD_LOGIC; </p>
                  <p align="left">clk_div16 : OUT STD_LOGIC); </p>
                </blockquote>
              </blockquote>
              <p align="left">END clk_div; </p>
              <p align="left">&nbsp; </p>
              <p align="left">ARCHITECTURE rtl OF clk_div IS </p>
              <blockquote>
                <p align="left">SIGNAL count : STD_LOGIC_VECTOR(3 DOWNTO 0); </p>
              </blockquote>
              <p align="left">BEGIN </p>
              <blockquote>
                <p align="left">PROCESS(clk) </p>
                <p align="left">BEGIN </p>
                <blockquote>
                  <p align="left">IF (clk'event AND clk=' 1' ) THEN </p>
                  <blockquote>
                    <p align="left">IF(count=” 1111” ) THEN </p>
                    <blockquote>
                      <p align="left">Count &lt;= (OTHERS =&gt;' 0' ); </p>
                    </blockquote>
                    <p align="left">ELSE </p>
                    <blockquote>
                      <p align="left">Count &lt;= count +1; </p>
                    </blockquote>
                    <p align="left">END IF ; </p>
                  </blockquote>
                  <p align="left">END IF ; </p>
                </blockquote>
                <p align="left">END PROCESS; </p>
                <p align="left">clk_div2 &lt;= count(0); </p>
                <p align="left">clk_div4 &lt;= count(1); </p>
                <p align="left">clk_div8 &lt;= count(2); </p>
                <p align="left">clk_div16 &lt;= count(3); </p>
              </blockquote>
              <p align="left">END rtl; </p>
              <p align="left">&nbsp; </p>
            </blockquote>
            <p align="left">对于分频倍数不是 2 的整数次幂的情况,我们只需要对源代码中的计数器进行一下计数控制就可以了,如下面源代码描述一个对时钟信号进行 6 分频的分频器。 </p>
            <p align="left">&nbsp;</p>
            <blockquote>
              <p align="left">ENTITY clkdiv IS </p>
              <blockquote>
                <p align="left">PORT(clk : IN STD_LOGIC; </p>
                <blockquote>
                  <p align="left">clk_div6 : OUT STD_LOGIC); </p>
                </blockquote>
              </blockquote>
              <p align="left">END clk_div; </p>
              <p align="left">&nbsp; </p>
              <p align="left">ARCHITECTURE rtl OF clk_div IS </p>
              <blockquote>
                <p align="left">SIGNAL count : STD_LOGIC_VECTOR(1 DOWNTO 0); </p>
                <p align="left">SIGNAL clk_temp : STD_LOGIC; </p>
              </blockquote>
              <p align="left">BEGIN </p>
              <blockquote>
                <p align="left">PROCESS(clk) </p>
                <p align="left">BEGIN </p>
                <blockquote>
                  <p align="left">IF (clk'event AND clk=' 1' ) THEN </p>
                  <blockquote>
                    <p align="left">IF(count=” 10” ) THEN </p>
                    <p align="left">count &lt;= (OTHERS =&gt;' 0' ); </p>
                    <p align="left">clk_temp &lt;=NOT clk_temp; </p>
                    <p align="left">ELSE </p>
                    <p align="left">count &lt;= count +1; </p>
                    <p align="left">END IF ; </p>
                  </blockquote>
                  <p align="left">END IF ; </p>
                </blockquote>
                <p align="left">END PROCESS; </p>
                <p align="left">clk_div6 &lt;= clk_temp; </p>
              </blockquote>
              <p align="left">END rtl; </p>
            </blockquote>
            <p align="left">&nbsp; </p>
            <p align="left">前面两个分频器的例子描述的将时钟信号进行分频,分频后得到的时钟信号的占空比为 1 : 1 。在进行硬件设计的时候,往往要求得到一个占空比不是 1 : 1 的分频信号,这时仍采用计数器的方法来产生占空比不是 1 : 1 的分频信号。下面源代码描述的是这样一个分频器:将输入的时钟信号进行 16 分频,分频信号的占空比为 1 : 15 ,也就是说,其中高电位的脉冲宽度为输入时钟信号的一个周期。 </p>
            <blockquote>
              <p align="left">LIBRARY IEEE; </p>
              <p align="left">USE IEEE.STD_LOGIC_1164.ALL; </p>
              <p align="left">USE IEEE.STD_LOGIC_ARITH.ALL; </p>
              <p align="left">USE IEEE.STD_LOGIC_UNSIGNED.ALL; </p>
              <p align="left">&nbsp; </p>
              <p align="left">ENTITY clkdiv IS </p>
              <blockquote>
                <p align="left">PORT(clk : IN STD_LOGIC; </p>
                <blockquote>
                  <p align="left">clk_div16 : OUT STD_LOGIC); </p>
                </blockquote>
              </blockquote>
              <p align="left">END clk_div; </p>
              <p align="left">&nbsp; </p>
              <p align="left">ARCHITECTURE rtl OF clk_div IS </p>
              <blockquote>
                <p align="left">SIGNAL count : STD_LOGIC_VECTOR(3 DOWNTO 0); </p>
              </blockquote>
              <p align="left">BEGIN </p>
              <blockquote>
                <p align="left">PROCESS(clk) </p>
                <p align="left">BEGIN </p>
                <blockquote>
                  <p align="left">IF (clk'event AND clk=' 1' ) THEN </p>
                  <blockquote>
                    <p align="left">IF(count=” 1111” ) THEN </p>
                    <p align="left">Count &lt;= (OTHERS =&gt;' 0' ); </p>
                    <p align="left">ELSE </p>
                    <p align="left">Count &lt;= count +1; </p>
                    <p align="left">END IF ; </p>
                  </blockquote>
                  <p align="left">END IF ; </p>
                </blockquote>
                <p align="left">END PROCESS; </p>
                <blockquote>
                  <p align="left">&nbsp; </p>
                </blockquote>
                <p align="left">PROCESS(clk) </p>
                <p align="left">BEGIN </p>
                <blockquote>
                  <p align="left">IF (clk'event AND clk=' 1' ) THEN </p>
                  <blockquote>
                    <p align="left">IF(count=” 1111” ) THEN </p>
                    <p align="left">Clk_div16 &lt;= ‘ 1' ; </p>
                    <p align="left">ELSE </p>
                    <p align="left">Clk_div &lt;= ‘ 0' ; </p>
                    <p align="left">END IF ; </p>
                  </blockquote>
                  <p align="left">END IF ; </p>
                </blockquote>
                <p align="left">END PROCESS; </p>
              </blockquote>
              <p align="left">END rtl; </p>
            </blockquote>
            <p align="left">&nbsp; </p>
            <p align="left">对于上述源代码描述的这种分频器,在硬件电路设计中应用十分广泛,设计人员常采用这种分频器来产生选通信号、中断信号和数字通信中常常用到的帧头信号等。 </p>
            <p align="left">希望深入了解的朋友,还可以思考奇数分频,半整数分频和小数分频的方法,在FPGA设计中,这些都是可以实现的,如果您希望更多信息,请继续阅读:</p>
            <p align="left">&nbsp;</p>
            <blockquote>
              <p align="left" class="font9"><font size=4><a href="../../application/a81.htm" class="font9">基于CPLD/FPGA的半整数分频器的设计</a></font></p>
              <p align="left" class="font9"><font size=4><a href="../../application/a111.htm" class="font9">基于FPGA的多种形式分频的设计与实现 </a></font></p>
              <p align="left" class="font9"><a href="advance/clockpll.htm" class="font9">FPGA内部时钟处理的常见设计方法</a></p>
            </blockquote>
          </blockquote>
          <p align="left">&nbsp;</p>
          <p>&nbsp;</p>
          <p>&nbsp;</p>
          <!-- #EndEditable --> 
        </center> 
      </div></td> 
  </tr> 
  <!--msnavigation--> 
</table> 
<table border="0" width="778" cellspacing="0" cellpadding="0" align="center" class="font9" bgcolor="#000000" height="35"> 
  <tr> 
    <td width="4%" height="10" align="center" bgcolor="#000066"> <div align="left"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif"></font></div></td> 
    <td width="96%" height="10" align="center" bgcolor="#000066"> <div class="index"> 
        <div align="left"><span class="font9_white"><b><a href="../../others/aboutus.html" class="index" target="_blank"><font face="Arial, Helvetica, sans-serif">about us</font></a></b></span><b> <font color="#CCCCCC"><span class="index2">|</span></font><span class="font9"><font color="#CCCCCC" face="Arial, Helvetica, sans-serif"> Site Map </font><font color="#CCCCCC">| </font></span></b></div> 
      </div></td> 
  </tr> 
  <tr valign="middle" bgcolor="#F3F3F3"> 
    <td height="18" align="center" colspan="2"> <p><font color="#666666"><span class="font9">copyright&copy; 1999-2003 all rights reserved www.PLD.com.cn</span></font></p></td> 
  </tr> 
  <tr bgcolor="#F3F3F3"> 
    <td height="23" align="center" colspan="2"><font color="#666666">e-mail: <span class="email">fpga.com.cn<img src="../../images/index/@.gif" width="7" height="10">126.com</span></font></td> 
  </tr> 
  <tr bgcolor="#FFFFFF"> 
    <td height="23" align="center" colspan="2">&nbsp;</td> 
  </tr> 
</table> 
</body>
<!-- #EndTemplate --></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -