第一次编程测试(分频器)

一,分频器

  1. 定义
    分频器(Divider)是一种电子电路或设备,用于将输入信号的频率降低到较低的频率。它常用于数字系统、通信系统和计时应用中。
  2. 原理
    整数分频器使用计数器来实现频率的降低。计数器根据输入信号的边沿触发进行计数,当计数值达到预设的分频比时,输出一个脉冲,并将计数器清零重新开始计数。例如,一个2分频器会在每两个输入信号边沿之间输出一个脉冲,将输入信号的频率降低为一半。
  3. verilog代码实现
    在这里所了解的分频器主要是整数分频器,其主要的实现分为奇数分频和偶数分频:
    1.偶数分频:即在每个时钟上升沿使计数器+1,当计数器小于N/2-1时使得输出时钟为低,当大于等于N/2-1小于N-1时使输出时钟为高
    2.奇数分频:奇数分频的方法有许多种这种展示一下我所理解的跟同学所理解的方法
    (1)如果想要计数分频但是寄存器不可以计数分数所以我们可以使用两个中间输出时钟
    一个对上升沿敏感。一个对下降沿敏感,分别计数,当分得的时钟高电平比低电平多一个周期时将两个中间时钟相与(即低电平向高电平借用0.5周期),当分得的时钟低电平比高电平多一个周期时将两个中间时钟相或(即高电平向低电平借用0.5周期)
//第一种方法
module pre_N #(parameter N = 8) (input       wire        clk,    //系统时钟input       wire        rst_n,  //系统复位output      wire        clk_out //调频后信号
);reg     clk_out_r;//调频后的时钟
wire    add_cnt;//计数开始使能
wire    end_cnt;//计数结束使能
wire    add_cnt1;//判断奇偶
reg     [5:0] cnt;//计数寄存器
reg     clk_out_a;
reg     clk_out_b;
reg     [5:0] cnt_a;
reg     [5:0] cnt_b;
wire     clk_out_ab;assign add_cnt1 = (N%2==0)?1:0;
//计数模块
always @(posedge clk or negedge rst_n) beginif (!rst_n) begincnt <= 6'b0;endelse if (add_cnt) beginif (end_cnt) begincnt <= 6'b0;endelse begincnt <= cnt + 1'b1;endendelse begincnt <= cnt;end
endassign add_cnt = 1;
assign end_cnt = add_cnt&&(cnt == N/2-1);//时钟分频模块
always @(posedge clk or negedge rst_n) beginif (!rst_n) beginclk_out_r <= 1'b0;endelse if (end_cnt) beginclk_out_r <= ~clk_out_r;endelse beginclk_out_r <= clk_out_r;end
end//上升沿分频模块
always @(posedge clk or negedge rst_n) beginif (!rst_n) beginclk_out_a <= 1'b0;cnt_a <= 1'b0;endelse beginif (cnt_a <N-1) beginif (cnt_a < (N-1)/2) beginclk_out_a <= 1'b0;endelse if (cnt_a >=(N-1)/2) beginclk_out_a <= 1'b1;endelse beginclk_out_a <= clk_out_a;endcnt_a <= cnt_a + 1;endelse beginclk_out_a <= 1'b0;cnt_a <= 1'b0;endend
endalways @(negedge clk or negedge rst_n) beginif (!rst_n) beginclk_out_b <= 1'b0;cnt_b <= 1'b0;endelse beginif (cnt_b <N-1) beginif (cnt_b < (N-1)/2) beginclk_out_b <= 1'b0;endelse if (cnt_b >=(N-1)/2) beginclk_out_b <= 1'b1;endelse beginclk_out_b <= clk_out_b;endcnt_b <= cnt_b + 1;endelse beginclk_out_b <= 1'b0;cnt_b <= 1'b0;endend
end
assign clk_out_ab = clk_out_a|clk_out_b;
assign clk_out = (N%2==0)?clk_out_r:clk_out_ab;
endmodule

(2)使用组合逻辑对电频敏感,每次电频转换都使计数器+1,当计数器加到N-1时使输出电频翻转

module pre_N_2 #(parameter N = 7)(input   wire        clk     ,input   wire        rst_n   ,output  wire        clk_out        
);reg			[5:0]	cnt	   	;
wire				add_cnt	;
wire				end_cnt	;
reg                clk_out_r;always @(clk)begin //对于上升沿下降沿都进行计数if(!rst_n)begincnt <= 'd0;end else if(add_cnt)begin if(end_cnt)begin cnt <= 'd0;endelse begin cnt <= cnt + 1'b1;end end
end assign add_cnt = 1;
assign end_cnt = add_cnt && cnt == N-1;always @(clk)begin if(!rst_n)beginclk_out_r <= 'd0;end else if(end_cnt)begin clk_out_r <= ~clk_out_r;//计满翻转end else begin clk_out_r <= clk_out_r;//未计满保持end 
endassign clk_out = clk_out_r;
endmodule
  1. tb文件
