打印

分享:任意奇数分频(50%占空比) verilog 代码

[复制链接]
3024|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
网上这样的帖子很多,各种写法,但是发现一个问题,产生的时钟分频信号与原始信号并不同相。我自己写了个,只需要修改一下两个参数,就可以产生任意分频,而且与原始时钟同相,占空比50% 。也欢迎 大家提出问题。

以3 分频为例:
module clk_dive(clk,rst,clk_out);
input clk; // 输入时钟
input rst;
output clk_out;// 分频后的输出时钟
reg clk_3; //  中间时钟
reg clk_4;// 中间时钟
reg [2:0]cnt1; // clk_3的计数器
reg [2:0]cnt2;// clk_4的计数器

assign clk_out=clk_3|clk_4; //  两个中间时钟信号或后 为最终输出的时钟信号

always @(posedge clk ) //  产生中间时钟clk_3
if(!rst)
begin
clk_3<=1'b0;
cnt1<=3'd0;
end
else  if(cnt1<1)  //  3分频为<1 , 5分频改为<2 ,7分频改为<3,9分频 改为<4    依次类推!
  begin
  clk_3<=1'b1;
  cnt1<=cnt1+1'b1;
  end
else if (cnt1==3)  //  3 分频==3 , 5分频改为==5 ,7分频 改为==7   几分频就改为==几!
   begin
   clk_3<=1;
   cnt1<=1;
   end
else begin
  cnt1<=cnt1+1'b1;
  clk_3<=1'b0;
   end
     
     
always @(negedge clk )  //  产生中间时钟clk_4

if(!rst)
begin
clk_4<=1'b0;
cnt2<=3'd0;
end
else  if(cnt2<1)//  3分频为<1 , 5分频改为<2 ,7分频改为<3,9分频 改为<4    依次类推!
  begin
  clk_4<=1'b1;
  cnt2<=cnt2+1'b1;
  end
else if (cnt2==3)  //  3 分频==3 , 5分频改为==5 ,7分频 改为==7   几分频就改为==几!
   begin
   clk_4<=1;
   cnt2<=1;
   end
else begin
  cnt2<=cnt2+1'b1;
  clk_4<=1'b0;
   end
endmodule

总结下:1. 占空比50%的奇数分频的 思想就是利用原始时钟的上升沿和下降沿 分别产生两个时钟 。这两个时钟的占空比有规律(3分频 为1:2  ;5分频 为 2:3  7分频 为3:4) 由于是由不同触发沿产生,所以这两个中间时钟 交错半个时钟周期。相或后,就得到占空比为 50% 的分频信号。 只需要改动两个参数   第二个参数很好记,第一个参数也是有规律的。
              2.不过目前还没有使用过自己写的分频时钟,因为有PLL/DLL,最好用PLL/DLL ! 不过话说这个奇数分频 是经常考察的东西。








评分
参与人数 1威望 +2 收起 理由
GoldSunMonkey + 2 很给力!

相关帖子

沙发
ifpga| | 2013-3-22 11:02 | 只看该作者

使用特权

评论回复
板凳
jakfens| | 2013-3-22 13:02 | 只看该作者
:victory:

使用特权

评论回复
地板
jahnson066| | 2013-3-22 22:10 | 只看该作者
这个不错,菜鸟学习一下,哈哈

使用特权

评论回复
5
触觉的爱| | 2013-3-23 16:19 | 只看该作者
学习了

使用特权

评论回复
6
GoldSunMonkey| | 2013-3-23 22:27 | 只看该作者
不错,感谢啦

使用特权

评论回复
7
Death格雷尔| | 2013-7-10 20:42 | 只看该作者
请问 占空比 50%的 偶分频 改动数字 能实现吗 要怎么改啊

这个程序对么 是占空比50%的奇分频么   谢谢
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity fpq is
port(
     clk:in std_logic;
     clkoutut std_logic);
end entity fpq;
architecture one of fqp is
signal cnt:std_logic_vector(1 downto 0);
begin
process(clk)
veriable cnt:integer range 0 to 3;
begin
if rising_edge(clk) then
  if cnt=3
    then cnt :=0;
    else cnt :=cnt+1;
end if;
if cnt< 2
  then clkout< ='0';
else clkout<='1';
end if;
end if;
end process;
end architecture one;

使用特权

评论回复
8
GoldSunMonkey| | 2013-7-10 21:07 | 只看该作者
Death格雷尔 发表于 2013-7-10 20:42
请问 占空比 50%的 偶分频 改动数字 能实现吗 要怎么改啊

这个程序对么 是占空比50%的奇分频么   谢谢 [em ...

:L 偶分频。。。占空比 50%
随便一写就是。

使用特权

评论回复
9
Death格雷尔| | 2013-7-10 21:20 | 只看该作者
GoldSunMonkey 发表于 2013-7-10 21:07
偶分频。。。占空比 50%
随便一写就是。

哎呀 那我不会吗 我上面那个是不是啊  

使用特权

评论回复
10
GoldSunMonkey| | 2013-7-10 22:34 | 只看该作者
Death格雷尔 发表于 2013-7-10 21:20
哎呀 那我不会吗 我上面那个是不是啊

;P仿真试一下嘛。亲

使用特权

评论回复
11
yoonssica| | 2013-7-11 12:05 | 只看该作者
嘿嘿~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

使用特权

评论回复
12
GoldSunMonkey| | 2013-7-11 21:52 | 只看该作者
yoonssica 发表于 2013-7-11 12:05
嘿嘿~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

来更美的了

使用特权

评论回复
13
GoldSunMonkey| | 2013-7-11 21:53 | 只看该作者
yoonssica 发表于 2013-7-11 12:05
嘿嘿~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

求交往啊

使用特权

评论回复
14
yoonssica| | 2013-7-12 08:32 | 只看该作者
看不出来是艺人的图片么、、、

使用特权

评论回复
15
fanfanjwj| | 2013-7-12 09:44 | 只看该作者
GoldSunMonkey 发表于 2013-7-11 21:53
求交往啊

原来猴哥也单身~~~~~~~~~~~~~~~~~~~~

使用特权

评论回复
16
qin552011373| | 2013-7-12 19:18 | 只看该作者
很不错  学习了

使用特权

评论回复
17
GoldSunMonkey| | 2013-7-12 19:49 | 只看该作者
fanfanjwj 发表于 2013-7-12 09:44
原来猴哥也单身~~~~~~~~~~~~~~~~~~~~

我是老牛氓

使用特权

评论回复
18
GoldSunMonkey| | 2013-7-12 19:49 | 只看该作者
yoonssica 发表于 2013-7-12 08:32
看不出来是艺人的图片么、、、

我知道女的,活的,就行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:来到这个论坛,乐于分享,好好学习!!

86

主题

439

帖子

5

粉丝