跑马灯VHDL课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
跑马灯VHDL课程设计
一、设计任务
控制8个led进行花式显示,设计四种显示模式:
1.从左到右逐个点亮led;
2.从右到左逐个点亮led;
3.从两边到中间逐个点亮led;
4.从中间到两边逐个点亮led;
四种模式循环切换,由复位键rst控制系统的运行与停止.
二、设计过程
根据系统设计要求,采用状态机进行设计,状态机具有四种状态,每种状态完成一种显示模式四种状态间使用case语句进行切换.
程序如下:
library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_1164.all;
entity pmd is
port( clk, rst: in std_logic;
y: buffer std_logic_vector(7 downto 0));
end pmd;
architecture behave of pmd is
type states is (state0, state1, state2, state3);
signal state: states;
begin
process (clk, rst)
begin
if rst='1' then
y<="00000000" ; state <= state0;
elsif (clk'event and clk='1') then
case state is
when state0 =>
if y="00000000" then y<="10000000";state <= state0; elsif y="10000000" then y<="01000000";state <= state0; elsif y="01000000" then y<="00100000";state <= state0; elsif y="00100000" then y<="00010000";state <= state0; elsif y="00010000" then y<="00001000";state <= state0; elsif y="00001000" then y<="00000100";state <= state0; elsif y="00000100" then y<="00000010";state <= state0; elsif y="00000010" then y<="00000001";state <= state1; end if;
when state1 =>
if y="00000001" then y<="00000010";state <= state1; elsif y="00000010" then y<="00000100";state <= state1; elsif y="00000100" then y<="00001000";state <= state1; elsif y="00001000" then y<="00010000";state <= state1; elsif y="00010000" then y<="00100000";state <= state1; elsif y="00100000" then y<="01000000";state <= state1;
elsif y="01000000" then y<="10000000";state <= state2;
end if;
when state2=>
if y="10000000" then y<="10000001";state <= state2;
elsif y="10000001" then y<="01000010";state <= state2;
elsif y="01000010" then y<="00100100";state <= state2;
elsif y="00100100" then y<="00011000";state <= state3;
end if;
when state3=>
if y="00011000" then y<="00100100";state <= state3;
elsif y="00100100" then y<="01000010";state <= state3;
elsif y="01000010" then y<="10000001";state <= state3;
elsif y="10000001" then y<="00000000";state <= state0;
end if;
end case;
end if;
end process;
end behave;
对程序进行编译波形仿真如下:
配置设备下载到实验箱上仿真.
四、总结
本次实验是功能模块电路的设计,我选作的是跑马灯设计。
跑马灯状态比较多,根据要求选用状态机的设计方法,我选用四状态的状态机,每种状态代表了一种显示模式,四种模式内采用case语句进行切换,在模式内采用if循环语句进行循环,观察仿真结果,程序运行结果与设计思想一致.在本次实验中我虽然按照要求完成了电路的设计,但是程序思想仍然存在很多的不足之处,程序不够简洁,采用列举的方法列举跑马灯的所有状态使程序过于复杂,如果能采用移位寄存器来进行设计,将简化程序,但是在设计过程中存在了没有解决的问题,仍需要继续解决.