`timescale 1ns/1nsmodule pre_N_tb ();reg clk;
reg rst_n;
wire    clk_out;parameter CYCLE = 20;
parameter N     = 5;always #(CYCLE/2) clk = ~clk;initial beginclk = 1'b0;rst_n = 1'b0;#(20)rst_n = 1'b1;#(1000)$stop;
endpre_N #(.N(N)) pre_N_inst(.clk        (clk),.rst_n      (rst_n),.clk_out    (clk_out)
);
endmodule
`timescale 1ns/1nsmodule pre_N_2_tb ();reg clk;
reg rst_n;
wire    clk_out;parameter CYCLE = 20;
parameter N     = 5;always #(CYCLE/2) clk = ~clk;initial beginclk = 1'b0;rst_n = 1'b0;#(20)rst_n = 1'b1;#(1000)$stop;
endpre_N_2 #(.N(N)) pre_N_2_inst(.clk        (clk),.rst_n      (rst_n),.clk_out    (clk_out)
);
endmodule
  1. 仿真波形
    在此只展示一个
    在这里插入图片描述

二.总结

对于分频器主要需要注意的是整数分频有奇数分频跟偶数分频,分频器主要是对时序逻辑电路中时钟理解的考察,其中的难点主要是奇数分频,只要掌握其中的方法还是比较好做,只要掌握时序逻辑电路的时钟信号的理解分频器还是很简单得。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis学习笔记教程

Mybatis-9.28 环境&#xff1a; JDK1.8Mysql 5.7maven 3.6.1IDEA 回顾&#xff1a; JDBCMysqlJava基础MavenJunit SSM框架&#xff1a;配置文件的。 最好的方式&#xff1a;看官网文档&#xff1b; 1、简介 1.1、什么是Mybatis MyBatis 是一款优秀的持久层框架它支持定制…

基于Vue+Element Plus实现表格组件

目录 前言分析实现例子效果图前言 表格对于管理类项目是很重要的,可以只管的展示和比比较数据。使用Element Plus能解决一部分问题,但是还存在一些缺点和不足。 分析 浏览器上表格数据展示空间不足。列显示太多不够直观。完全依赖官方表格组件代码过于臃肿不利于管理和优化…

通过VIOOVI,了解联合作业分析的意义和目标!

现如今企业的主流生产模式就是流水线生产&#xff0c;一道工序结束后&#xff0c;紧接着开展下一项工序&#xff0c;这种作业模式可以以一种比较高效的方式缩减生产时间。尽管流水作业的效率已经够高的了&#xff0c;但是各个工序之间如果衔接不到位的话&#xff0c;会造成生产…

K8S初级入门系列之九-共享存储

一、前言 Pod里面的容器都有自己独立的文件系统&#xff0c;来自容器镜像&#xff0c;用于保存容器运行的数据&#xff0c;但容器的文件存储有两个弊端&#xff0c;一个是无法持久化&#xff0c;其生命周期与容器一致&#xff0c;一旦容器销毁&#xff0c;相关的数据也就随之一…

Hive内部表和外部表

表类型详解 表分类 在Hive中,表类型主要分为两种 第一种&#xff1a;内部表 也叫管理表表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中。默认创建的表就是内部表 第二种&#xff1a;外部表 外部表需要使用关键字"external"&#xff…

SpringBoot第8讲:SpringBoot添加Logback日志

SpringBoot第8讲&#xff1a;SpringBoot添加Logback日志 本文是SpringBoot第8讲&#xff0c;对SpringBoot添加Logback日志。SpringBoot开发中如何选用日志框架呢&#xff1f; 出于性能等原因&#xff0c;Logback 目前是springboot应用日志的标配&#xff1b; 当然有时候在生产环…

264. 丑数 II

题目描述&#xff1a; 主要思路&#xff1a; 利用动态规划的思想&#xff0c;记录2 3 5分别乘到了哪里&#xff0c;然后取最小作为新的数字。 class Solution { public:int nthUglyNumber(int n) {int dp[n1];dp[1]1;int p21,p31,p51;for(int i2;i<n;i){int num2 dp[p2]*…

说一说java中的自定义注解之设计及实现

