FPGA经典例程2 偶数分频与奇数分频

2023-10-11 13:50

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

假设为 N(偶数)分频,只需计数到 N/2-1,然后时钟翻转、计数清零,如此循环就可以得到 N(偶)分频,可以通过改变参量 N 的值和计数变量 cnt 的位宽,实现任意偶分频, 我们由此可以写出如下代码:

module Even_division 
(	input sysclk_i,input rst_n,output reg clk_o
);
parameter N = 8;
reg [N-1:0] cnt;
always @ (posedge sysclk_i or negedge rst_n) begin 
if (!rst_n) begin 
clk_o <= 1'b0;
cnt <= 0;
end
else begin if (cnt== N/2-1) begin clk_o <= ~ clk_o;cnt<=0;end
elsecnt<=cnt+1'b1;end
end
endmodule

testbench代码:

module tb_Even_division 
();
reg sysclk_i;
reg rst_n;
wire clk_o;always #10 sysclk_i = ~ sysclk_i;
initial begin sysclk_i <= 0;rst_n <= 1'b0;#100 rst_n <= 1'b1;
end
Even_division u_Even_division
(.sysclk_i (sysclk_i),
.rst_n (rst_n),
.clk_o (clk_o)
);endmodule

波形:
在这里插入图片描述

奇数分频代码:

module odd_division(input sysclk,input rst_n,output clk_out);
parameter N = 5;
reg [N/2:0] cnt1;
reg [N/2:0] cnt2;
reg clk_o1,clk_o2;
always @(posedge sysclk or negedge rst_n) begin if (!rst_n) beginclk_o1 <= 0;cnt1 <= 1;endelse begin if (clk_o1 == 0) begin if (cnt1==N/2+1) begin clk_o1 <= ~clk_o1;cnt1 <= 1;endelse cnt1 <= cnt1 + 1'b1;endelse if (clk_o1==1) begin if (cnt1==N/2) begin clk_o1 <= ~clk_o1;cnt1 <= 1;endelse cnt1 <= cnt1 +1;endend
end
always @(negedge sysclk or negedge rst_n) begin if (!rst_n) beginclk_o2 <= 0;cnt2 <= 1;endelse if (clk_o2 == 0) beginif (cnt2==N/2+1) begin clk_o2 <= ~clk_o2;cnt2 <= 1;endelse cnt2 <= cnt2 +1;endelse if (clk_o2 == 1) begin if (cnt2==N/2) beginclk_o2 <= ~clk_o2;cnt2 <=1;endelse cnt2 <= cnt2 +1;end
end	assign clk_out = clk_o1 | clk_o2;	
endmodule

testbench :

`timescale 1ns / 1ps
module tb1;// Inputsreg sysclk;reg rst_n;// Outputswire clk_out;// Instantiate the Unit Under Test (UUT)odd_division uut (.sysclk(sysclk), .rst_n(rst_n), .clk_out(clk_out));
always #10 sysclk <= !sysclk;initial begin// Initialize Inputssysclk = 0;rst_n = 0;// Wait 100 ns for global reset to finish#100;rst_n = 1;      // Add stimulus hereendendmodule

仿真:
在这里插入图片描述

这篇关于FPGA经典例程2 偶数分频与奇数分频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

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

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

Java的ArrayDeque使用例程

题目要求为: 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证的时候,我们需要计算3、5、8、4、2、1,则当我们对n=5、8、4、2进行验证的时候,就可以直接

接口自动化三大经典难题

目录 一、接口项目不生成token怎么解决关联问题 1. Session机制 2. 基于IP或设备ID的绑定 3. 使用OAuth或第三方认证 4. 利用隐式传递的参数 5. 基于时间戳的签名验证 二、接口测试中网络问题导致无法通过怎么办 1. 重试机制 2. 设置超时时间 3. 使用模拟数据 4. 网络问题的预检测 5. 日志记录与错误分析 6. 切换网络环境 7.