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

  • 一、实验目的
  • 二、基本实验内容
  • 三、提高性实验内容(选做)
  • 四、预习实验
  • 五、实验报告要求
  • 六、内容讲解(基础实验内容)
  • 七、testbench及仿真结果
    • 1.testbench
    • 2.仿真结果

一、实验目的

  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 - 1reg [19:0]  CNT ;
//CNT的计数逻辑
always@(posedge clk_in, negedge reset_n)beginif(!reset_n)CNT <= 20'd0;else    if((sel == 1'b0) && (CNT >= CNT_CLK1))//输出时钟频率345HzCNT <= 20'd0;else    if((sel == 1'b1) && (CNT >= CNT_CLK2))//输出时钟频率为12345HzCNT <= 20'd0;elseCNT <= 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,时间精度1nsmodule  tb_controlled_frequency();reg     clk_in  ;
reg     reset_n ;
reg     sel     ;
wire    clk_out ;initialbeginclk_in <= 1'b1;reset_n <= 1'b0;sel     <= 1'b0;# 5 reset_n <= 1'b1;# 1500000    sel <= 1'b1;endalways #1   clk_in = ~clk_in;//时钟周期为20nscontrolled_frequency    controlled_frequency_inst//实例化
(.clk_in  (clk_in    ),.reset_n (reset_n   ),.sel     (sel       ),.clk_out (clk_out   )
);endmodule

2.仿真结果


sel = 0,CNT从0开始计数,clk_out为高电平。


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

sel = 1时

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


计数到4049后,计数器清零,clk_out又变为高电平。

欢迎在评论区留言,感谢您的关注与支持!

数电实验6:可控分频器设计相关推荐

  1. [数电实验]外星萤火虫设计

    [数电实验]外星萤火虫设计 文章目录 [数电实验]外星萤火虫设计 题目描述 电路要求 题目分析 解决方案 代码 仿真 题目描述 在遥远的 Mars星上有一种类似地球萤火虫的生物 星上有一种类似地球萤火 ...

  2. 湖南大学_数电实验_模型机设计_CPU设计_verilog_课程实验报告

    本学期的数电课程实验就是模型机设计,由四次小实验构成,最后一次实验验收要求使用quartus做出一个模型机. 该实验的重要性:该实验的核心在于基于实验指导书设计CPU,从而帮我们理解CPU的工作原理. ...

  3. 数电实验:数字时钟设计 (经验分享,仅供参考)

    实 验 目 的 一.独立完成一个数字小系统的设计 二.基于实验箱对设计进行验证 实验内容: 能够显示时.分.秒共6位数字: 考虑使用实验箱时钟(频率包括1M.500K. 250K.100K.10K.1 ...

  4. 【数电实验7】Verilog—外星萤火虫

    [2022.05西南交大数电实验] [本代码及波形已通过老师验收.仅供参考.] [参考博客:[数电实验]外星萤火虫设计_难凉oh的博客-CSDN博客] [建议:有些口语化的注释看完删掉比较好哈,怕老师 ...

  5. 数电实验(一)利用与非门设计四舍五入判别电路

    数电实验(一)利用与非门设计四舍五入判别电路 要求: 1.输入为8421BCD码,接四个逻辑电平开关,同时接数码管. 2.输出和LED相连. 一.写出逻辑函数: F(A,B,C,D)=∑m(5,6,7 ...

  6. 数电实验(三)利用3线-8线译码器74LS138和与非门设计一个表决电路

    数电实验(三)利用3线-8线译码器74LS138和与非门设计一个表决电路 要求: 设计一个表决电路, 当控制端M=0时,输入端A.B.C一致同意时,输出F为1,否则输出为0:当控制端M=1时,输入端A ...

  7. 数电实验4:彩灯控制器设计

    数电实验4:彩灯控制器设计 一.实验目的 二.实验内容 三.预习要求 四.实验报告要求 五.Verilog代码.RTL视图及仿真波形 1.Verilog代码 2.RTL视图 3.仿真波形 西南交大数电 ...

  8. 数电实验(四)利用集成数值比较器74LS85设计一个4位数值比较器

    数电实验(四)利用集成数值比较器74LS85设计一个4位数值比较器 要求: 1.输入为两个4位二进制数,分别接四个逻辑电平开关,同时接数码管 2. 输出和LED相连 Multisim仿真:

  9. 数电实验报告实验一_大二下学期的两三事之数电实验amp;课设

    数电实验&课设 叮 写在前面 这学期的数电实验老师是陈W老师.上学期的模电,选过一次他的课,线下教学,老师讲课游刃自如,点到为止,但又醍醐灌顶:这学期线上教学,可能是软件运用不熟练,他多少有些 ...

最新文章

  1. 去年押中数字人爆发,今年看好什么?百度研究院2022十大科技趋势预测出炉
  2. Mysql之alter用法汇总
  3. tomcat启动慢_Hack下mongodb jdbc driver启动慢
  4. 多线程断点续传及下载
  5. eclipse的tomcat插件使用下载(转)
  6. torch版ResNet50(带有多输出)转c++ tensorrt
  7. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 生成对抗网络
  8. Java-Tomcat 5.5 下的JNDI
  9. 划重点!2019年这类程序员非常稀缺,年薪超平均水平10倍
  10. L1-004. 计算摄氏温度-PAT团体程序设计天梯赛GPLT
  11. 新手常见的python报错及解决方案
  12. vbScript: 编号成生不夠位數前面加零
  13. steam显示不能连接网络连接服务器,steam请检查网络连接
  14. 海贼C语言,PSV海贼无双3金手指代码 (PSVC)
  15. PC端微信缓存清理方法
  16. 计算机热点ip设置,电脑宽带怎样设置wifi热点
  17. 开发部程序员绩效考核办法
  18. 黄子韬快手带货首秀GMV破2.3亿,真性情无套路直播效果拉满!
  19. Python分析薛之谦与李雨桐互撕微博
  20. 乱舞之双刀--mhp2怪物猎人双刀攻略…

热门文章

  1. 交换机S5720外网断开两次(12月1日,11月27日),关闭auto-port-defend功能,仅开启auto-defend。针对信任的IP,acl放通,然后在策略里面调用ACL
  2. 单链表指针和头结点的理解
  3. FIREFLY-RK3399-UBUNTU-20.04 GUI info
  4. 安装mysql windows server 2012 r2 丢失msvcr100.dll
  5. 【实战】kaggle猫狗大战-卷积神经网络实现猫狗识别
  6. 成功跳槽字节跳动,详细的Java学习指南
  7. 2023年度全球品牌价值500强榜单公布,苹果失去头把交椅,亚马逊重新登顶第一 | 美通社头条...
  8. 全球与中国超声设备市场深度研究分析报告
  9. 为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列
  10. matlab deconv出现无穷大,【 MATLAB 】deconv 函数介绍