Verilog任意分频器设计

更新时间:2023-06-23 10:49:10 阅读: 评论:0

Verilog任意分频器设计
Verilog任意分频器设计
有关奇分频的思考
(这篇⽂章的⼀些写法⽐较简洁)
占空⽐⼩于50%的两个clk信号
占空⽐⼤于50%的两个clk信号
对⽐
明星照片女所以不要死板的记,以上⾯的2,3电平为例:如果⾼电平多,就需要交错半个clk周期进⾏与运算,正好去掉半个周期的,⾼低电平就相同了。
如果是低电平多,就是交错之后或运算,⾼低电平就相同。
Verilog任意分频器设计
把所有的分频模块并⾏同时进⾏,只是依据参数选择性的输出。
// parameter 参数化的⽅法将偶数分频和奇数分频都做成通⽤的任意分频模块,⽅便以后的调⽤
module divider_api
飞机手工#(
parameter CLK_DIV  =12'd5,// 分频数
CNT_WIDTH  =12'd5 // 分频器位宽
)
(
input  wire    sys_clk    ,//系统时钟50Mhz
input  wire    sys_rst_n  ,//全局复位
output  wire    clk_out        //对系统时钟分频后的信号
)
;
//偶分频信号
reg      clk_even  ;
reg [CNT_WIDTH-1:0] clk_even_cnt ;
//奇分频信号
wire    clk_odd  ;大班亲子游戏
reg      clk_1  ;
reg      clk_2  ;
reg [CNT_WIDTH-1:0] clk_1_cnt  ;
reg [CNT_WIDTH-1:0] clk_2_cnt  ;
//所有的分频模块时同时进⾏的,只是依据参数选择性的输出
assign clk_out =(CLK_DIV ==1)? sys_clk :(CLK_DIV[0]? clk_odd : clk_even);//只需判断最后⼀位是0还是1即可assign clk_odd = clk_1 & clk_2;
//偶分频
always @(podge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
贫困户申请书begin
clk_even_cnt <=0;
clk_even  <=1'b0 ;
end
el if(clk_even_cnt == CLK_DIV /2-1)//计数到⼀半时翻转,计数器继续加
begin
clk_even_cnt <= clk_even_cnt +1'b1;
clk_even  <=~clk_even;
end
el if(clk_even_cnt == CLK_DIV -1)//计数满时翻转,计数器清零
begin
clk_even_cnt <=0;
clk_even  <=~clk_even;
end我眼中的林黛玉
el//其他情况计数器加⼀,clkeven保持不变即可
begin
clk_even_cnt <= clk_even_cnt +1'b1;
clk_even  <= clk_even;
end
end
//奇分频——clk1:上升沿触发
always @(podge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
begin
clk_1_cnt <=0;
clk_1  <=1'b0 ;
end
el if(clk_1_cnt ==(CLK_DIV -1)/2)//计数到⼀半时翻转,计数器继续加  begin
clk_1_cnt <= clk_1_cnt +1'b1 ;
clk_1  <=~clk_1  ;
end
el if(clk_1_cnt == CLK_DIV -1)//计数满时翻转,计数器清零
begin
clk_1_cnt <=0;
clk_1  <=~clk_1 ;
end
el
begin
clk_1_cnt <= clk_1_cnt +1'b1 ;
clk_1  <= clk_1  ;
end
end
//奇分频——clk2:下降沿触发
always @(negedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
begin
clk_2_cnt <=0;
clk_2  <=1'b0 ;
end
el if(clk_2_cnt ==(CLK_DIV -1)/2)//计数到⼀半时翻转,计数器继续加  begin
clk_2_cnt <= clk_2_cnt +1'b1 ;
clk_2  <=~clk_2  ;
end
el if(clk_2_cnt == CLK_DIV -1)//计数满时翻转,计数器清零
begin
clk_2_cnt <=0;
clk_2  <=~clk_2 ;
end
el
begin
clk_2_cnt <= clk_2_cnt +1'b1 ;
clk_2  <= clk_2  ;
end
end
endmodule
Testbench
`timescale  1ns/1ns
oppo音乐手机
module divider_api_tb();
竹简笔画//wire  define
wire    clk_out;
//reg  define
reg    sys_clk;
reg    sys_rst_n;
/
/初始化系统时钟、全局复位
initial begin
sys_clk    =1'b1;
sys_rst_n <=1'b0;
#20
sys_rst_n <=1'b1;
end
//sys_clk:模拟系统时钟,每10ns电平翻转⼀次,周期为20ns,频率为50Mhz always #10 sys_clk =~sys_clk;
divider_api
#(
.CLK_DIV (12'd10),
T_WIDTH (12'd5)
)
divider_api_inst
(
.sys_clk    (sys_clk    ),//input    sys_clk
.sys_rst_n  (sys_rst_n  ),//input    sys_rst_n
.clk_out    (clk_out    )//output    clk_out
变色龙英文);
endmodule
10分频
25分频

本文发布于:2023-06-23 10:49:10,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1020546.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:翻转   任意   时钟   计数器   分频器   触发   设计   运算
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图