一、需求背景 比如我们需要对系统的部分接口进行token验证&#xff0c;防止对外的接口裸奔。所以&#xff0c;在调用这类接口前&#xff0c;先校验token的合法性&#xff0c;进而得到登录用户的userId/role/authority/tenantId等信息&#xff1b;再进一步对比当前用户是否有权…

【ESP32】Espressif-IDE及ESP-IDF安装

一、下载Espressif-IDE 2.10.0 with ESP-IDF v5.0.2 1.打开ESP-IDF 编程指南 2.点击快速入门–>安装–>手动安装–>Windows Installer–>Windows Installer Download 3.点击下载Espressif-IDE 2.10.0 with ESP-IDF v5.0.2 二、安装Espressif-IDE 2.10.0 wit…

分布式I/O,IT和OT融合少不了它

长期以来信息技术IT和操作运营技术OT是相互隔离的&#xff0c;随着大数据分析和边缘计算业务的对现场级实时数据的采集需求&#xff0c;IT和OT有了逐渐融合的趋势。IT与OT融合&#xff0c;它赋予工厂的管理者监控运行和过程的能力大为增强&#xff0c;甚至可以预测到可能发生的…

TypeScript -- 类

文章目录 TypeScript -- 类TS -- 类的概念创建一个简单的ts类继承 public / private / protected-- 公共/私有/受保护的public -- 公共private -- 私有的protected -- 受保护的 其他特性readonly -- 只读属性静态属性 -- static修饰ts的getter /setter抽象类abstract TypeScrip…

KnowStreaming系列教程第三篇——调度任务模块

前一篇文章KnowStreaming系列教程第二篇——项目整体架构分析_诸葛子房_的博客-CSDN博客 讲述了KS的整体项目目录&#xff0c;这边文章来讲述下KS在调度模块里面对于指标采集和元数据同步 一、调度模块代码主要在km-task里面 public class TaskClusterAddedListener impleme…

mybatisPlus入门篇

文章目录 初窥门径1.1 初识MybatisPlus1.2 MybatisPlus的特性1.3 MybatisPlus的架构模型 入门案例2.1 准备相关开发环境2.2 搭建springboot工程2.3 创建数据库2.4 引入相关依赖2.5 创建实体类2.6 集成MybatisPlus2.7 单元测试2.8 springboot日志优化 初窥门径 1.1 初识Mybatis…

ChatGPT把python 的import和from讲明白了

文章目录 1、import&#xff1a;import关键字用于导入整个模块&#xff0c;您可以使用该模块中的所有对象。语法如下&#xff1a;2、from ... import ...&#xff1a;from ... import ... 语法用于从模块中导入特定的对象&#xff0c;而不是导入整个模块。您可以通过这种方式选…

基于Web的智慧景区GIS三维可视化运营系统

随着人民生活水平的提高和旅游产品的丰富多样&#xff0c;我国人民对于旅游的需求逐渐从“走过场”转变为“品质体验”。 建设背景 随着互联网、大数据、人工智能等新技术在旅游领域的应用&#xff0c;以数字化、网络化、智能化为特征的智慧旅游成为旅游业高质量发展新动能。…

【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块11

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Django模板语法和请求

1、在django关于模板文件加载顺序 创建的django项目下会有一个seeetings.py的文件 如果在seeetings.py 中加了 os.path.join(BASE_DIR,‘templates’)&#xff0c;如果是pycharm创建的django项目会加上&#xff0c;就会默认先去根目录找templates目录下的html文件&#xff0c…

安全学习DAY06_抓包技术-HTTPHTTPS

抓包技术-HTTP&HTTPS HTTP&HTTPS抓包针对Web&APP&小程序&PC应用等 本节目的&#xff1a; 掌握几种抓包工具证书安装操作掌握几种HTTP&HTTPS抓包工具的使用学会Web&#xff0c;APP&#xff0c;小程序&#xff0c;PC应用等抓包了解本节课抓包是针对哪些…

EAP设备自动化控制系统在设备数采和控制方面的优势

随着科技的不断进步和工业自动化的发展&#xff0c;EAP&#xff08;Equipment Automation Program&#xff09;设备自动化控制系统在各个行业中扮演着越来越重要的角色。作为连接MES&#xff08;Manufacturing Execution System&#xff09;和设备层的沟通桥梁&#xff0c;EAP系…

Chatgpt Web API 创建对话,免费,不计token数量,模仿网页提交对话

Chatgpt API 是收费的&#xff0c;按token使用量计费 Chatgpt Web API 免费的&#xff0c;只要有账号就可以使用。 curl https://chat.openai.com/backend-api/conversation \-H authority: chat.openai.com \-H accept: text/event-stream \-H accept-language: zh-CN,zh;q…