数电实验6:可控分频器设计

这篇具有很好参考价值的文章主要介绍了数电实验6:可控分频器设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的

  1. 学习 ModelSim 仿真方法。
  2. 巩固 Verilog HDL 时序电路设计。

二、基本实验内容

  1. FPGA 开发板上有一个 50MHz 的高频时钟。设计一个可控分频器,clk_in 为分频器时钟输入, sel为选择开关, clk_out为分频器信号输出。当sel=0时,fclk_out=sn[2:0]Hz;当 sel=1 时, fclk_out=sn[4:0] Hz。
  2. clk_out 的占空比 D=28%;(D=tH/T, tH 为高电平时间, T 为周期)
  3. 说明。 sn 为学号, sn[2:0]表示取十进制学号的后 3 位, sn[4:0]表示取十进制学号的后 5 位,若学号后 3 位为 0 则学号后 5 位按 32768 取值。例如,学号 sn=2017112345,sn[2:0]=345; sn=2017100000, sn[2:0]=768.
  4. 实验测试
  5. 用导线将 clk_out 接入实验箱的 CH0 逻辑分析仪通道, 测试 clk_out 实际输出频率及占空比, 若与要求不相符(误差须小于 1‰), 修改电路程序使之符合要求。

三、提高性实验内容(选做)

  1. 增加占空比调节功能,每按一下“+”键,占空比增加 10%;每按一下“-”键,占空比减少 1%;
  2. 使输出信号的占空比按正弦波规律自动变化,正弦波频率为 300Hz;
  3. 其他

四、预习实验

  1. 写出设计思路。
  2. 由于 FPGA 只能进行整数计数来分频, 会存在除不尽的情况而只能四舍五入取整数,
    请根据实际分频系数计算因为取整导致的理论误差。
  3. 自学 ModelSim 仿真方法, 用 ModelSim 对实验电路进行仿真(需使用标尺功能测
    量输出信号频率/周期、占空比),并将仿真代码及仿真结果截图打印。
  4. 自行安排所用引脚, 列出引脚锁定分配表(信号名->主板器件名->引脚号)

五、实验报告要求

  1. 列出程序代码(有详细注释)。
  2. 列出通电测试结果。
  3. 列出实验过程出现的问题及解决措施。
  4. 附源程序

六、内容讲解(基础实验内容)

我们以学号为2017112345为例讲解本次实验。
首先,先将基本框架写出来。

module controlled_frequency
(
    input   wire            clk_in  ,
    input   wire			reset_n ,
    input   wire            sel     ,
    output  wire            clk_out 
);

endmodule

sn[2:0] = 345,sn[4:0] = 12345 。输入时钟clk_in的频率为50MHz,周期T0 = 20ns。当输出时钟的频率为345Hz时,周期为T1 ≈ 144927T0,占空比为28%,则高电平时间为T1H = 40580T0 ;当输出时钟的频率为12345Hz时,周期T2 ≈ 4050T0,高电平时间T2H = 1134T0;因此我们首先需要一个计数器,并且对各个计数值进行编码。sel = 0 ,输出时钟频率为345Hz时,计数器从0到144926循环计数,并且在0 ~ 40579内,clk_out保持高电平,剩下的时间保持低电平;sel = 1,输出时钟频率为12345Hz时,计数器从0到4049循环计数,并且在0 ~ 1133内,clk_out保持高电平,剩下时间保持低电平。代码如下

module controlled_frequency
(
    input   wire            clk_in  ,
    input   wire            reset_n ,
    input   wire            sel     ,
    output  wire            clk_out 
);

//以学号2017112345为例
parameter   CNT_CLK1 = 20'd144926       ;//频率为345Hz时钟计数(从0开始):144927 - 1
parameter   CNT_CLK2 = 20'd4049         ;//频率为12345Hz时钟计数(从0开始):4050 - 1
parameter   CNT_CLK1_HIGH = 20'd40579   ;//345Hz时钟高电平计数(从0开始):40580 - 1
parameter   CNT_CLK2_HIGH = 20'd1133    ;//12345Hz时钟高电平计数(从0开始):1134 - 1


