彩灯控制器
简介
上次是我们通过设置几个开关,用他们的$0/1$状态表示一个数,然后$BCD$译码管就显示相应的数字。而这次的内容则是,让这个$”8”$的外面一圈$a,b,c,d,e,f$这$6$个灯管轮流亮。
哦对了,这次还要求要层次化,需要写个顶层文件。
过程
如何让译码管特定的灯管点亮我们已经在上次实验中学会了,那么如何控制译码管的灯循环轮流依次去亮呢?这里我们引入一个变量$Q$,并且使用实验箱中$CLK$器件,它会产生可调的时间脉冲,每当接收到一次脉冲,$Q+1$,然后根据$Q$的值去给$codeout$分配每一位的值,就可以控制译码管显示的字了。
代码
顶层文件 $gal\underline{}3035\underline{}2.v$
1 | module gal_3035_2(clk,en,Q,codeout); //彩灯控制器 |
计数器模块 $gal\underline{}3035\underline{}2\underline{}1.v$
1 | module gal_3035_2_1(clk,en,Q);//计数器 |
译码器模块$gal\underline{}3035\underline{}2\underline{}2.v$
1 | module gal_3035_2_2(Q,codeout); //译码器 |
波形仿真
引脚分配
$Family:Cyclone\ IV\ E\ \ \ \ \ \ \ \ Device:EP4CE22E22C8$
信号名 | 主板器件 | PIN |
---|---|---|
Q[2] | LED2 | 52 |
Q[1] | LED1 | 50 |
Q[0] | LED0 | 46 |
clk | CLK0 | 88 |
codeout[6] | a | 112 |
codeout[5] | b | 100 |
codeout[4] | c | 104 |
codeout[3] | d | 111 |
codeout[2] | e | 106 |
codeout[1] | f | 110 |
codeout[0] | g | 103 |