when 3 => data <=\when 4 => data <=\when 6 => data <=\when 8 => data <=\when 10=> data <=\
when others => data<= \
end case;
state<=Write_DataUp4; --写数据高四位
when Write_DataUp4=> LCD_RS<='1'; case cnt is
when 0 => data<= conv_std_logic_vector(65,8)(7 downto 4); when 1 => data<= conv_std_logic_vector(66,8)(7 downto 4); when 2=> data<= conv_std_logic_vector(67,8)(7 downto 4); when 3=> data<= conv_std_logic_vector(68,8)(7 downto 4);
when 4 => data<= point_ten_A(7 downto 4);
when 5 => data<= point_one_A(7 downto 4); when 6 => data<= point_ten_B(7 downto 4); when 7 => data<= point_one_B(7 downto 4); when 8 => data<= point_ten_C(7 downto 4); when 9 => data<= point_one_C(7 downto 4); when 10 => data<= point_ten_D(7 downto 4); when 11 => data<= point_one_D(7 downto 4); when others => data<= \
end case;
state <= Write_DataDown4; --写数据低4位
when Write_DataDown4 => case cnt is
when 0 => data<= conv_std_logic_vector(65,8)(3 downto 0); when 1 => data<= conv_std_logic_vector(66,8)(3 downto 0); when 2=> data<= conv_std_logic_vector(67,8)(3 downto 0); when 3=> data<= conv_std_logic_vector(68,8)(3 downto 0);
when 4 => data<= point_ten_A(3 downto 0); when 5 => data<= point_one_A(3 downto 0); when 6 => data<= point_ten_B(3 downto 0); when 7 => data<= point_one_B(3 downto 0); when 8 => data<= point_ten_C(3 downto 0); when 9 => data<= point_one_C(3 downto 0); when 10 => data<= point_ten_D(3 downto 0); when 11 => data<= point_one_D(3 downto 0); when others => data<= \
end case;
--if(cnt=7)then --cnt<=8;
--state<=Set_AddrUp; if(cnt=11)then cnt<=0;
state<=Set_AddrUp;
elsif(cnt=0 or cnt=1 or cnt=2 or cnt=3 or cnt=5 or cnt=7 or cnt=9)then cnt<=cnt+1; state<=Set_AddrUp;
else
cnt<=cnt+1;
state<=Write_DataUp4;
end if;
when others=>
state<=Write_instr;
end case;
end if; end process; end Behavioral;
五.仿真图(输入输出波形)以及分析:
Justify模块(第一信号鉴别及锁存模块)仿真图如下:
从上图可见,模块能够鉴别、缓存第一抢答信号并阻塞其他信号。 Violation模块(抢答鉴别及锁存模块)仿真图如下:
从上图可以看出,模块能够鉴别所有犯规的选手并缓存之。
Points模块(记分模块)仿真如下:
从上图可见,模块能够进行正常的加减运算。
Shaking模块(防抖模块)仿真如下:
从上图可见,当有毛刺的输入信号传来之后,防抖模块将其变为一定长度的规整的方波。
Timer模块(正常答题超时模块)仿真如下:
从上图可见,模块能够成功进行超时判断与提示。
Timer1模块(选中答题人,Timer3与之类似)仿真如下:
从上图可见,当有人按抢答器时,模块能够产生一定宽度的提示信息。
Timer2模块(清零信号发生模块)仿真如下:
从上图可见,当需要清零的时候,模块能够滞后一段时间,然后产生一定宽度的清零信
号。
全系统仿真图如下:(为了仿真,分频、防抖和清零信号等的延迟计数值略为修改)
从上图可见,整个系统鉴别第一信号、锁存、加减分、鉴别抢答犯规选手及各种犯规提
示、抢答成功提示等均能正常完成。
上图最后可见答题超时提示功能正常。 LCD模块仿真如下: LCD初始化阶段
LCD写地址写数阶段
六.实验问题分析和经验总结:
两周的课程设计,给我们最深的印象是,要设计一个成功的电路系统,一要有耐心,二要有坚强的毅力。在整个电路系统的设计过程中,花费时间最多的是各个电路单元的连接及电路的细节设计上,如每个模块都必须通过VHDL语言来生成,以便调用。在多种方案的选择中,我们仔细比较、分析其原理和可行性,最后选择了一个最优的设计方案,经过两个星期的奋战,终于使整个电路系统能够稳定工作。
通过课程设计,使我们对课堂上的理论知识有了进一步的了解,并增强了我们对复杂数
字系统这门课程的兴趣。此次实验,我们对ISE进行了进一步的应用和掌握,操作更为熟练,此外还对Spartan-3E Starter Kit Board各模块器件有了初步的了解。
整个实验过程中,我们深刻体会到在设计过程中,需要反复实践,其过程很可能及其繁
琐,有时花很长时间写的代码,烧到板子上测试却不成功,有些灰心,甚至想放弃,但是此时最重要的就是静下心来,查找原因,请教老师和同学,把不太清楚的地方彻底搞明白。
七.参考资料:
VHDL开发精解与实例剖析 詹仙宁 田耘 电子工业出版社
VHDL硬件描述语言与数字逻辑电路设计 侯伯亨 西安电子科技大学出版社