5 总结
在学期期末,院系安排我们进行FPGA课程设计。首先,我们根据老师给我们的题目进行设计。然后,利用Quartus Ⅱ进行编译仿真等工作。
通过FPGA课程设计,我不仅加深了对数字电路理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。使之不断地战胜别人,超越前人。同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
这个设计过程中,我遇到过许多次失败的考验,就比如,自己对软件Quartus Ⅱ不熟悉,遇到了很多困难。有时候真想就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。于是,我坚持了下来。当然最终,这个设计很完成了。
9
参考文献
[1].Voknei A.Pedroni.VHDL数字电路设计教程.电子工业出版社,2008.5 [2].潘松,黄继业.EDA技术实用教程(第二版).科学出版社,2005.2 [3].焦素敏.EDA应用技术.清华大学出版社,2002.4
[4].张昌凡等.可编程逻辑器件及VHDL设计技术[M].广州:华南理工大学出版社,2001 [5].曾繁泰,陈美金.VHDL程序设计[M].北京:清华大学出版社,2001
10
附录
library ieee;
use ieee.std_logic_1164.all; entity shouhuoji is
port(rst,clk,ai,bi,ci,di,ei,fi,ok:in std_logic; xianshi:out integer range 0 to 10; ao,bo,co,warn:out std_logic); end shouhuo;
architecture bhv of shouhuo is
type state is(s0,s1,s11,s15,s110,s2,s21,s25,s210,s3,s31,s35,s310); --设计分13个状态 signal n_s,p_s:state; signal a,b:std_logic; begin process(clk,rst)
variable temp:integer range 0 to 3; begin if(rst='1')then
p_s<=s0; --时序进程部分 elsif(clk'event and clk='1')then p_s<=n_s; if(a='1')then
temp:=temp+1; --延时3s代码 if(temp=3)then b<='1'; else b<='0'; end if; else temp:=0; end if; end if; end process;
process(p_s,ai,bi,ci,di,ei,fi,ok,b) --组合进程代码 begin
11
if((p_s=s0)or(p_s=s1)or(p_s=s2)or(p_s=s3))then a<='0'; else
a<='1'; --商品的成功输出维持3s的时间 end if; case p_s is when s0=>
xianshi<=0; ao<='0'; bo<='0'; co<='0'; warn<='0'; if(ai='1')then
n_s<=s1; elsif( bi='1')then
n_s<=s2; elsif( ci='1')then
n_s<=s3; else
n_s<=s0; end if;
when s1=> ao<='0'; bo<='0'; co<='0'; warn<='0';
xianshi<=1; if(di='1')then xianshi<=1;
if(ok='1')then n_s<=s11; else
n_s<=s1; end if;
--自动售货机的初始状态 --购买一元商品进入s1状态 --购买五元商品进入s2状态 --购买十元商品进入s3状态 --返回初始状态 --购买一元商品的销售服务状态 --价格显示一元 --输入一元并确认进入s11状态 --没有确认则返回s1状态 12
elsif(ei='1')then --输入五元并确认进入s15状态 xianshi<=5; if(ok='1')then n_s<=s15; else
n_s<=s1; --没有确认则返回s1状态 end if; elsif(fi='1')then
xianshi<=10; if(ok='1')then n_s<=s110; else
n_s<=s1; end if; else
n_s<=s1; end if;
when s2=> ao<='0'; bo<='0'; co<='0'; warn<='0';
xianshi<=5; if(di='1')then xianshi<=1;
if(ok='1')then n_s<=s21; else
n_s<=s2; end if;
elsif(ei='1')then xianshi<=5; if(ok='1')then n_s<=s25;
--输入十元并确认进入s110状态 --没有确认则返回s1状态 --没有投币则返回s1状态 --购买五元商品的销售服务状态 --价格显示五元 --输入一元并确认进入s21状态 --没有确认则返回s2状态 --输入五元并确认进入s25状态 13