实验二译码器设计电信5班凌键宇201330252040一、实验准备1)接上usb-blaster到开发板中间的JTAG接口,另一个接口接上电脑USB,然后接上电源设配器,为开发板通电。如果驱动安装成功则进行下个步骤,如果驱动没有安装成功则按照‘USB下载线驱动安装指南.doc’为usb-blaster安装驱动。驱动安装成功则开始按照实验要求进行系统设计。2)本次实验所使用开发板芯片信号为cyclone系列的EP2C8Q208C8N3)下载的步骤见附录。二、实验要求利用硬件描述语言设计一自定义译码器,其主要功能为下表所示:SW0SW1SW2SW3LED0~LED5↓xxx流水点亮1↓xx间隔点亮11↓x追逐点亮111↓全部亮,并闪烁其中,↓表示有键按下,1表示无键按下,x表示不管有没有按键;流水点亮即为LED0先亮,然后LED0灭,LED1亮,依次类推;间隔点亮即为第一状态为LED0亮,第二状态为LED0保持亮、LED2亮,依次类推;追逐点亮即为第一状态为只有LED0亮,第二状态为LED0保持亮、LED1点亮,依次类推。具体LED0~LED5引脚,SW0~SW3引脚分配请参照开发板原理图。三、实验实现实验思路:首先检测按键SW0、SW1、SW2、SW3(按照优先级排序),根据按键进入不同的流水灯状态,然后不断循环。同时不断检测按键来切换流水灯状态。代码如下:libraryIEEE;useIEEE.STD_LOGIC_1164.all;useIEEE.STD_LOGIC_unsigned.all;entityledisport(sysclk:instd_logic;--sw:instd_logic_vector(1down0);sw0,sw1,sw2,sw3:instd_logic;dout:outstd_logic_vector(5downto0));endled;architecturelsdofledissignalcnt:integerrange1downto0;signalcount1,count2,count3,count4:std_logic_vector(3DOWNTO0);signalstate:std_logic_vector(1DOWNTO0);beginprocess(sysclk)beginif(sysclk'eventandsysclk='1')thencnt=cnt+1;if(cnt=1)thencnt=0;count1=count1+1;if(count1=1001)thencount1=0000;endif;count2=count2+1;if(count2=0010)thencount2=0000;endif;count3=count3+1;if(count3=0101)thencount3=0000;endif;count4=count4+1;if(count4=0001)thencount4=0000;endif;endif;if(sw0='0')thenstate=00;endif;if(sw1='0'andsw0='1')thenstate=01;endif;if(sw2='0'andsw1='1'andsw0='1')thenstate=10;endif;if(sw3='0'andsw0='1'andsw1='1'andsw2='1')thenstate=11;endif;endif;endprocess;process(count1,count2,count3,count4)beginif(state=00)thencasecount1iswhen0000=dout=111110;when0001=dout=111101;when0010=dout=111011;when0011=dout=110111;when0100=dout=101111;when0101=dout=011111;when0110=dout=101111;when0111=dout=110111;when1000=dout=111011;when1001=dout=111101;whenothers=null;endcase;elsif(state=01)thencasecount2iswhen0000=dout=111110;when0001=dout=111010;when0010=dout=101010;whenothers=null;endcase;elsif(state=10)thencasecount3iswhen0000=dout=111110;when0001=dout=111100;when0010=dout=111000;when0011=dout=110000;when0100=dout=100000;when0101=dout=000000;whenothers=null;endcase;elsif(state=11)thencasecount4iswhen0000=dout=000000;when0001=dout=111111;whenothers=null;endcase;endif;endprocess;endlsd;仿真结果:(1)sw0=0时(2)sw1='0,sw0='1'时(3)sw2='0'andsw1='1'andsw0='1'(4)sw3='0',sw0='1',sw1='1',sw2='1四、实验总结这次实验主要是通过流水灯的实现熟悉将程序下载的实验板的过程。它的基本思想就是通过按键控制流水灯的状态并循环。但是不能在按键检测的地方做循环判断,因为这样会使得要按键一直按下才会检测循环条件。