13-分频器-奇分频-简讯
来源:博客园 时间:
2023-05-27 11:20:14
(资料图片仅供参考)
1. 奇分频
实现将一个系统时钟进行 5 分频的奇数分频的功能。可以用于将高频的时钟降低为低频的时钟工作使用。
1.1 框图及波形
- 在偶数分频方法中,波形绘制时,计数器只要计数到M/2-1,计数器清零;但是在奇数分频时,不能用这样的方式(不存在1.5、2.5个周期计数)奇数分频直接计数到M(计数的最大值)
五分频时钟,计数到四,输出信号可以在0-2的时候保持低电平,3-4保持高电平,此时采用的是上升沿采样,占空比不是50%采用下降沿采样,相当于将上升沿采样的波形向左移动半个时钟周期,占空比也不是50%,不是我们想要的波形将上面的波形进行或运算,可以得到五分频时钟,编写代码的时候,上升沿和下降沿采用的波形可以作为中间变量
1.2 RTL
module divider_five( input wire sys_clk, input wire sys_rst_n, output wire clk_out ); reg [2:0] cnt; reg clk_1; reg clk_2; // 计数器变量赋值 always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) cnt <= 3"d0; else if(cnt == 3"d4) cnt <= 3"d0; else cnt <= cnt + 3"d1; // clk_1变量赋值 always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) clk_1 <= 1"b0; else if(cnt == 3"d2) clk_1 <= 1"b1; else if(cnt == 3"d4) clk_1 <= 1"b0; else clk_1 <= clk1; // clk_2变量赋值,时钟下降沿触发,需要修改敏感列表 always@(negedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) clk_2 <= 1"b0; else if(cnt == 3"d2) clk_2 <= 1"b1; else if(cnt == 3"d4) clk_2 <= 1"b0; else clk_2 <= clk1; // 输出信号 assign clk_out = clk_1 | clk2;endmodule- 创建quartus工程,添加代码,进行代码编译
1.3 Testbench
`timescale 1ns/1nsmodule tb_divider_five(); reg sys_clk; reg sys_rst_n; wire [1:0] clk_out; // 初始化时钟和复位信号 initial begin sys_clk = 1"b0; sys_rst_n = 1"b0; #20; sys_rst_n = 1"b1; end // 模拟时钟信号 always #10 sys_clk = ~sys_clk; // 模块的实例化 divider_six divider_five_inst( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .clk_out (clk_out) );endmodule- 添加仿真文件,进行仿真设置,进行仿真
1.4 优化(设置标志位)
- 在计数器最大值减一之后产生一个周期脉冲然后计数器重新开始进行计数
module divider_five( input wire sys_clk, input wire sys_rst_n, output reg clk_flag); reg [2:0] cnt; always @ (posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) cnt <= 3"d0; else if(cnt == 3"d4) cnt <= 3"d0; else cnt <= cnt + 3"d1; always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) cnt_flag <= 1"b0; else if(cnt == 3"d3) cnt_flag <= 1"b1; else cnt_flag <= 1"b0;endmodule`timescale 1ns/1nsmodule tb_divider_five(); reg sys_clk; reg sys_rst_n; wire [2:0] clk_flag; // 初始化时钟和复位信号 initial begin sys_clk = 1"b0; sys_rst_n = 1"b0; #20; sys_rst_n = 1"b1; end // 模拟时钟信号 always #10 sys_clk = ~sys_clk; // 模块的实例化 divider_six divider_six_inst( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .clk_flag (clk_flag) );endmodule- 用两个计数器,一个由输入时钟上升沿触发,一个由输入时钟下降沿触发,最后将两个计数器的输出相或,即可得到占空比为50%的方波波形。(尽量避免将分频后时钟用作module内的后级时钟输入,但可以用于其他module的时钟输入)
- 若要实现N分频,只需在计数器计数到N-1(重新从0开始计数)时,输出分频标志即可。
关键词:
为您推荐
-
3月15日,中来股份发布公告称,公司与太原市人民政府、古交市人民政府签署了《战略合作与投资协议》,公司拟在山西省古交市投资年产20万吨
22-03-18
-
中新网8月28日电 据健康北京微信公众号消息,北京中康时代康复医院、北京四惠中医医院等多家医疗机构,存在工作人员未严格落实定期进
21-08-30
-
中新网兰州8月28日电 (记者 殷春永 冯志军)“刚开始说待三年,但三年之后又三年……”14年前受上级“委派”,在大漠戈壁深处的峡谷
21-08-30
-
中新网上海8月28日电 (张践)阿依古丽来自新疆阿勒泰地区,2009年来到上海创业。十余年来,阿依古丽身边的小伙伴们都亲切地称呼她为“
21-08-30
-
新华社郑州8月28日电(记者翟濯)记者从河南省政府新闻办28日举办的“河南省加快灾后重建”周口专场新闻发布会上获悉,本次洪涝灾害共造
21-08-30
-
中新网防城港8月28日电(陈思华 罗婕 李尚珍)8月28日上午,广西防城港火车站增加4条到发线工程正式开工。该工程系广西“十四五”规划
21-08-30
-
河南第一产粮大市近800万亩未受灾秋粮长势喜人 有望以丰补歉 中新网郑州8月28日电 (记者 李贵刚)记者28日从“河南省加快灾后重建
21-08-30
-
今天(8月28日)下午,河南省郑州市召开疫情防控新闻发布会,介绍疫情防控最新情况。 记者从发布会上获悉,郑州市居民小区继续落实查
21-08-30
-
新华社南京8月28日电(记者杨丁淼)江苏省南通市27日发布《关于进一步减轻义务教育阶段学生作业负担和校外培训负担的实施意见》,作为“
21-08-30
