EDA实验 交通灯设计
发布时间:2024-11-12
发布时间:2024-11-12
实验内容与要求一条主干道,一条乡间公路,组成十字路口,要求保证主干道先通行,有MR(主红),MY(主黄),MG(主绿),CR(乡红),CY(乡黄),CG(乡绿)。六盏交通灯需要控制;交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号s=1,其余时间s=0。
实验五 交通灯控制器设计
一、实验目的
(1)进一步熟练EDA设计流程、系统仿真及硬件测试分析。 (2)学会用分层次设计的方法设计交通灯控制器。
(3)掌握动态数码管的原理,学会用VHDL语言编程使用数码管。 (4)学习较复杂数字电路系统的设计。 二、实验内容与要求
一条主干道,一条乡间公路,组成十字路口,要求保证主干道先通行,有MR(主红),MY(主黄),MG(主绿),CR(乡红),CY(乡黄),CG(乡绿)。六盏交通灯需要控制;交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔;系统有MRCY、MRCG、MYCR、MGCR四个状态;
乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号s=1,其余时间s=0;
平时系统停留在MGCR(主干道通行)状态,当s=1时,经MYCR(黄灯)状态转到MRCG状态,但保证MGCR不短于一分钟;一旦s=0系统将脱离MRCG状态。随即由MRCY进入MGCR状态,即使s一直为1,MRCG持续时间也不得超过20秒。 三、设计思路/原理图
图一、交通灯控制器原理图
采用分层设计的方法分为其中jishuqi为倒计数器模块预置数有60、3、19三种。yimaqi为8位二进制数译码成8421BCD码的译码模块,dongtaism为动态扫描显示模块,deng为交通灯状态转移模块。当s=0时系统处以MGCR状态,一旦s=1且一直有效则状态转移:MGCR——>MYCR——>MRCG——>MRCY——>MGCR。其中MGCR持续时间为61秒,MYCR持续时间为4秒,MRCG最长持续时间为20秒。MRCY持续时间为4秒。
实验内容与要求一条主干道,一条乡间公路,组成十字路口,要求保证主干道先通行,有MR(主红),MY(主黄),MG(主绿),CR(乡红),CY(乡黄),CG(乡绿)。六盏交通灯需要控制;交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号s=1,其余时间s=0。
四、实验程序 (程序来源:王鸿亮 6100208031 ) (1)倒计数器模块jishuqi library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity jishuqi is
port(clk,s:in std_logic;
count:out std_logic_vector(7 downto 0); state:out std_logic_vector(1 downto 0)); end jishuqi;
architecture one of jishuqi is
signal st:std_logic_vector(1 downto 0):="00"; signal cnt:std_logic_vector(7 downto 0); type states is (st0,st1); signal stx:states; begin
process(clk,s) begin
if clk'event and clk='1' then case st is
when "00" =>if s='1' then case stx is when st0=>cnt<="00111100";stx<=st1;
when st1=>if cnt>0 then cnt<=cnt-1;else cnt<="00000011";st<="01";end if;
when others=>null;end case; else cnt<="00000000";stx<=st0;st<="00";end if;
when "01" =>if s='1' then case stx is when st1=>if cnt>0 then cnt<=cnt-1;else cnt<="00010011";st<="10";end if;
when others=>null;end case;
else case stx is when st1=>if cnt>0 then cnt<=cnt-1;else cnt<="00000000";st<="00";end if;
when others=>null;end case;end if;
when "10"=> if s='1' then case stx is when st1=>if cnt>0 then cnt<=cnt-1;else cnt<="00000011";st<="11";end if;
when others=>null;end case; else cnt<="00000011";st<="11";end if;
when "11"=> if cnt>0 then cnt<=cnt-1;else cnt<="00000000";st<="00";stx<=st0;end if; when others=>null; end case; end if;
end process; state<=st;
实验内容与要求一条主干道,一条乡间公路,组成十字路口,要求保证主干道先通行,有MR(主红),MY(主黄),MG(主绿),CR(乡红),CY(乡黄),CG(乡绿)。六盏交通灯需要控制;交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号s=1,其余时间s=0。
count<=cnt; end architecture;
(2)交通灯状态转移模块deng library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity deng is
port(state:in std_logic_vector(1 downto 0); mg,cr,my,cg,mr,cy:out std_logic ) ; end entity deng ;
architecture one of deng is begin
process(state) begin
case state is
when "00"=>mg<='1';cr<='1';my<='0';mr<='0';cg<='0';cy<='0';
when "01"=>mg<='0';cr<='1';my<='1';mr<='0';cg<='0';cy<='0';
when "10"=>mg<='0';cr<='0';my<='0';mr<='1';cg<='1';cy<='0';
when "11"=>mg<='0';cr<='0';my<='0';mr<='1';cg<='0';cy<='1'; end case; end process;
end architecture one;
(5) 八位二进制向八位BCD译码的译码模块yimaqi library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity yimaqi is
port(count:in std_logic_vector(7 downto 0); p:out std_logic_vector(7 downto 0)); end entity yimaqi;
architecture one of yimaqi is begin
process(count)
variable h:std_logic_vector(7 downto 0); begin h:=count;
if h<10 then h:=h;
elsif h>=10 and h<20 then h:=h+6; elsif h>=20 and h<30 then h:=h+12;
实验内容与要求一条主干道,一条乡间公路,组成十字路口,要求保证主干道先通行,有MR(主红),MY(主黄),MG(主绿),CR(乡红),CY(乡黄),CG(乡绿)。六盏交通灯需要控制;交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号s=1,其余时间s=0。
elsif h>=30 and h<40 then h:=h+18; elsif h>=40 and h<50 then h:=h+24; elsif h>=50 and h<60 then h:=h+30; elsif h>=60 and h<70 then h:=h+36; end if; p<=h;
end process;
end architecture one;
(6)动态数据选择器模块dongtaism library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity dongtaism is port(clk2:in std_logic;
count:in std_logic_vector(7 downto 0);
y:out std_logic_vector(2 downto 0);pu:out std_logic_vector(3 downto 0)); end entity dongtaism;
architecture one of dongtaism is
signal y1:std_logic_vector(2 downto 0); type states is (st0,st1); signal stx1:states; begin
process(clk2) begin
if clk2'event and clk2='1' then
case stx1 is when st0=>y1<="000";pu<=count(3 downto 0);stx1<=st1; when st1=>y1<="001";pu<=count(7 downto 4);stx1<=st0; when others=>stx1<=st0; end case;end if;end process; y<=y1; end architecture one ; 五、实验步骤
1.建立工作库文件夹和编辑设计文件 2.编译过程 3.系统仿真
(1)建立新的波形激励文件。
(2)在波形编辑器窗口添加节点。
(3)通过Edit->End Time 来设定仿真结束时间。 (4)点击save保存。
(5)通过Tools下的Simulator Tools项进行仿真,然后观察输出波形。 4.引脚锁定
(1)通过Assignment->Assignment Editor->Pin查找到引脚进行引脚的锁定。 5.编程下载
(1)选择Tools->Programmer菜单,点击Hardware Setup窗口完成硬件设置。 (2)点击Start开始编程下载。
实验内容与要求一条主干道,一条乡间公路,组成十字路口,要求保证主干道先通行,有MR(主红),MY(主黄),MG(主绿),CR(乡红),CY(乡黄),CG(乡绿)。六盏交通灯需要控制;交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号s=1,其余时间s=0。
6.硬件测试
六、仿真波形分析
下列各图中clk为计数器时钟上升沿触发,clk2为动态扫描时钟上升沿触发,pu为数码管输出,y[1]对应计数值十位,y[0]对应计数值个位。
A1 图
1
A2 图
2
A3 图3
实验内容与要求一条主干道,一条乡间公路,组成十字路口,要求保证主干道先通行,有MR(主红),MY(主黄),MG(主绿),CR(乡红),CY(乡黄),CG(乡绿)。六盏交通灯需要控制;交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号s=1,其余时间s=0。
图
4
图
5
图6
1、 A1以前s=0、mg=1、 my=0、mr=0、cg=0、cy=0、cr=1、数码管显示0,此时系统处以主绿乡红(mgcr)主干道通行状态。 2、 A1-A2: s=1、mg=1、 my=0、mr=0、cg=0、cy=0、cr=1、数码管显示60-00,此时系统处以主绿乡红(mgcr)主干道通行状态且持续时间为61秒。
3、 A2-A3:s=1、mg=0、 my=1、mr=0、cg=0、cy=0、cr=1、数码管显示03-00,此时系统处以主黄乡红(mycr)状态且持续时间为4秒。 4、 A3-A4: s=1、mg=0、 my=0、mr=1、cg=1、cy=0、cr=0、数码管显示19-00,此时系统处以主红乡绿(mrcg)乡间道路通行状态且持续时间为20秒。
5、A4-A5: s=1、mg=0、 my=0、mr=1、cg=0、cy=1、cr0、数码管显示03-00,此时系统处以主红乡黄(mrcy)状态且持续时间为4秒。
6、A5以后回到2,直到A6处s由1变为0,系统回到1主绿乡红(mgcr)主干道通行状态。
实验内容与要求一条主干道,一条乡间公路,组成十字路口,要求保证主干道先通行,有MR(主红),MY(主黄),MG(主绿),CR(乡红),CY(乡黄),CG(乡绿)。六盏交通灯需要控制;交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号s=1,其余时间s=0。
七、硬件测试
引脚锁定:clk锁定为引脚79(2hz),clk2锁定为引脚78(1000hz),y[2] 锁定为引脚14(Y3),y[1] 锁定为引脚13(Y2),y[0] 锁定为引脚12(Y1),pu(3 downto 0) 锁定为引脚11、8、9、10(DX、CX、BX、AX),s锁定为引脚55(电平3),mg锁定为引脚208(LED8),cr锁定为引脚206(LED7), my锁定为引脚207(LED6)mr锁定为引脚204(LED5),cg锁定为引脚170(LED4),cy锁定为引脚169(LED3)。
测试结果:电平3为低电平时数码管显示0,LED8亮、LED7亮、LED6灭、LED5灭、LED4灭、LED3灭。
电平3为高电平且持续时间较长(大于88秒)时1、数码管显示60-00,LED8灭、LED7亮、LED6亮、LED5灭、LED4灭、LED3灭;2、数码管显示03-00 ,LED8灭、LED7亮、LED6亮、LED5灭、LED4灭、LED3灭;3、数码管显示19-00 ,LED8灭、LED7灭、LED6灭、LED5亮、LED4亮、LED3灭;4、数码管显示3-0 ,LED8灭、LED7灭、LED6灭、LED5亮、LED4、LED3亮;5、回到1。 电平3为高电平持续时间较短时(小于88秒)则在在电平变为低电平时则数码管立即显示0,LED8亮、LED7亮、LED6灭、LED5灭、LED4灭、LED3灭。
结果分析:平时系统停留在MGCR状态,当s=1时,经MYCR(黄灯)状态转到MRCG状态,且MGCR为61秒;一旦s=0系统将脱离MRCG状态。随即由MRCY进入MGCR状态,即使s一直为1,MRCG最长持续时间为20秒。交通灯由绿变红有4秒黄灯亮的时间间隔,由红到绿没有时间间隔。
八、实验小结
这次实验使我更进一步地熟悉了VHDL硬件描述语言的设计思想,同时通过对程序的调试也使自己对VHDL语言的语法,结构和基本语句有了更深刻的了解。在设计较复杂数字电路系统时最好采用分层设计的方法,分为各个功能模块,逐个进行仿真,最后通过顶层文件调用各个底层文件完成设计,这样设计程序的可移植性好如八位二进制向八位BCD译码的译码模块可以作为它用,程序也便于修改如程序要增加一些功能也只需加入相应的模块即可。
下一篇:网络营销目标市场的选择