📄 分频器的硬件描述语言设计.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> </td>
<td width=37 bgcolor="#504A8A" height="20"> </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"> </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> </p>
<p> </p>
<p align="center" class="font12B"><strong>分频器的硬件描述语言设计 </strong></p>
<p align="center"><strong> </strong></p>
<blockquote>
<p align="left">在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号。我们知道,在硬件电路设计中时钟信号是最重要的信号之一。 下面我们介绍分频器的 VHDL 描述,在源代码中完成对时钟信号 CLK 的 2 分频, 4 分频, 8 分频, 16 分频。 这也是最简单的分频电路,只需要一个计数器即可。</p>
<p align="left"> </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"> </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"> </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 <= (OTHERS =>' 0' ); </p>
</blockquote>
<p align="left">ELSE </p>
<blockquote>
<p align="left">Count <= 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 <= count(0); </p>
<p align="left">clk_div4 <= count(1); </p>
<p align="left">clk_div8 <= count(2); </p>
<p align="left">clk_div16 <= count(3); </p>
</blockquote>
<p align="left">END rtl; </p>
<p align="left"> </p>
</blockquote>
<p align="left">对于分频倍数不是 2 的整数次幂的情况,我们只需要对源代码中的计数器进行一下计数控制就可以了,如下面源代码描述一个对时钟信号进行 6 分频的分频器。 </p>
<p align="left"> </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"> </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 <= (OTHERS =>' 0' ); </p>
<p align="left">clk_temp <=NOT clk_temp; </p>
<p align="left">ELSE </p>
<p align="left">count <= 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 <= clk_temp; </p>
</blockquote>
<p align="left">END rtl; </p>
</blockquote>
<p align="left"> </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"> </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"> </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 <= (OTHERS =>' 0' ); </p>
<p align="left">ELSE </p>
<p align="left">Count <= 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"> </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 <= ‘ 1' ; </p>
<p align="left">ELSE </p>
<p align="left">Clk_div <= ‘ 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"> </p>
<p align="left">对于上述源代码描述的这种分频器,在硬件电路设计中应用十分广泛,设计人员常采用这种分频器来产生选通信号、中断信号和数字通信中常常用到的帧头信号等。 </p>
<p align="left">希望深入了解的朋友,还可以思考奇数分频,半整数分频和小数分频的方法,在FPGA设计中,这些都是可以实现的,如果您希望更多信息,请继续阅读:</p>
<p align="left"> </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"> </p>
<p> </p>
<p> </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© 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"> </td>
</tr>
</table>
</body>
<!-- #EndTemplate --></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -