libraryieee;useieee.std_logic_1164.all;entityzoumadengisport(clk:instd_logic;clr:instd_logic;a:instd_logic;q:outstd_logic_vector(7downto0));endentity;architectureaofzoumadengissignaltemp:std_logic_vector(7downto0);typestate_allis(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13);signalstate:state_all;beginprocess(clk,a)beginifclr='0'thenq=00000000;elsifclk'eventandclk='1'thenifa='0'thencasestateisWHENS0=state=S1;q=10000000;WHENS1=state=S2;q=01000000;WHENS2=state=S3;q=00100000;WHENS3=state=S4;q=00010000;WHENS4=state=S5;q=00001000;WHENS5=state=S6;q=00000100;WHENS6=state=S7;q=00000010;WHENS7=state=S8;q=00000001;WHENS8=state=S9;q=00000010;WHENS9=state=S10;q=00000100;WHENS10=state=S11;q=00001000;WHENS11=state=S12;q=00010000;WHENS12=state=S13;q=00100000;WHENS13=state=S0;q=01000000;endcase;elsecasestateisWHENS0=state=S1;q=00000000;WHENS1=state=S2;q=00011000;WHENS2=state=S3;q=00111100;WHENS3=state=S4;q=01111110;WHENS4=state=S5;q=11111111;WHENS5=state=S6;q=01111110;WHENS6=state=S7;q=00111100;WHENS7=state=S0;q=00011000;whenothers=state=s0;q=00011000;endcase;endif;endif;endprocess;enda;本次实验总结:走马灯用VHDL实现的方法有很多,其中难点就是在于状态的判断。因为会出现一个状态的下一状态有两个,因此要判断是向右还是向左或者增加两个灯还是灭两个灯。起初想着直接像之前的计数器一样循环,但是由于状态判断有问题于是乎就报错了。这样就想到了定义14个不同的状态,依次定义从此状态到下一状态的时候的输出。这样就解决的一对多的问题,于是走马灯的程序也就迎刃而解了数电实验总结:在这四次的数电实验过程中,我学会了熟练使用quartusⅡ软件,对于图形化编程和VHDL代码编程有了深刻认识,并且掌握了较高效的编程方法,可以思路清晰的写出代码并进行编译。在编译出错的情况下可以根据错误提示进行修改,使程序能够编译成功并仿真出正确的波形。在下载到电路板的时候能够选择正确管脚,进行下载后在实验版上可以进行正确的亮灯灭灯,成功完成实验。在实验中给我留下深刻印象的就是可编程器件的功能很强大,可以根据编程语言实现各种不同的功能,这激发起了我对可编程器件的研究兴趣,并且增强了我在实验中的动力,让我能够不断探究不断思索知道得到正确的结果。