偶数分屏器VHDL讲解偶数分屏器VHDL讲解
先介绍一下通用的偶数分频器。该分频器能将输入信号进行偶数倍分频后输出,占空比为50%。
代码如下:(工程见example下的gen_div文件夹)
程序解释:
8:类属参数。类属参数可以从外面传入给该设计实体,类似于C语言中的函数参数。我们利用该类属参数来定义分频的倍数,这样在元件例化(下面介绍)过程中,用不同的传入参数来形成不同的分频倍数。分频倍数=div_param*2,因为高低电平分别持续div_param个输入时钟周期,所以需要乘以2,这也就是为什么会是偶数倍的分频。若外部没有传入参数...
偶数分屏器VHDL讲解
先介绍一下通用的偶数分频器。该分频器能将输入信号进行偶数倍分频后输出,占空比为50%。
代码如下:(工程见example下的gen_div文件夹)
程序解释:
8:类属参数。类属参数可以从外面传入给该设计实体,类似于C语言中的
参数。我们利用该类属参数来定义分频的倍数,这样在元件例化(下面介绍)过程中,用不同的传入参数来形成不同的分频倍数。分频倍数=div_param*2,因为高低电平分别持续div_param个输入时钟周期,所以需要乘以2,这也就是为什么会是偶数倍的分频。若外部没有传入参数,则默认为2分频。 14:复位信号。高电平时复位。
25-27:在复位期间,输出信号为低电平。
29:对输入信号clk进行计数。
30-32:当计数值达到指定的分频数时,输出信号取反,并清计数器。这样就达
到了占空比50%的效果。
36:并行赋值语句,输出信号。
该分频器会将在以后的例程中不断的用到,希望读者好好理解。 元件的运用是VHDL中比较重要的知识点,希望读者通过如下的讲解能够掌握其运用方法,并在以后的练习中多运用。
下面通过流水灯例程介绍元件的使用。
程序代码:(工程见example下的led_w文件夹)
程序解释:
10:输入时钟—40M。
17:保存分频出来的半秒脉冲信号。
19:一个指示那个led亮的数组,任何时刻只有一位是1,即只有一个led处于点亮状态。通过移动这个唯一的1,来逐次点亮LED,达到流水灯的效果。 21-29:元件声明,即将上面所讲的偶数分频器声明为一个元件。22句设置类属参数,即传入分频倍数10000000,进行10000000×2=20000000分频,产生半秒脉冲。
元件简单的说就是把一个实体看成是可以调用的整体,可以类比成C语言中函数。而元件的例化就相当于函数的调用,在元件例化时要先进行元件的声明,这就可以类比成函数的声明。
元件的声明如下(”[]”标注的可以省略):
Component 元件名称 is
[generic ()] 类属列
;
[Port(端口列表);]
End component;
提示:一般的就直接把要调用的实体的声明整体拷贝过来,然后把entity改成component就可以了。
35-41:元件例化,使调用实体和被调用元件产生实际的关联。 元件例化的语法结构:
元件标签:元件名称[port map(关联列表)];
所谓的关联就是把调用元件的实体中的信号(可以称为实际参数)与被调用元件端口(可以成为形式参数)连接起来。实际参数必须是信号。 关联可以有两种方法,这里介绍的的是名称关联法,其结构就是用“=>”把行参和实参联系起来。个人觉得,这个名称关联法比较方便,不易出错。
对于任何一种关联,必须遵循两个规则:
1. 形式参数和实际参数的类型必须相同。
2. 端口模式必须相同。比如,实际参数是out的端口,那它就不能和形式参数
中in的端口相连。
46-48:当复位时,初始led_tmp,使最左边的LED亮,其它都灭。 49-60:在半秒脉冲的驱动下,左移led_tmp使逐次向右点亮。这里解释一下为什么要计数cnt。刚开始时,led_tmp=001,一个脉冲来后,在53句的驱动下变为010,再来一个脉冲,变为100,再来一个脉冲,此时若没55-57的判断,而是继续执行53-54,那么led_tmp变为000,这样一下,下接下来的脉冲的驱动下led_tmp始终为0,即led全灭,流水灯的功能就不能实现了。所以在第三个脉冲来的时候,通过55-57的操作,将led_tmp强置为001,这样即可达到流水灯的效果。
63-76:用计数器在内部产生一个由高到低的信号,来充当复位信号。但这样由内部产生的复位信号不可靠,建议在实际应用中,由外部信号充当复位信号。该内部产生复位的方法仅作参考。
改变流速:
可通过修改分频的倍数来改变流水灯的速度,分频倍数越大,流速越慢,反之,越快,但不能太快,因为若当分频后时钟州周期小于人的视觉暂留时间0.1s的话,人眼就会觉的这个逐次点亮的过程是连续的,即被眼睛“误解”为这三个led始终都是亮的。
改变流向:
将47句改为led_tmp<="100";53句改为led_tmp<='0'&led_tmp(2 downto 1);56
句改为led_tmp<="100";这样即可变为左流动。
本文档为【偶数分屏器VHDL讲解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。