八、心得体会
VHDL语言既具有高级编程语言的优点,又有并行执行的特性,使设计者脱离了底层电路,而在更高的层次上考虑电路的各种时序和逻辑关系。这样设计者可以采用自顶向下的设计方法和并行工作的设计原则。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大的减少了电路设计时间和可能发生的错误,降低了开发成本。这种设计方法必在将来的数字系统设计中发挥越来越重要的作用。
(1)在进行设计时,最主要的是先设计理清时序。在单个实现各个模块功能时比较简单。但将各个功能模块综合在一起之后就需要理清它们的时序,才能够共用数据总线,使其互不干扰地工作。
(2)设计完成后要在模版上仿真,来验证所编程序的正确性和可行性。在仿真的时候会出现比较多的问题,如果能够耐心的解决将会获益良多。
(3)有的程序可能在仿真时时序是完全正确的,而将程序下载到板子上之后却发现不对。这主要是由于各个功能实现时会有时延,这在仿真时是反映不出来的。因此编程时要注意在选中某个片子之前,要先将计算出的数据信号先放到数据总线上。 (4)要仔细研究仿真时所获得的波形图,确定所做的设计稳定又实用。
在此次设计中,我掌握了一些使用VHDL语言编程的基本方法。在设计的过程中我深深的体会到,VHDL语言实在是一个很好用的硬件描述语言。它具有强大的生命力和应用潜力。它必将成为数字系统设计中的一种重要工具。
附录
源程序
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity dianti is
port(clk: in std_logic;
full,deng,quick,clr:in std_logic;
c_u1,c_u2,c_u3,c_u4,c_u5:in std_logic; c_d2,c_d3,c_d4,c_d5,c_d6:in std_logic; d1,d2,d3,d4,d5,d6:in std_logic; g1,g2,g3,g4,g5,g6:in std_logic;
door:out std_logic_vector(1 downto 0); led:out std_logic_vector(6 downto 0); led_c_u: out std_logic_vector(5 downto 0); led_c_d: out std_logic_vector(5 downto 0); led_d: out std_logic_vector(5 downto 0); wahaha: out std_logic; ud,alarm: out std_logic; up, down: out std_logic); end dianti;
architecture behav of dianti is
signal d11,d22,d33,d44,d55,d66:std_logic;
signal c_u11,c_u22,c_u33,c_u44,c_u55:std_logic; signal c_d22,c_d33,c_d44,c_d55,c_d66:std_logic; signal q:integer range 0 to 1; signal q1:integer range 0 to 6; signal q2:integer range 0 to 9;
signal dd,cc_u,cc_d,dd_cc:std_logic_vector(5 downto 0); signal opendoor: std_logic; signal updown:std_logic;
signal en_up,en_dw: std_logic; begin
com: process (clk) begin
if clk'event and clk='1'then
if clr='1'then q1<=0;q2<=0;wahaha<='0'; elsif full='1' then alarm<='1';q1<=0; if q1>=3 then door<=\ else door<=\
end if;
elsif q=1 then q<=0;alarm<='0'; if q2=3 then wahaha<='1'; else
if opendoor='1'then door<=\ elsif en_up='1'then
if deng='1'then door<=\ elsif quick='1'then q1<=3;
elsif q1=6 then door<=\ elsif q1>=3 then door<=\ else q1<=q1+1;door<=\ end if;
elsif en_dw='1'then
if deng='1' then door<=\ elsif quick='1'then q1<=3;
elsif q1=6 then door<=\ elsif q1>=3 then door<=\ else q1<=q1+1; door<=\ end if; end if;
if g1='1' then led<=\
if d11='1'or c_u11='1'then d11<='0';c_u11<='0';opendoor<='1'; elsif dd_cc>\ elsif dd_cc=\ end if;
elsif g2='1'then led<=\ if updown='1'then
if d22='1'or c_u22='1'then d22<='0';c_u22<='0';opendoor<='1'; elsif dd_cc>\ elsif dd_cc<\ end if;
elsif d22='1'or c_d22='1'then d22<='0';c_d22<='0';opendoor<='1'; elsif dd_cc<\ elsif dd_cc>\ end if;
elsif g3='1'then led<=\ if updown='1'then
if d33='1'or c_u33='1'then d33<='0';c_u33<='0';opendoor<='1'; elsif dd_cc>\ elsif dd_cc<\ end if;
elsif d33='1'or c_d33='1'then d33<='0';c_d33<='0';opendoor<='1'; elsif dd_cc<\ elsif dd_cc>\ end if;
elsif g4='1'then led<=\ if updown='1'then
if d44='1'or c_u44='1'then d44<='0';c_u44<='0';opendoor<='1'; elsif dd_cc>\ elsif dd_cc<\ end if;
elsif d44='1'or c_d44='1'then d44<='0';c_d44<='0';opendoor<='1'; elsif dd_cc<\ elsif dd_cc>\ end if;
elsif g5='1'then led<=\ if updown='1'then
if d55='1'or c_u55='1'then d55<='0';c_u55<='0';opendoor<='1'; elsif dd_cc>\ elsif dd_cc<\ end if;
elsif d55<='1'or c_d55='1'then d55<='0';c_d55<='0';opendoor<='1'; elsif dd_cc<\ elsif dd_cc>\ end if;
elsif g6='1'then led<=\
if d66='1'or c_d66='1'then d66<='0';c_d66<='0';opendoor<='1'; elsif dd_cc>\ end if;
else en_up<='0';en_dw<='0'; end if; end if;
else q<=1;alarm<='0'; if d1='1' then d11<=d1; elsif d2='1' then d22<=d2; elsif d3='1' then d33<=d3; elsif d4='1' then d44<=d4; elsif d5='1' then d55<=d5; elsif d6='1' then d66<=d6; end if;
if c_u1='1' then c_u11<=c_u1; elsif c_u2='1' then c_u22<=c_u2;
相关推荐: