FPGA奇数和偶数分频器和半整…

2024-02-14 03:58

本文主要是介绍FPGA奇数和偶数分频器和半整…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:FPGA奇数和偶数分频器和半整数及任意小数分频器设计(Verilog程序) 作者:SUN_403

Author:

---Engineer Lhrace

 

1、半整数分频占空比不为50%

//说明:设计的史上最好用的半整数分频占空比不为50%,包含设计思路

module div_5(clk,clk_div,cnt1,cnt2,temp1,temp2);//N+0.5

input clk;

output clk_div;

output reg[31:0]cnt1,cnt2;

output reg temp1,temp2;

initial begin temp1=0;temp2=1;end   //首先进行初始化,temp1=0;temp2=1

parameter N=5;  //设定分频系数为N+0.5

always @(posedge clk)  //temp1上升沿跳变

begin

if(cnt1==2*N)  //2*N

begin cnt1[31:0]<=32'd0;end

else begin cnt1[31:0]<=cnt1[31:0]+32'd1;end

if(cnt1==32'd0) begin temp1<=1;end   //高电平时间为N+1;

if(cnt1==N+1) begin temp1<=0;end   //低电平时间为N;

end

always@(negedge clk)  //temp2下降沿跳变

begin

if(cnt2==2*N)  //2*N

begin cnt2[31:0]<=32'd0;end

else begin cnt2[31:0]<=cnt2[31:0]+32'd1;end

if(cnt2==32'd0) begin temp2<=0;end     //低电平时间为N;

if(cnt2==N) begin temp2<=1;end    //高电平时间为N+1;

end

assign clk_div=temp1&&temp2;  //逻辑与

endmodule

//如果要进行N+0.5分频

//思路:总的来说要进行N+1+N=2N+1次分频

//在时钟的上升沿和下降沿都进行跳变

//上升沿进行占空比为N+1比N的时钟temp1;

//下降沿进行占空比为N比N+1的时钟temp2;

//最后div=temp1&&temp2 即可得到所需要的半整数分频

分频5.5仿真结果

[转载]FPGA奇数和偶数分频器和半整数及任意小数分频器设计(Verilog程序)

2、奇数分频占空比为50%

//说明:奇数分频。

module div_5(clk,clk_div,cnt1,cnt2,temp1,temp2);//

input clk;

output clk_div;

output reg[31:0]cnt1,cnt2;

output reg temp1,temp2;

parameter N=5;  //设定分频系数

always @(posedge clk)

begin

if(cnt1==N-1)  //N-1进行N计数

begin cnt1[31:0]<=32'd0;end

else begin cnt1[31:0]<=cnt1[31:0]+32'd1;end

if(cnt1==32'd0) begin temp1<=1;end   //

if(cnt1==(N-1)/2) begin temp1<=0;end   //当计数到(N-1)/2时翻转

end

always@(negedge clk)

begin

if(cnt2==N-1)  //N-1

begin cnt2[31:0]<=32'd0;end

else begin cnt2[31:0]<=cnt2[31:0]+32'd1;end

if(cnt2==32'd0) begin temp2<=1;end     //;

if(cnt2==(N-1)/2) begin temp2<=0;end    //当计数到(N-1)/2时翻转;

end

assign clk_div=temp1||temp2;  //逻辑或

endmodule

 [转载]FPGA奇数和偶数分频器和半整数及任意小数分频器设计(Verilog程序)

 

2任意小数分频    

Module xiao_fenpin(clk,divclk);//占空比为50%任意小数分频

input clk;

reg clkout;

reg delete;

parameter k=10;

reg [k-1:0]p;

parameter M=13;// clk输入的频率,

parameter N=11;//需要得到的频率

//假如是13Mhz,要生成一个11M的频率 //占空比为50%//M时钟分频等到N频率的方法。

 always@(posedge clk)

begin

if(p>=M)begin p[k-1:0]<=p[k-1:0]-M+N;delete<=1'b0;end

if(p<=p[k-1:0]+N;end

if(N<=p&&p<=1'b1;end

end

always@(delete)//删除脉冲,相当于合并脉冲

begin

if(delete==1)

clkout<=1;

else

clkout<=clk;

end

reg cnb;

wire cnc;

output divclk;

assign cnc=cnb&&clk;

assign divclk=!cnc&&clkout;

always @(posedge clk)

begin

if(delete==1)

cnb<=1;

else cnb<=0;

end

endmodule

//

//output reg [5:0]cnt1,cnt2;  //cnt1,cnt2用于验证脉冲是否准确

//always @(posedge clk)

//begin

//if(cnt1==M-1)

//cnt1<=0;

//else cnt1<=cnt1+1;

//end

//always @(posedge clkout)

//begin

//if(cnt2==N-1)

//cnt2<=0;

//else cnt2<=cnt2+1;

//end

//endmodule

 

 

 

 

 

 

 

 

 

 

 

这篇关于FPGA奇数和偶数分频器和半整…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/707438

相关文章

FPGA编译与部署方法全方位介绍

FPGA编译与部署是FPGA开发中的核心环节,涉及从代码编写、调试到将设计部署到FPGA硬件的全过程。这个流程需要经过创建项目、编写FPGA VI、模拟调试、编译生成比特流文件,最后将设计部署到硬件上运行。编译的特点在于并行执行能力、定制化硬件实现以及复杂的时钟管理。通过LabVIEW的FPGA模块和NI硬件,可以快速完成开发和部署,尤其适用于复杂控制与高性能数据处理系统。 1. FPG

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

FPGA开发:模块 × 实例化

模块的结构 对于C语言,其基本单元为函数。与此类似,Verilog的基本设计单元称之为"模块"(block)。对于整个项目的设计思想就是模块套模块。 一个模块由两个部分组成:一部分描述接口,一部分描述逻辑功能。 每个Verilog模块包含4个部分:端口定义、IO说明、内部信号声明、功能定义。且位于module和endmodule之间,如下: module block(a,b,c);inpu

LabVIEW环境中等待FPGA模块初始化完成

这个程序使用的是LabVIEW环境中的FPGA模块和I/O模块初始化功能,主要实现等待FAM(Field-Programmable Gate Array Module,FPGA模块)的初始化完成,并处理初始化过程中的错误。让我们逐步分析各部分的功能: 1. Wait for FAM Initialization框架 此程序框架用于等待I/O模块成功初始化。如果在5秒钟内模块没有完成配

FPGA随记——小说 可综合和不可综合

当然我在网络上找到了些可综合和不可综合的解释 感觉也很有参考价值: https://wenda.so.com/q/1378362174074040 综合就是把你写的rtl代码转换成对应的实际电路。 比如你写代码assign a=b&c; EDA综合工具就会去元件库里拿一个二输入与门出来,然后输入端分别接上b和c,输出端接上a 假如你写了很多这样的语句 assign a=b&c; assig

Xilinx系FPGA学习笔记(五)ROM的IP核学习

系列文章目录 文章目录 系列文章目录前言ROM IP分布式ROM生成ROM配置创建COE文件 块ROM生成如何快速生成Example Design 两种ROM对比 前言 最近在学习小梅哥的xilinx型FPGA开发板,一边学习一边记录,简化整理一下笔记 ROM IP 在 Memories &Storage Elements 下可以看到有两个与 ROM 相关的

基于FPGA的开源项目:FOC/SHA/USB/JPEG等

文章目录 [1. USB 1.1控制器](https://github.com/WangXuan95/FPGA-USB-Device)[2. FOC控制算法](https://github.com/WangXuan95/FPGA-FOC)[3. BSV高级硬件描述语言入门指南](https://github.com/WangXuan95/BSV_Tutorial_cn)[4. 基于XDMA的

LCD彩条显示——FPGA学习笔记10

部分素材来自原子哥 一、LCD简介         基本原理:在两块平行玻璃板中填充液晶材料,通过电场控制液晶分子旋转从而达到透光和遮光的目的。

LabVIEW开发FPGA方法与FIFO数据丢失处理

开发基于NI 7975R FPGA的系统涉及一系列流程,包括驱动安装、LabVIEW项目设置、开发调试、编译和与Windows系统的通信。重点在于FIFO的正确配置,避免数据丢失是关键环节之一,尤其是在使用高速数据流传输时。以下将详细介绍这些过程,并重点讨论FIFO数据丢失的原因与解决方案。 FPGA开发流程 驱动安装与工具准备:开发FPGA需要安装LabVIEW FPGA模块以及N

js算法题,给任意一个偶数,找出他的所有的质数因子

/*给任意一个偶数,找出他的所有的质数因子*/ function primeFactor(n){     var factors=[],            divistor=2;     if(typeof n !=='number'||!Number.isInteger(n)){          return 0;     }; //如果不是偶数返回0,如果是0,返回0