找回密码
 注册
关于网站域名变更的通知
查看: 256|回复: 1
打印 上一主题 下一主题

转——【FPGA代码学习】实践一下FPGA时钟分频

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-10 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Taio 于 2019-4-10 11:05 编辑 & S" F8 V9 i) A$ p
; b% t) R  L' N# a, ?: G
转——【FPGA代码学习】实践一下FPGA时钟分频

! R# J% C2 |/ b7 q8 `以前小伙伴一起讨论过关于  关于  FPGA 时钟分频?  这些奇葩的分频,可能也只在IC内部用的到吧,由于好奇,我也来尝试一下。
/ g" o1 o! I* I+ Y' M一、 具有50% 占空比的奇数的整数分频; T# V9 W4 `9 f0 e
对时钟进行N分频,创建由时钟沿触发的计数器,计数到N-1/ _* b: B( b' `( k  ]
对于3分频,从0计数到2   即是 N=3$ v. p7 M1 K6 ~& V5 e$ n
对于3分频,从0计数到3   即是 N=4
6 G6 @2 O4 B9 e' o: Z7 Y……! S: }: s: A6 [& [6 X! c7 f

( ?- a& A  u6 A  P

" J8 R0 c4 P; W2 I$ X& o
图:3分频
# T* I) K- w& v+ w# ^

& r1 ?6 M& L4 y& B: E0 p, M+ z4 H3 b/ |/ Q

3 Y0 a$ F3 i0 D6 ]( k3 K+ f代码如下:8 \9 _. l: p, U; h. O" m

* a+ S9 S( f. {- ~# w2 R
  • module half_clk_dai(
  •                      clk_in,
  •                      rst,
  •                      clk_out,
  •                      cnt
  •                      );
  • input clk_in;
  • input rst;
  • output clk_out;
  • output [0:1] cnt;
  • reg clk_out;
  • reg [0:1] count= 2'b00;
  • assign cnt = count;
  • always@(posedge clk_in or negedge rst or negedge clk_in)
  • begin
  •    if(!rst)
  •      clk_out<=0;
  •    else
  •      begin
  •        if(count==2)
  •          begin
  •            count=0;
  •            clk_out<=~clk_out;
  •          end
  •       else
  •          count=count+1;
  •      end
  • end
  • endmodule
  • ! P9 V6 U; O% n+ W( |; |, ~5 S: M" ?

! G$ g* c3 \! e+ x+ M) ^& a[color=rgb(51, 102, 153) !important]复制代码
# s: K$ w' @* T. J5 x

, A) M9 L7 d! ^8 k6 V) G1 Q: t3 W! A) D3 I5 D
! l+ B' R& y& k4 M9 N5 `" F
二、非50%占空比的非整数分频* o  k) W" t' t: g4 B* a

, G; v. a) Y" Y$ K# M( d, R实现一个 4.5 倍分频,占空比为40%,不含毛刺。) u* D; d: Q8 u; z

/ b. w! W9 I: h! W, r
图:4.5倍分频 40% 占空比
! x2 s' C9 Z, R3 |
) ]4 I- a6 h! N! a4 L1 _0 ]
代码如下:
1 c- S7 H; b  |5 U
  • module half_clk_dai(
  •                     clk_in,
  •                     rst,
  •                     clk_out,
  •                     cnt
  •                     );
  • input clk_in;
  • input rst;
  • output clk_out;
  • output [0:1] cnt;
  • reg clk_out;
  • reg [0:2] count= 3'b00;
  • reg  [0:1] flag=2'b00;
  • reg [0:3]temp =4'b0011;
  • assign cnt = count;
  • always@(posedge clk_in or negedge rst or negedge clk_in)
  •   begin
  •     if(!rst)
  •       clk_out<=0;
  •     else
  •       begin
  •         if(count == temp )
  •             begin
  •               count=0;
  •               clk_out<=~clk_out;
  •               if(flag==2)
  •                 begin
  •                   if(temp==3)temp=4;
  •                   else temp=3;
  •                   flag = 0;
  •                 end
  •               flag=flag+1;
  •             end
  •         else
  •             count=count+1;
  •       end
  •     end
  • endmodule
  • ; P9 D2 P5 L1 ]5 P
  y8 @2 d: b; n0 X

' p: e. ?0 y, T$ g: |, P5 v

4 b1 k6 P, E& z% l8 m9 e$ I$ [% Z3 f6 M+ N0 T  U, w9 z6 q2 B
6 n2 K8 t. m' d3 }0 s
三、小结2 e( d$ O1 U3 t* Q# U6 C  g
1 j" Z$ C- M% F
& y* ]: A% K3 s6 y4 z
分频主要是对时钟的操作,以及计数器的实现。5 ~8 {1 O, s) ~

; {3 b% i% l, E$ q! `. F" P& @6 K( Q参考:   群聊天5 @* V8 J9 H9 `) A" Y
   网络% s( p- X% q4 E! K% @3 G7 S/ I9 B
《硬件架构的艺术》  C- w( f. [9 [; R! ~+ W+ h7 y

该用户从未签到

2#
发表于 2019-4-10 17:39 | 只看该作者
thanks for sharing
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-29 19:42 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表