1.实验目的:

  • (1)熟悉和掌握FPGA开发流程;
  • (2)通过实验理解和掌握分频器原理;
  • (3)学习用Verilog HDL行为级描述时序逻辑电路。

2.实现功能:

设计一个任意整数分频器。

3.实验原理

  • 一般在FPGA中都有集成的锁相环可以实现各种时钟的分频和倍频设计

  • 但是通过语言设计进行时钟分频是最基本的训练,在对时钟要求不高的设计时也能节省锁相环资源

  • 在本实验中我们将实现任意整数的分频器,分频的时钟保持50%占空比

  • 1.偶数分频: 偶数倍分频相对简单,比较容易理解。通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么通过时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,以此循环下去。

  • 2.奇数分频: (如果要实现占空比为50%的奇数倍分频,不能同偶数分频一样计数器记到一半的时候输出时钟翻转,那样得不到占空比50%的时钟。以待分频时钟CLK为例,如果以偶数分频的方法来做奇数分频,在CLK上升沿触发,将得到不是50%占空比的一个时钟信号(正周期比负周期多一个时钟或者少一个时钟);但是如果在CLK下降沿也触发,又得到另外一个不是50%占空比的时钟信号)
    上升沿触发的分频时钟和下降沿触发的分频时钟的相位正好相差半个CLK时钟周期,通过这两个时钟信号进行逻辑运算我们可以巧妙的得到50%占空比的时钟。

4.Verilog Hdl的建模设计

module devide #
(
parameter WIDTH = 24,       //计数器的位数,计数的最大值为2**(WIDTH-1)
parameter N = 12_000_000   //分频系数
)
(
input clk,                      //clk连接到FPGA的C1脚,频率为12MHz
input rst_n,                    //复位信号,低有效
output clkout                   //时钟输出信号
);reg [WIDTH-1:0] cnt_p,cnt_n;//cnt_p为上升沿触发时的计数器,cnt_n为下降沿触发时的计数器
reg clk_p,clk_n;                //clk_p为上升沿触发时分频时钟,clk_n为下降沿触发时分频时钟/**********上升沿触发部分**************************************/
//上升沿触发时计数器的控制
always @(posedge clk or negedge rst_n) //posedge和negedge是verilog表示信号上升沿和下降沿begin               //当clk上升沿来临或者rst_n变低的时候执行一次always里的语句if(!rst_n)     //如果复位键按下了cnt_p<=1'b0;else if(cnt_p == (N-1))cnt_p <= 1'b0;elsecnt_p <= cnt_p + 1'b1;     //计数器一直计数,当计数到N-1的时候清零,这是一个模N的计数器end//上升沿触发的分频时钟输出,如果N为奇数得到的时钟占空比不是50%;如果N为偶数得到的时钟占空比为50%
always @(posedge clk or negedge rst_n)beginif(!rst_n)clk_p <= 1'b0;else if(cnt_p < (N>>1))           //N>>1表示右移一位,相当于除以2取商clk_p <= 1'b0;elseclk_p <= 1'b1;        //得到的分频时钟正周期比负周期多一个clk时钟end/*****************下降沿触发部分**************************************/
//下降沿触发时计数器的控制
always @(negedge clk or negedge rst_n)beginif(!rst_n)cnt_n <= 1'b0;else if(cnt_n == (N-1))cnt_n <= 1'b0;elsecnt_n <= cnt_n + 1'b1;end//下降沿触发的分频时钟输出,和clk_p相差半个clk时钟
always @(negedge clk or negedge rst_n)beginif(!rst_n)clk_n <= 1'b0;else if(cnt_n < (N>>1))clk_n <= 1'b0;elseclk_n <= 1'b1; //得到的分频时钟正周期比负周期多一个clk时钟end/*************************************************************************/
wire    clk1 = clk;                //当N=1时,直接输出clk
wire    clk2 = clk_p;          //当N为偶数也就是N的最低位为0,N[0]=0,输出clk_p
wire    clk3 = clk_p & clk_n;  //当N为奇数也就是N最低位为1,N[0]=1,输出clk_p&clk_n。正周期多所以是相与assign clkout = (N==1)? clk1:(N[0]? clk3:clk2);    //条件判断表达式
endmodule

