verilog 语言实现任意分频
1、偶分频
偶分频比较简单,假设为N分频,只需计数到N/2-1,然后时钟翻转、计数清零,如此循环就可以得到N(偶)分频。代码如下。
module fp_even(clk_in,rst_n,clk_out);
input clk_in;
input rst_n;
output clk_out;
reg [1:0] cnt;
reg clk_out;
parameter N=6;
always @ (posedge clk_in or negedge rst_n) begin
if(!rst_n) begin
cnt <= 0;
clk_out <= 0;
end
else begin
if(cnt==N/2-1) begin
clk_out <= !clk_out;
cnt<=0;
end
else
cnt <= cnt + 1;
end
end
endmodule
2 、奇分频
实现奇数(N)分频,分别用上升沿计数到(N-1)/2,再计数到N-1;用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频。代码如下:
module fp_odd(clk_in,rst_n,clk_out);
input clk_in,rst_n;
output clk_out;
reg [2:0] cnt_p,cnt_n;
reg clk_p,clk_n;
parameter N=7;
always @ (posedge clk_in or negedge rst_n) begin
if(!rst_n)
cnt_p <= 0;
else if(cnt_p==N-1)
cnt_p <=0;
else
cnt_p <= cnt_p + 1;
end
always @ (posedge clk_in or negedge rst_n) begin
if(!rst_n)
clk_p <= 0;
else if(cnt_p==(N-1)/2)
clk_p <= !clk_p;
else if(cnt_p==N-1)
clk_p <= !clk_p;
end
always @ (negedge clk_in or negedge rst_n) begin
if(!rst_n)
cnt_n <= 0;
else if(cnt_n==N-1)
cnt_n <=0;
else
cnt_n <= cnt_n + 1;
end
always @ (negedge clk_in or negedge rst_n) begin
if(!rst_n)
clk_n <= 0;
else if(cnt_n==(N-1)/2)
clk_n <= !clk_n;
else if(cnt_n==N-1)
clk_n <= !clk_n;
end
assign clk_out = clk_p | clk_n;
endmodule
3 、任意占空比的任意分频
在verilog程序设计中,我们往往要对一个频率进行任意分频,而且占空比也有一定的要求这样的话,对于程序有一定的要求,现在在前面两个实验的基础上做一个简单的总结,实现对一个频率的任意占空比的任意分频。
比如: FPGA系统时钟是50M Hz,而我们要产生的频率是880Hz,那么,我们需要对系统时钟进行分频。很容易想到用计数的方式来分频:50000000/880 = 56818。显然这个数字不是2的整幂次方,那么我们可以设定一个参数,让它到56818的时候重新计数就可以实现了。程序如下:
module div(clk, clk_div);
input clk;
output clk_div;
reg [15:0] counter;
always @(posedge clk)
if(counter==56817) counter <= 0;
else counter <= counter+1;
assign clk_div = counter[15];
endmodule
分频的应用很广泛,一般的做法是先用高频时钟计数,然后使用计数器的某一位输出作为工作时钟进行其他的逻辑设计,上面的程序就是一个体现。
下面我们来算一下它的占空比:我们清楚地知道,这个输出波形在counter为0到32767的时候为低,在32768到56817的时候为高,占空比为40%多一些,如果我们需要占空比为50%,那么我们需要再设定一个参数,使它为56817的一半,使达到它的时候波形翻转,就可以实现结果了。程序如下:
module div(clk, clk_div);
input clk;
output clk_div;
reg [14:0] counter;
always @(posedge clk)
if(counter==28408) counter <= 0;
else counter <= counter+1;
reg clk_div;
always @(posedge clk)
if(counter==28408) clk_div <= ~clk_div;
endmodule
继续让我们来看如何实现任意占空比,比如还是由50 M分频产生880Hz,而分频得到的信号的占空比为30%。
56818×30%=17045
module div(clk,reset,clk_div,counter);
input clk,reset;
output clk_div;
output [15:0] counter;
reg [15:0] counter;
reg clk_div;
always @(posedge clk)
if(!reset) counter <= 0;
else if(counter==56817) counter <= 0;
else counter <= counter+1;
always @(posedge clk)
if(!reset) clk_div <= 0;
else if(counter<17045) clk_div <= 1;
else clk_div <= 0;
endmodule
verilog 语言实现任意分频相关推荐
- Verilog实现之任意分频电路
一.行波时钟 任意分频电路,相信很多人都听说过这个专业名词,好多视频上都说不建议使用计数器产生的分频时钟.其实在FPGA领域当中,由寄存器分频产生的时钟还有一个学名叫做,行波时钟.是由时序逻辑产生比如 ...
- 对于Verilog语言的一些总结
1.不使用初始化语句: 2.不使用延时语句: 3.不使用循环次数不确定的语句,如:forever,while等: 4.尽量采用同步方式设计电路: 5.尽量采用行为语句完成设计: 6.always过程块 ...
- 为所欲为——教你什么才是真正的任意分频
转自http://www.cnblogs.com/crazybingo/archive/2011/07/26/2117162.html 一.为啥要说任意分频 也许FPGA中的第一个实验应该是分频实验, ...
- 怎么运行verilog语言_(六) Verilog入门之有限状态机
现在让我们回到主线,继续FPGA编程的学习.之前我们我们在测试FPGA是否工作时所用到的代码里面有组合逻辑,如加法器:也有时序逻辑,如将时钟信号分频而得到的闪烁灯. 但如何组合这两种逻辑实现我们所需的 ...
- Verilog语言实现并行(循环冗余码)CRC校验
1 前言 (1) 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能, ...
- Verilog语言与数字系统设计
学习Verilog语言必要的基础知识 计算机导论 数字逻辑或数字电路与逻辑设计 计算机科学概论 拓展学习: 计算机组成原理 计算机体系结构 学习视频链接: 基于FPGA的Verilog语法基础课程(至 ...
- FPGA分频电路实现(奇数,偶数,小数半分频,任意分频)
https://blog.csdn.net/weixin_43950612/article/details/104687942(简介明了,奇数,偶数,小数,任意分频) http://www.myexc ...
- Verilog语言要素(二)
1 Verilog语言要素 1.2 标识符-关键字-属性 1.2.1 标识符(Identifier) 规范原文如下: An identifier is used to give an object a ...
- Verilog语言- 和c语言的区别
1.Verilog基础 1.1 特别的数值种类 x 或 X:未知 z 或 Z:高阻 (Z 常见于信号(input, reg)没有驱动时的逻辑结果.例如一个 pad 的 input 呈现高阻状态时,其逻 ...
最新文章
- 因为WMI配置,无法执行Sql Server 系统配置检查器的解决办法
- Win64 驱动内核编程-16.WFP网络监控驱动(防火墙)
- .NET Core 2.1中改进的堆栈信息
- dotween曲线运动 unity_Unity3D DOTween动画插件详解
- MySQL 之 query cache
- ros 三线负载均衡
- HFSS天线设计过程学习笔记
- lammps教程:EAM势函数设置详解
- dede-采集替换关键词为空
- id导出pdf失败_indesign导出pdf失败怎么办
- 支付宝当面付(统一收单线下交易预创建,二维码扫码支付)
- win10中安装centos7双系统
- 青苹果linux版本客户端,青苹果影院新版本
- Xcode 8.0 Beta发布,详解Swift语言的重大变化
- 蓝湖--UI切图软件,适用于ios,安卓,Web
- MINI-UI V3.0 开发框架 非常容易上手
- 利用R语言对贷款客户作风险评估
- android控制创维电视,创维电视怎么连接手机 创维电视连接手机的方法【详细介绍】...
- 头脑风暴法利用计算机让大家进行思想交流,个人与团队管理期末复习
- 02 创建一个简单的Python Web程序应用
热门文章
- 中国视频点播vod系统 v4.2 build 2002.09.21 是什么
- 不能将类型“Ref.......“分配给类型“(...args: any) => void”。
- java.lang.IllegalStateException: Error processing condition on com.alibaba.cloud.nacos.discovery.rea
- 机器学习实战三: 预测汽车油耗效率 MPG
- Live预告 | 地平线李星宇:智能汽车电子构架如何变革迎接数字化重塑?
- C语言实现选择排序——简单选择排序算法
- 生态农业示范园区物联网平台建设方案
- 快速构建智慧社区场景的一种技术方案
- RN终止所有节点进程并启动npm服务器命令
- 基于TC358870XBG的头戴式显示方案