Skip to content

Latest commit

 

History

History
39 lines (20 loc) · 2.09 KB

File metadata and controls

39 lines (20 loc) · 2.09 KB

实验题目

实验原理

在数字电路中,常常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号,即分频器。实现分频器的方法有很多,最常用的是使用计数器分频的方式,而分频也分为偶数分频(2N)、奇数分频(2N+1)、半整数分频(N-0.5)等等,对于最简单的偶数分频,只需要使用模值位N的计数器实现50%占空比的时钟信号,即每次计数满N时输出时钟信号翻转即可。

实验内容

本次的实验任务是将一个1Mhz的信号分频成100khz、10khz、1khz、100hz。实验要求每相差十倍频率就有脉冲输出,推荐采用十进制计数器对信号进行分频,即判断输入信号上升沿或下降沿的个数,每计满5个即让输出信号电平翻转,以此实现10分频。

然后将10进制计数器做成COMPENENT,利用元件例化语句实现调用,在测试文件(TEST-BENCH,TB)中只需要给输入1Mhz方波信号。

题目分析

分频

分频电路的思路是内部创建一个计数器,当计数器满足特殊值时进行翻转。N分频分频系数N。内部计数器模值取N。

偶数分频

如果利用时钟的单边沿进行计数,那么当计数等于满足分频系数的一半和分频系数时,进行翻转。一个完整的内部计数器状态流程(外部时钟2N个边沿)中翻转两次(2个边沿)。

奇数分频

内部计数器为分频系数的一半(上下取整都可)或分频系数时,进行翻转。但是这样得到的信号占空比不是50%。

实验心得

阿西吧,vhdl语言又复杂,资源又少,阿西吧

阿西吧,modelsim编译失败都没有详细报错信息的

port map()里使用","分割,而entity设置输入输出是用";"分割

一次debug经历

de了一小时,divider_10.vhd一直过不去modelsim编译,最后用vivado语法检查器看一下,发现unsigned不能用于判断,必须先转换为std_logic_vector用于判断。其它的Linter都检查不出来,Vivado yyds!

vscode使用vivado的语法检查器配置成功!