EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
3 W9 b& M+ D2 ?
s, e# i! k' f& U4 i$ P' v7 u: T今日无聊,搬运了一个 二分频的代码来玩一玩。。。* O& \% b* i. I% E- {* g u
分频器一般用计数器就可以实现了。2分频,也就是说对原来的时钟计数,每记2个数让新的时钟输出翻转。新的时钟周期不就是原来的2倍么,这就完成了2分频。同理可以实现任意分频,只要用计数器记满你想分频的倍率然后让新时钟输出翻转即可。 翻转的意思是,1变0,0变1。
6 Q% q. v1 ]+ c5 u: ?8 K" m- _1 g5 D! ^3 K8 ^# N
$ Q. A/ f+ }, c直接上代码:
6 H' q9 L8 f- b4 q; L; \half_clk.v
$ ^: o, g+ C' `; h3 E- module half_clk_dai(
- clk_in,
- rst,
- clk_out
- );
- input clk_in;
- input rst;
- output clk_out;
- reg clk_out;
- always@(posedge clk_in or negedge rst)
- begin
- if(!rst)
- clk_out<=0;
- else
- clk_out<=~clk_out;
- end
- endmodule
* `1 w( {' r0 |* ]/ ^6 r0 e* Z
# `3 V1 P4 H" |5 }* L1 U% [( m2 O4 O. Y( q( A4 J
/ W6 {4 [7 K& p P
5 t+ }8 G, i, |
0 L5 U7 s7 y/ t+ B# q0 b: ahalf_clk_tb.v
; j+ F7 u( R% P0 } _# ], }5 T; n
" x9 Z7 q. X; g- `timescale 1ns/1ns
- module half_clk_top;
- reg clk_in;
- reg rst;
- initial
- begin
- clk_in=1;
- rst=1;
- #1000
- rst=0;
- #1000
- rst=1;
- end
- always #200 clk_in=~clk_in;
- half_clk_dai dai1(
- .clk_in(clk_in),
- .rst(rst),
- .clk_out(clk_out)
- );
- endmodule
- , {) [; m& R/ |& V% j3 \1 \, A% z
3 }' \! }5 p7 C( i, L8 S
\5 [2 M1 F3 [6 j
( ~7 \% Y3 P8 n s/ c
/ `- |& }% Q/ m
3 C, r7 O/ Z' ]+ C. S3 O7 [6 N% J5 F+ X
仿真效果如下: 7 J& F" y+ ^" s9 K. s
4 f9 i" {% h! B2 X0 r$ M& t0 D, B+ S3 ? S( o, W, q, H7 U2 Q: Y
% Z" H$ O" t: o6 e
2 H' x. r3 J- \' j8 f* O# @
|