Verilog学习:常用模块——分频器的使用相关推荐

  1. Python学习 - 常用模块(二)

    目录 一. 常用模块 - hashlib 二. 常用模块 - hmac 三. 常用模块 - logging 四. 常用模块 - re 五. 常用模块 - requests 六. 常用模块 - para ...

  2. Xilinx 常用模块汇总(verilog)【03】

    作者:桂. 时间:2018-05-10  2018-05-10  21:03:44 链接:http://www.cnblogs.com/xingshansi/p/9021919.html 前言 主要记 ...

  3. numpy 矩阵乘法_一起学习Python常用模块——numpy

    关注微信公众号:一个数据人的自留地 作者介绍 知乎@王多鱼 百度的一名推荐算法攻城狮. 主要负责商品推荐的召回和排序模型的优化工作. 1 前言 Python在数据科学.机器学习.AI领等域中占据主导地 ...

  4. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  5. Verilog学习笔记-——Verilog模块例化

    Verilog学习笔记---Verilog模块例化 在一个模块中引用另一个模块,对其端口进行相关连接,叫做模块例化.模块例化建立了描述的层次.信号端口可以通过位置或名称关联,端口连接也必须遵循一些规则 ...

  6. Python学习记录day6-反射、常用模块

    Python学习记录day6-反射.常用模块 @(学习)[python] Python学习记录day6-反射常用模块 反射 常用模块 1 sys System-specific parameters ...

  7. Ansible 学习总结(3)—— Ansible 常用模块与 playbook 实例讲解

    一.Ansible 安装 下载安装并解压 python 3.7 包 安装 wget yum -y install wget 下载 python 文件 wget https://www.python.o ...

  8. Python学习(十四)——常用模块1

    常用模块 sys os time random json 标准库 sys system的简写,系统的意思. 导包:import sys sys.modules # 获取当前程序中引入的所有模块 # m ...

  9. 8分频verilog线_Verilog设计分频器(面试必看)

    分频器是指使输出信号频率为输入信号频率整数分之一的电子电路.在许多电子设备中如电子钟.频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种 ...

最新文章

  1. linux/unix inode的一个面试问题及一些概念
  2. 基于MATLAB的TDOA算法的仿真
  3. java 多线程下载器_Java多线程的下载器(1)
  4. python 第三课 第一个python程序
  5. 微信小程序正确的异步request请求,根据经纬度获取地理位置信息
  6. java连接cdh集群_有一台电脑需要通过beeline的方式连接到CDHclouderahadoop集群,提示报错。...
  7. TensorFlow实现流行的机器学习算法教程
  8. SQL面试题(1-10)oracle写的
  9. svn ignore 命令行用法
  10. Spring Cloud入门五 hystrix
  11. vs2019,C#,MySQL创建图书管理系统7(用户借/还书)
  12. C++基础面试问题总结
  13. STM32F103C8T6基础开发教程(HAL库)—开发环境配置
  14. 从200K/s到2M/s,只差这篇文章——使用ProxyeeDown加速百度云盘下载速度
  15. 批量修正字幕乱码(powershell)
  16. 社交瓶颈下,为何巨头都选择用“眼镜”做平台?
  17. 共模电感适用的频率_共模电感磁芯的选择决定其性能和应用场景——原文转自金昊德官网...
  18. 实用前端标注图片剪裁工具-AILabel.js
  19. 数据建模和数据库设计
  20. 深入理解计算机系统CSAPP复习

热门文章

  1. iTextRenderer(Flying Saucer) HTML转PDF
  2. 伊朗第二大航空公司内部系统遭到网络攻击
  3. 嵌入式软件开发面试题总结四
  4. 解决chrome浏览器中鼠标滚轮滚动事件失效的问题
  5. 六顶思考帽帮你职场突围
  6. Lucene 索引文件的读取(十四)之fdxfdtfdm
  7. 秋雨绸缪---又是一年入秋时
  8. python爬虫进阶-每日一学(字体反爬-移花接木)
  9. Windows XP 下如何播放蓝光ISO镜像?Windows XP UDF 2.5 补丁下载!
  10. java根据Stack栈实现公式解析和自定义函数(一)