reg [19:0]  CNT ;
//CNT的计数逻辑
always@(posedge clk_in, negedge reset_n)
    begin
        if(!reset_n)
            CNT <= 20'd0;
        else    if((sel == 1'b0) && (CNT >= CNT_CLK1))//输出时钟频率345Hz
            CNT <= 20'd0;
        else    if((sel == 1'b1) && (CNT >= CNT_CLK2))//输出时钟频率为12345Hz
            CNT <= 20'd0;
        else
            CNT <= CNT + 1'b1;
    end

//clk_out的逻辑
assign clk_out = (  (sel == 0 && CNT <= CNT_CLK1_HIGH) || 
                    (sel == 1 && CNT <= CNT_CLK2_HIGH)  )? 1'b1:1'b0;

endmodule

在更换频率时(sel从0变为1),计数器计数可能会大于CNT_CLK2(4049),需要将计数器清零,因此我们计数器清零的条件是 CNT >= CNT_CLK2。

七、testbench及仿真结果

1.testbench

`timescale 10ns/1ns//时间单位10ns,时间精度1ns

module  tb_controlled_frequency();

reg     clk_in  ;
reg     reset_n ;
reg     sel     ;
wire    clk_out ;

initial
    begin
        clk_in <= 1'b1;
        reset_n <= 1'b0;
        sel     <= 1'b0;
        # 5 reset_n <= 1'b1;
        # 1500000    sel <= 1'b1;
    end

always #1   clk_in = ~clk_in;//时钟周期为20ns



controlled_frequency    controlled_frequency_inst//实例化
(
    .clk_in  (clk_in    ),
    .reset_n (reset_n   ),
    .sel     (sel       ),
    .clk_out (clk_out   )   
);

endmodule

2.仿真结果

可控分频器设计,数电实验,fpga开发
sel = 0,CNT从0开始计数,clk_out为高电平。

可控分频器设计,数电实验,fpga开发
可控分频器设计,数电实验,fpga开发

计数到40579,clk_out变为低电平,保持低电平到144926,计数器清零,clk_out又变为高电平。

sel = 1时
可控分频器设计,数电实验,fpga开发
可控分频器设计,数电实验,fpga开发

CNT从0计数到1133,clk_out保持高电平,在1134后保持低电平。

可控分频器设计,数电实验,fpga开发
计数到4049后,计数器清零,clk_out又变为高电平。

欢迎在评论区留言,感谢您的关注与支持!文章来源地址https://www.toymoban.com/news/detail-753201.html

到了这里,关于数电实验6:可控分频器设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA基础设计(二):任意分频器(奇数,偶数,小数)

    FPGA开发板上一般只有一个晶振,即一种时钟频率。数字系统设计中,时间的计算都要以时钟作为基本单元,对基准时钟进行不同倍数的分频而得到各模块所需时钟频率,可通过Verilog代码实现;倍频可通过锁相环【PLL】实现。 把输入信号的频率变成成倍的低于输入频率的输出

    2024年02月01日
    浏览(42)
  • 【FPGA】Verilog:时序电路设计 | 二进制计数器 | 计数器 | 分频器 | 时序约束

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:计数器与分频器   ​​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用

    2024年02月02日
    浏览(62)
  • FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)

    在FPGA(可编程逻辑门阵列)中,分频器是一种用于将时钟信号的频率降低的电路或模块。它可以根据输入的时钟信号生成一个较低频率的输出时钟信号。 常见的分频器可以按照固定比例来进行分频,例如将输入时钟频率除以2、除以4等。因此,如果输入时钟信号的频率为10

    2024年02月05日
    浏览(42)
  • FPGA——分频器

    野火学习备忘录——FPAG分频 时钟对于 FPGA 是非常重要的,但板载晶振提供的时钟信号频率是固定的,不一定满 足工程需求,所以分频和倍频还是很有必要的。这里通过计数的方式来实现分频。 1.通过计数器来实现6分频。两种方式。第一种直接通过计数方式直接获取获取。输

    2024年02月10日
    浏览(42)
  • FPGA【Verilog分频器】

            在数字系统的设计中经常会碰到需要使用多个时钟的情况。时钟信号的产生通常具有两种方法,一种是使用PLL(Phase Locked Loop,锁相环),可生成倍频、分频信号;另一种则是使用硬件描述语言构建一个分频电路。         分频器的设计通常分为以下三类:奇

    2024年02月20日
    浏览(49)
  • 【FPGA & Verilog】奇数分频器 (50%)

    2.1 设计输⼊ 1. 模块名称:FrequencyDivider 2. 输⼊输出:CLK、RSTn、CLK_15 2.2 引脚约束 1. 输⼊端 ⾃定义 2. 输出端 ⾃定义 2.3 设计要求 1. 输出时钟的周期是输⼊时钟的15倍(15分频器) 2. 分别实现 7/15 占空⽐和 50% 占空⽐两种分频⽅式 3. 使⽤RTL View分析电路的区别 2.4 电路仿真1.

    2024年02月03日
    浏览(34)
  • FPGA学习日记——verilog实现分频器

    主要思想是利用计数器实现分频器功能,其中按原理不同可分为分频和降频 一、先说分频。 1、第一种实现方式 输入信号为系统时钟50MHz,本例子先以偶数倍六分频为例实现分频的第一种方式:计数器对系统时钟的上升沿进行计数,最大计数M=5,即count取值范围为0~5,当计数

    2024年02月04日
    浏览(45)
  • 【实验室学习】时钟分频器,2、3、4、8分频 verilog实现

    记录时钟分频器的Verilog代码编写,主要掌握分频器设计思路 2、4、8分频设计较为容易: 2分频—设计一个1位的寄存器,当原时钟上升沿时取反即可 代码展示: 4分频与8分频—设计一个两位的计数器,4分频只需在计数器计数到00B或者10B时跳变电平即可,8分频只需在计数器计

    2024年02月11日
    浏览(44)
  • ❀工信工实验参考——《VHDL实验2——数码管及分频器》

    一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com 仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯。 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 该实验和报告部分参考了ZhouzhouFighting的报告(链接华南理工大学VHD

    2024年02月08日
    浏览(46)
  • 06 分频器设计

    实现分频一般有两种方法,一种方法是直接使用 PLL 进行分频,比如在 FPGA 或者 ASIC 设计中,都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性,无法得到频率很低的时钟信号,比如输入 100Mhz 时钟,很多PLL 都无法得到 1Mhz 以下的时钟信号。另外一种方

    2024年02月19日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包