linuxvhdl的个人空间 https://blog.eetop.cn/dianzi [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

两种方法实现占空比为50%的3分频

已有 1435 次阅读| 2006-9-14 18:00

天气: 晴朗
心情: 高兴

方法1:

module f3c(clk, reset,clk_out);
    
input clk, reset;
output clk_out;

wire clk_out;
reg clk_out1, clk_out2;

reg [1:0] count1, count2;
    
always @(posedge clk or negedge reset)
   if(!reset)
      begin
         count1 <= 0;
         clk_out1 <= 0;
      end 
  else if(count1 == 1 )
      begin
         clk_out1 <= ~clk_out1;
         count1 <= count1 + 1;
      end
  else if(count1 == 2)
      begin
        clk_out1 <= ~clk_out1;
        count1 <= 0;
      end
  else
        count1 <= count1 + 1;
  
always @(negedge clk or negedge reset)
   if(!reset)
      begin
         count2 <= 0;
         clk_out2 <= 0;
      end 
  else if(count2 == 1)
      begin
         clk_out2 <= ~clk_out2;
         count2 <= count2 + 1;
      end
  else if(count2 == 2)
      begin
        clk_out2 <= ~clk_out2;
        count2 <= 0;
      end
  else
        count2 <= count2 + 1;
          
assign clk_out = (!clk_out1 )&& (!clk_out2);         
       
endmodule

module f3c_test;

reg clk,reset;

initial
begin
reset = 1; clk = 0; 
#20 reset = 0;
#20 reset = 1;
#10000 $stop;
end

f3c f3ct(clk,reset,clk_out);

always
#50 clk = ~clk;

endmodule

 

方法2:

module devide_3(ref_clk,rst_n,clkout);
input  ref_clk,rst_n;
output clkout;

reg div1,div2;
reg [1:0]count;

always@(posedge ref_clk or negedge rst_n)
   begin
        if(!rst_n)
                count <= 0;
       else if(count[1:0]==2'b10)
                count <= 0;
        else
                count <= count+1;
   end
  
  
always@(posedge ref_clk or negedge rst_n)
   begin
        if(!rst_n)
                div1 <= 0;
        else if(count[1:0] == 2'b00)
                div1 <= ~div1;
        else
                div1 <= div1;
   end


always@(negedge ref_clk or negedge rst_n)
begin
        if(!rst_n)
                div2 <= 0;
        else if(count[1:0]== 2'b10)
                div2 <= ~div2;
        else
                div2 <= div2;
end

assign clkout = div1^div2;
endmodule

// test benches
module devide_t();
reg         ref_clk,rst_n;

devide_3 a1(.ref_clk(ref_clk),.rst_n(rst_n),.clkout(clkout));

initial
  begin
        ref_clk=0;
        rst_n=1;
   #100 rst_n=0;
   #300 rst_n=1;
 #10000 $stop;
  end

always #50 ref_clk=~ref_clk;
endmodule


点赞

发表评论 评论 (3 个评论)

Guest 2007-4-9 13:47
http://a0eaf8b6aeb64807ec345cd5b711fce9-t.rh5t5bf.info <a href="http://a0eaf8b6aeb64807ec345cd5b711fce9-h.rh5t5bf.info">a0eaf8b6aeb64807ec345cd5b711fce9</a> [url]http://a0eaf8b6aeb64807ec345cd5b711fce9-b1.rh5t5bf.info[/url] [url=http://a0eaf8b6aeb64807ec345cd5b711fce9-b2.rh5t5bf.info]a0eaf8b6aeb64807ec345cd5b711fce9[/url] [u]http://a0eaf8b6aeb64807ec345cd5b711fce9-b3.rh5t5bf.info[/u] 0c4df95de00b5aa0f800bcc958a3b7df
Guest 2007-5-1 09:38
http://e5dbcbc3682885cc80858d8a68948315-t.k90u0h.info <a href="http://e5dbcbc3682885cc80858d8a68948315-h.k90u0h.info">e5dbcbc3682885cc80858d8a68948315</a> [url]http://e5dbcbc3682885cc80858d8a68948315-b1.k90u0h.info[/url] [url=http://e5dbcbc3682885cc80858d8a68948315-b2.k90u0h.info]e5dbcbc3682885cc80858d8a68948315[/url] [u]http://e5dbcbc3682885cc80858d8a68948315-b3.k90u0h.info[/u] 86b4eaaaf8201e29470f084ce1d2d695
回复 #110# 2008-4-24 11:16
:handshake very good!

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 12

    评论
  • 96

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-7 06:56 , Processed in 0.024052 second(s), 16 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部