分频器code

devtools/2025/1/19 16:13:37/

理论学习

                数字电路中时钟占有非常重要的地位。时间的计算都依靠时钟信号作为基本单元。一般而言,一块板子只有一个晶振,即只有一种频率的时钟,但是数字系统中,经常需要对基准时钟进行不同倍数的分频,进而得到各模块所需的频率。

                若想得到比系统时钟更慢的时钟,可以将基准时钟进行分频。

                若想得到比系统时钟更快的时钟,可以将基准时钟进行倍频。

                不管是分频还是倍频,都通过PLL实现或者用verilog描述实现。

        我们用verilog实现的一般是分频电路,即分频器。分频电路是数字系统设计中常用的基本电路之一。

        分频器分为偶数分频和奇数分频。

偶数分频demo1

module    divider_sex
(input    wire    sys_clk      ,input    wire    sys_rst_n    ,output   reg     clk_out
);reg    [1:0]    cnt    ;always@( posedge sys_clk or negedge sys_rst_n )beginif( sys_rst_n == 1'b0 )begincnt    <=    2'd0    ;endelse if( cnt == 2'd2 )begincnt    <=    2'd0    ;endelsebegincnt    <=    cnt    + 1'b1    ;endendalways@(posedge sys_clk or negedge sys_rst_n )beginif(  sys_rst_n == 1'b0 )beginclk_out    <=    1'b0    ;end else if( cnt == 2'd2 )beginclk_out    <=    ~clk_out    ;endendendmodule

偶数分频demo2

module    divider_six
(input    wire    sys_clk      ,input    wire    sys_rst_n    ,outpur   reg     clk_out
);reg    [2:0]    cnt    ;always@( posedge sys_clk or negedge sys_rst_n )beginif( sys_rst_n == 1'b0 )begincnt    <=    3'd0    ;endelse    if( cnt == 3'd5 )begincnt    <=    3'd0    ;endelsebegincnt    <=    cnt    + 1'b1    ;endendalways@( posedge sys_clk or negedge sys_rst_n )beginif( sys_rst_n == 1'b0 )beginclk_out    <=    1'b0    ;endelse if( cnt == 3'd4 )beginclk_out    <=    1'b1    ;endelse    beginclk_out    <=    1'b0    ;    endendendmodule

偶数分频对应的tb

`timescale    1ns/1nsmodule    tb_divider_six();reg    sys_clk      ;reg    sys_rst_n    ;wire   clk_out      ;initialbeginsys_clk    =    1'b1    ;sys_rst_n    <=    1'b0    ;#20    ;sys_rst_n    <=    1'b1    ;endalways #10     sys_clk     <=    ~sys_clk    ;divider_six    divider_six_inst(.sys_clk      (sys_clk)      ,.sys_rst_n    (sys_rst_n)    ,.clk_out      (clk_out));endmodule

奇数分频

module    divider_five
(input    wire    sys_clk      ,input    wire    sys_rst_n    ,output   wire    clk_out
);reg    [2:0]    cnt     ;reg             clk1    ;reg             clk2    ;always@( posedge sys_clk or negedge sys_rst_n )beginif( sys_rst_n == 1'b0 )begincnt    <=    3'd0    ;endelse if( cnt == 3'd4 )begincnt    <=    3'd0    ;endelsebegincnt    <=    cnt    + 1'b1    ;endend//clk1always@( posedge sys_clk or negedge sys_rst_n )        beginif( sys_rst_n == 1'b0 )beginclk1    <=    1'b1    ;endelse if( cnt == 3'd2 )beginclk1    <=    1'b0    ;endelsebeginclk1    <=    1'b1    ;endend//clk2always@( negedge sys_clk or negedge sys_rst_n )beginif( sys_rst_n == 1'b0 )beginclk2    <=    1'b1    ;endelse if( cnt    ==    3'd2 )beginclk2    <=    1'b0    ;endelsebeginclk2    <=    1'b1    ;endendassign    clk_out    =    clk1 & clk2    ;endmodule

奇数分频的tb

`timescale 1ns/1nsmodule    tb_divider_five();reg    sys_clk      ; reg    sys_rst_n    ;wire   clk_out      ;initialbeginsys_clk    =    1'b1    ;sys_rst_n    <=    1'b0    ;#20    ;sys_rst_n    <=    1'b1    ;  endalways #10    sys_clk    <=    ~sys_clk    ;divider_five    divider_five_inst(.sys_clk      (sys_clk)      ,.sys_rst_n    (sys_rst_n)    ,.clk_out      (clk_out));endmodule


http://www.ppmy.cn/devtools/151855.html

相关文章

Codeforces Round 997 (Div. 2)

文章目录 A. Shape Perimeter思路代码 B. Find the Permutation思路代码 C. Palindromic Subsequences思路代码 小记 A. Shape Perimeter 思路 这个题题目说的很复杂但其实不难&#xff0c;一直一开始正方形的边长是m&#xff0c;每次移动x&#xff0c;y个单位&#xff0c;求…

牛客----mysql

用where过滤空值练习_牛客题霸_牛客网 题目&#xff1a;现在运营想要对用户的年龄分布开展分析&#xff0c;在分析时想要剔除没有获取到年龄的用户&#xff0c;请你取出所有年龄值不为空的用户的设备ID&#xff0c;性别&#xff0c;年龄&#xff0c;学校的信息。 示例&#xf…

蓝桥杯算法日常|枚举[*找到最多的数]

**找到最多的数** 重点疑问总结&#xff1a; 1、数组输入输出c一般会采用那种方便的方式&#xff1f;&#xff1f; 用的就是我想的那种&#xff0c;就是用的最大范围定义的。 2、怎样方便给数组中每个数出现的次数计数&#xff1f;&#xff1f; 刚开始想的是&#xff1a;每个数…

HTML5 教程(下)

HTML5 Video(视频) HTML5 Video(视频) 在本节内容中&#xff0c;你将了解到在HTML5中视频是如何工作的、主流浏览器支持的视频格式以及如何对网页中的视频进行控制。 很多站点都会使用到视频. HTML5 提供了展示视频的标准。 检测您的浏览器是否支持 HTML5 视频&#xff1a; …

C++ 并发编程之std::find的并发版本

在C中&#xff0c;std::find 是一个用于顺序查找容器中特定元素的算法。为了提高性能&#xff0c;我们可以设计并实现一个并行版本的 std::find&#xff0c;以便在多核处理器上并行执行查找操作。基本思想是将容器中的元素划分为若干块&#xff0c;每个块由一个单独的线程处理&…

批量清理docker 容器日志

在日常开发过程中docker容器可能会有很大的日志占用空间&#xff0c;尝尝需要定期清理。下面提供查看容器日志大小和清理日志的一种解决方式 效果图 查看容器日志 bash docker_log_size.sh清理日志 bash docker_clean_logs.sh脚本 docker_log_size.sh #!/bin/bash# 获取所…

idea本地jar包添加到项目的maven库 mvn install:install-file

背景 最近在开发项目中需要对接海康威视摄像头&#xff0c;进行视频、照片等数据的获取保存&#xff1b;海康提供的sdk的jar包是自己开发的&#xff0c;在maven库中是找不到的&#xff0c;在项目中需要手动指定jar包路径 <dependency><groupId>com.haikang</g…

蓝桥杯刷题第二天——背包问题

题目描述 有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是Vi价值是Wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&#xff0c;N&#xff0c;V&am…