当前数字电路系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。利用大规模可编程逻辑器件CPLD(Complex Programmable Logic Device)进行ASIC设计,可以直接面向用户需求,根据对系统的功能要求自上而下地逐层完成相应的描述、综合、优化、仿真与验证,直到生成元器件。目前,系统级的仿真工具也已出现.这样可以大大地缩短系统的设计周期,增加可靠性,提高产品竞争能力。采用Altera和Xilinx公司的可编程逻辑器件,并配以开发软件可在计算机上进行各种电路设计和修改,并可对电路特性进行仿真模拟,最后将设方案下载到该器件中,这样可实现高度集成和精确的电路设计,降低了设计成本,提高了设计效率和电路的可靠性。本文通过一个汽车车灯控制系统的设计实践,介绍了VHDL语言的具体设计应用。
1 系统功能及要求
汽车上有一转弯控制杆,此杆有三种状态:中间位置时汽车不转弯,向上位置时汽车左转,向下位置时汽车右转。汽车转弯时相应的尾灯和头灯均闪烁,当应急开关合上时,头灯尾灯均闪烁。汽车刹车时,2个尾灯发出一直亮的信号。如果汽车刹车时正在转弯,则相应的转弯闪烁信号不受影响。
2 逻缉抽象
由要求转换成真值表
注:断-灯不亮;闪-灯闪烁;通-灯一直亮
3 由真值表得出逻辑表达式
E(断)=(C and D)or((not B)and(not C));
E(闪)=(B and(not C))Or(C and(not D));
E(通)=0;
F(断)=(C and D)OR((not B)and(not D));
F(闪)=((not C)and D)Or(B and(not D));
F(通)=0;
G(断)=(C and D)or((not A)and(not B)and(not C));
G(闪)=(C and(not D))or((not A)and B and(not C));
G(通)=A and(not C);
H(断)=(C and D)or((not A)and(not B)and(not D));
H(闪)= not C)and D)or((not A)and B and(not D));
H(通)=A and(not D);
4 VHDL语言实现(源程序注释)
代码
- library IEEE
- use IEEE.std_logic_1164.all;
- use IEEE.std_logic_unsigned.all;
- entity autolight is
- port(A.in STD_LOGIC;
- C:in STD_LOGIC;
- B:in STD_LOGIC;
- D:in STD_LOGIC;
- E:out STD_LOGIC;
- F:out STD_LOGIC;
- G:out STD_LOGIC;
- H:out STD_ LOGIC);
-
- end autolight;
- architecture autolight_arch of autolight is
- signal e1,e2,e3,f1,f2,f3,g1,g2,g3,h1,h2,h3,clkk,
- sel:std_logc;
- signal controle,controlf,controlg,controlh:std_logic_vector(2 downto 0);
-
- component clk
- port(clkin:in std_logic;clkout:out std_logic);
- end component;
- component os
- port(osout:out std-logic);
- end component;
- begin
- u1:os port map(clkk);
- u2:clk port map(clkk,se1);
-
- e1<=((not b)and(not c))or(c and d);hl,h2,h3信号
- e2<=(b and(not c))or(c and(not d));一如e1=1则左头灯不亮
- e3<='0';
-
- f1<=((not b)and(not d))or(c and d);
- f2<=((not c)and d)or(b and(not d));
- f3<='0';
-
- g1<=((not a)and(not b)and(not c))or(c and d);
- g2<=((not a)and b and(not c))or(c and(not d));
- g3<=a and(not c);
-
- h1<=((not a)and(not b)and(not d))or(c and d);
- h2<=((not C)and d)or((not a)and b and(not d));
- h3<=a and(not d);
-
- controle<=e1&e2&e3;
- controlf<=f1&f2&f3;
- controlg<=g1&g2&g3;001之一
- controlh<=h1&h2&h3;
-
- e<='0' when controle="O01" else
- 如controle=100则左头灯不亮
- sel when controle="010" else
- 如controle=010则左头灯闪烁
- '1':
- 如controle=O01则左头灯一直亮
- f<='0' when controlf="001" else
- sel when controlf="010" else
- '1';
- g<='0' when controlg="001" else
- sel when controlg="010" else
- '1' ;
- h<='0' when controlh="001" else
- sel when controlh="010" else
- '1' ;
- end autolight_arch;
5 管脚锁定文件说明
用户可根据使用情况自行定义管脚锁定文件。这里将用EDA实验板上资源(跳线,开关按键,数码管,LED指示灯,蜂鸣器等)与xilinx xc9572芯片管脚相连,使用者可通过对按键和开关的操作加上指示灯和数码管的显示来判断程序是否正确。本系统使用xc9572中p33、p34、p35、p36作为输人端,对应程序中A、B、C、D,在EDA实验板上对应跳线的最左边四个。使用p29、p28作为左右头灯,对应LED发光管最左边两个。使用p40、p42作为左右尾灯,对应LED发光管最右边两个。
6 元件clk说明
代码
- library IEEE;
- use IEEE.std_logic_1164.all;
- use IEEE.std_logic_unsigned.all;
- entity clk is_clk的作用是分频以产生闪烁信号
- port(
- clkin:in std_logic;
- clkout:out STD_LOGIC);
- end clk;
- architecture clk_arch of clk is
- signal clk:STD_LOGIC;
- signal counter:std_logic_vector(24 downto 0);
- begin
- clkout<=counter(24);
- process(CLKin)
- begin
- if CLKin= '1' and CLKin'event then
- COUNTER<=COUNTER+1;
- end if;
- end process;
- end clk_arch;
文章评论(0条评论)
登录后参与讨论