首页 > 其他分享 >FPGA实现分频器

FPGA实现分频器

时间:2023-11-25 09:44:30浏览次数:42  
标签:even 分频器 FPGA clk 实现 sys DIV PARAMETER reg

 1 `timescale 1ns/1ns
 2 
 3 module  fpq_tb();
 4 
 5 
 6 reg [0:0]  sys_clk;
 7 reg [0:0]  sys_rst_n;
 8 wire [0:0] clk_out;
 9 
10 initial begin
11           sys_clk=1'b0;
12           sys_rst_n=1'b0;
13           #50;
14           sys_rst_n=1;  
15           #500;
16           $stop;
17         end
18         
19         
20 always #10   sys_clk<=~sys_clk ;  
21 
22 
23  divider
24 #(
25 .DIV_PARAMETER(8'D7)
26 )
27 u_divider
28 (
29              .sys_clk    (sys_clk),
30              .sys_rst_n  (sys_rst_n),
31              .clk_out    (clk_out)
32 
33 );
34 
35 
36 
37 endmodule
 1 module  divider
 2 #(
 3 parameter[7:0] DIV_PARAMETER = 8'D2
 4 )
 5 (
 6              input  wire  [0:0] sys_clk ,
 7              input  wire  [0:0] sys_rst_n,
 8              output wire   [0:0] clk_out
 9 
10 );
11 
12 localparam [7:0] DIV_MAX_ODD =DIV_PARAMETER/2-8'd1 ;
13 localparam [7:0] DIV_EVEN =DIV_PARAMETER/2;
14 
15 reg [7:0] odd_cnt;
16 reg [7:0] even_cnt;
17 reg [0:0] clk_odd_out;
18 reg [0:0] clk_even_1;
19 reg [0:0] clk_even_2;
20 
21 
22 //对偶分频的时钟进行计数
23 always @(posedge sys_clk or negedge sys_rst_n )
24      begin
25         if(sys_rst_n==1'b0)
26             odd_cnt<=8'd0;
27         else if(odd_cnt>=DIV_MAX_ODD)
28             odd_cnt<=8'd0;
29         else 
30             odd_cnt<=odd_cnt+8'd1;       
31      end
32 //当偶分频的时钟计数到达分频系数的一半时,对偶分频时钟进行翻转
33 always @(posedge sys_clk or negedge sys_rst_n )
34      begin
35         if(sys_rst_n==1'b0)
36            clk_odd_out<=1'b0;
37         else if(odd_cnt>=DIV_MAX_ODD)
38            clk_odd_out<=~clk_odd_out;
39         else 
40             clk_odd_out<=clk_odd_out;       
41      end
42 //对奇分频的时钟进行计数到达分频系数减1时归零    
43 always @(posedge sys_clk or negedge sys_rst_n )
44      begin
45         if(sys_rst_n==1'b0)
46             even_cnt<=8'd0;
47         else if(even_cnt>=DIV_PARAMETER-8'd1)
48             even_cnt<=8'd0;
49         else 
50             even_cnt<=even_cnt+8'd1;       
51      end    
52 //在posedge sys_clk对奇分频的计数到达分频系数一半时clk_even_1拉高,当到达分频系数减1时clk_even_1拉低,其它时候不变   
53 always @(posedge sys_clk or negedge sys_rst_n )
54      begin
55         if(sys_rst_n==1'b0)
56             clk_even_1<=1'b0;
57         else if(even_cnt==DIV_EVEN)
58             clk_even_1<=1'b1;
59         else if(even_cnt>=DIV_PARAMETER-8'd1)   
60             clk_even_1<=1'b0;
61         else 
62              clk_even_1<=clk_even_1;    
63         
64      end
65 //在negedge sys_clk对奇分频的计数到达分频系数一半时clk_even_1拉高,当到达分频系数减1时clk_even_1拉低,其它时候不变      
66 always @(negedge sys_clk or negedge sys_rst_n )
67      begin
68         if(sys_rst_n==1'b0)
69             clk_even_2<=1'b0;
70         else if(even_cnt==DIV_EVEN)
71             clk_even_2<=1'b1;
72         else if(even_cnt>=DIV_PARAMETER-8'd1)   
73             clk_even_2<=1'b0;
74         else 
75              clk_even_2<=clk_even_2;    
76         
77      end   
78  
79 assign clk_out =(DIV_PARAMETER%2)? (clk_even_1|clk_even_2): clk_odd_out;    
80    
81 endmodule

 

 

 

 

标签:even,分频器,FPGA,clk,实现,sys,DIV,PARAMETER,reg
From: https://www.cnblogs.com/xgj-0817/p/17855206.html

相关文章

  • 使用Electron+Puppeteer实现万媒易发,一键发布原创文章到各大主流博客平台!
    使用Electron+Puppeteer实现万媒易发,一键发布原创文章到各大主流博客平台引言作为一名热衷于原创文章的程序员,我们常常面临的问题是如何高效地将精彩的内容分享到各大主流博客平台,以扩大影响力。为了解决这一难题,我开发了一款名为“万媒易发”的多平台自动发布文章工具,通过Elect......
  • 20211128《信息安全系统设计与实现》第十三章学习笔记
    一、任务内容自学教材第13章,提交学习笔记(10分)1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:“请你以苏格......
  • 2023-2024-1 20211306 密码系统设计与实现课程学习笔记11
    20211306密码系统设计与实现课程学习笔记11任务详情自学教材第13章,提交学习笔记知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个......
  • 基于微信小程序的酒店管理系统设计与实现(源码+lw+部署文档+讲解等)
    (文章目录)详细视频演示请联系我获取更详细的演示视频具体实现截图[外链图片转存中...(img-Lkna8qpn-1700727246356)]技术栈后端框架SpringBootSpringBoot内置了Tomcat、Jetty和Undertow等服务器,这意味着你可以直接使用它们而不需要额外的安装和配置。SpringBoot的一......
  • Vue3实现九宫格抽奖效果
    需求与效果需求:1、礼品根据后台配置生成2、跑马灯转动效果3、结果后台生成并且每个礼物概率不一样(概率这里不讨论)注意点:1、布局如何排列,是按照跑动排列还是从左至右自上而下排列2、点击按钮如何插入,DOM结构如何生成3、跑马效果如何实现,速度如何控制4、接口如何处理,包括接......
  • redisson是如何实现锁自动续期的
    Redisson是一个在Redis的基础上实现的Java驻留对象和服务,同时也是一个具有许多功能的Java驻留对象和服务库。Redisson提供了很多分布式相关的服务,其中就包括分布式锁。Redisson的锁自动续期功能主要通过以下方式实现:锁的续期:当一个线程获取了Redisson的锁之后,默认......
  • Vue3实现转盘抽奖效果
    1、实现转盘数据动态配置(可通过接口获取)2、背景色通过分隔配置3、转动速度慢慢减速,最后停留在每一项的中间,下一次开始从本次开始4、当动画停止后在对应事件中自定义生成中奖提示。5、本次中奖概率随机生成,也可自定义配置实现代码html<template><divclass="graph-page">......
  • Java Web实现文件下载的几种方式
    文件下载可以说是网站的基础功能,要实现最下载功能,有一种最基本的方法,那就是将超链接的href属性指向对应的资源文件。如下面连接指向了百度首页的图片:​ ​I'mtheindexofBaidu​​但这种方式的缺陷也是很明显的,目录信息被获取,不利于信息安全。其实信息安全还是其次,主要还是......
  • 脚本自动化定制开发:实现高效工作的魔法钥匙
    在当今这个快节奏的工作环境中,自动化已成为提高工作效率的黄金标准。如果你是一名Windows用户,那么通过Windows脚本自动化,你可以将你的工作流程化繁为简,实现高效工作。而在众多Windows脚本自动化工具中,Python以其简洁易学的特点,逐渐成为了许多人的首选。一、Python与Windows脚本自......
  • pageoffice6 版本实现word 文件添加水印
    在很多场景下,Word文档正式发文之前,或者说形成最终文档之前,常常需要往Word文件中添加水印,并且会根据文件类型或内容的不同,需要添加的水印也不一样。添加水印是Word软件里的一个简单功能,直接点击Word工具栏中的水印按钮就可以手动添加,但是在Web项目开发过程中,时常会遇到通过调用程......