EDA 实验报告
学号:110800311 班级:信通3班
姓名:朱文顺
实验七 交通灯控制电路的设计
一、实验目的:
进一步学习复杂数字电路的设计方法,提高利用硬件描述语言进行电路设计的技巧和熟练程度。
二、实验要求及原理:
1、 满足图1顺序工作流程。图中设南北方向的红、黄、绿灯分别为NSR 、NSY 、NSG ,东西方向的红、黄、绿灯分别为EWR 、EWY 、EWG 。它们的工作方式有些必须是并行进行的,即南北方向绿灯亮,东西方向红灯亮;南北方向黄灯亮,东西方向红灯亮;南北方向红灯亮,东西方向绿灯亮;南北方向红灯亮,东西方向黄红灯亮。
图1 交通灯顺序工作流程图
2、 应满足两个方向的工作时序:即东西方向亮红灯时间应等于南北方向亮黄、绿灯时间之和,南北方向亮红灯时间应等于东西方向亮黄、绿灯时间之和。时序流程图2所示。
图2中,假设每个单位时间为3秒,则南北、东西方向绿、黄、红灯亮时间分别15秒、3秒、18秒,一次循环为36秒。其中红灯亮的时间为绿灯、黄灯亮的时间之和。
1 2 3 4 5 6 7 8 9 10 11 12 1 2
3 4 5 6 NSG
t
图2 交通灯时序工作流程图
3、十字路口要有数字显示,作为时间提示,以便人们更直观地把握时间。具体为:当某方向红灯亮时,置显示器为某值,然后以每秒减1计数方式方式工作,直至减到数为“0”,十字路口红、绿灯交换,一次工作循环结束,进入下一步某方向地工作循环。
例如:当南北方向从黄灯转换成红灯时,置南北方向数字显示为24,并使数显计数器开始减“1”计数,当减到“0”,时,此时红灯灭,而南北方向的绿灯亮;同时,东西方向的红灯亮,并置东西方向的数显为24。
三、实验内容
1、根据实验要求及原理1、2画出交通指示灯控制电路原理框图。
提示:两个方向的控制电路可以共用一个24进制计数器实现。
2、用VHDL硬件描述语言层次化设计方法进行顶层文件和各模块电路的设计。
产生1秒信号输出文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY miao IS
PORT( CLK:IN STD_LOGIC; 时钟信号输入
EN:OUT STD_LOGIC); 2分频使能信号输出
END miao;
ARCHITECTURE one OF miao IS
SIGNAL CNT:INTEGER RANGE 0 TO 1;
SIGNAL FOUT:STD_LOGIC;
BEGIN
P1:PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1'
THEN
IF
CNT=1
THEN
FOUT<='1';
CNT<=0;
ELSIF CNT<1
THEN
CNT<=CNT+1;
FOUT<='0';
END IF;
END IF;
END PROCESS P1;
EN<=FOUT;
END one;
东西南北交通灯显示文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ls164 IS
PORT( CLKIN:IN STD_LOGIC; 2分频信号输入EWG:OUT STD_LOGIC; 东西方向绿灯
EWY:OUT STD_LOGIC; 东西方向黄灯
EWR:OUT STD_LOGIC; 东西方向红灯
NSG:OUT STD_LOGIC; 南北方向绿灯
NSY:OUT STD_LOGIC; 南北方向黄灯
NSR:OUT STD_LOGIC); 南北方向红灯END ls164;
ARCHITECTURE one OF ls164 IS
SIGNAL CNT :INTEGER RANGE 1 TO 12;
BEGIN
P1:PROCESS(CLKIN)
BEGIN
IF CLKIN'EVENT AND CLKIN='1'
THEN
IF CNT>11
THEN
CNT<=1;
ELSE
CNT<=CNT+1;
END IF;
END IF;
END PROCESS P1;
P2:PROCESS(CNT)
BEGIN
IF CNT<6
THEN
NSG<='1';NSY<='0';NSR<='0';
EWG<='0';EWY<='0';EWR<='1';
ELSIF CNT=6
THEN
NSG<='0';NSY<='1';NSR<='0';
EWG<='0';EWY<='0';EWR<='1';
ELSIF CNT>6 AND CNT<12
THEN
NSG<='0';NSY<='0';NSR<='1';
EWG<='1';EWY<='0';EWR<='0';
ELSE
NSG<='0';NSY<='0';NSR<='1';
EWG<='0';EWY<='1';EWR<='0';
END IF;
END PROCESS P2;
END one;
数码管扫描显示文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY shaomiao IS
PORT(
SHAOMIAO:IN STD_LOGIC; 数码管扫描时钟信号
CLKIN:IN STD_LOGIC; 秒信号输入
EWRIN :IN STD_LOGIC; 东西方向红灯使能信号
NSRIN :IN STD_LOGIC; 南北方向红灯使能信号
WEIXUAN:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); 数码管位选信号
DUANXUAN:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); 数码管段选信号END shaomiao;
ARCHITECTURE one OF shaomiao IS
SIGNAL INPUT :INTEGER RANGE 0 TO 12;
SIGNAL GEWEI :STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL SHIWEI :STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL CNT :INTEGER RANGE 0 TO 2;
BEGIN
P1:PROCESS(SHAOMIAO,EWRIN,NSRIN)
BEGIN
IF SHAOMIAO'EVENT AND SHAOMIAO='1'
THEN
IF EWRIN='1'
THEN
CNT<=CNT+1;
WEIXUAN<="000"; DUANXUAN<=GEWEI;
IF CNT=2
THEN
CNT<=0;
WEIXUAN<="001"; DUANXUAN<=SHIWEI;
END IF;
ELSIF NSRIN='1'
THEN
CNT<=CNT+1;
WEIXUAN<="110"; DUANXUAN<=GEWEI;
IF CNT=2
THEN
CNT<=0;
WEIXUAN<="111"; DUANXUAN<=SHIWEI;
END IF;
END IF;
END IF;
END PROCESS P1;
P2:PROCESS(CLKIN)
BEGIN
IF CLKIN'EVENT AND CLKIN='1'
THEN
IF EWRIN='1' OR NSRIN='1'
THEN
IF INPUT=12
THEN
INPUT<=1;
ELSE
INPUT<=INPUT+1;
END IF;
END IF;
END IF;
END PROCESS ;
PROCESS(INPUT)
BEGIN
CASE INPUT IS
WHEN 0 => GEWEI<="1011011";SHIWEI<="0000110";
WHEN 1 => GEWEI<="0000110";SHIWEI<="0000110";
WHEN 2 => GEWEI<="0111111";SHIWEI<="0000110";
WHEN 3 => GEWEI<="1101111";SHIWEI<="0111111";
WHEN 4 => GEWEI<="1111111";SHIWEI<="0111111";
WHEN 5 => GEWEI<="0000111";SHIWEI<="0111111";
WHEN 6 => GEWEI<="1111101";SHIWEI<="0111111";
WHEN 7 => GEWEI<="1101101";SHIWEI<="0111111";
WHEN 8 => GEWEI<="1100110";SHIWEI<="0111111";
WHEN 9 => GEWEI<="1001111";SHIWEI<="0111111";
WHEN 10 => GEWEI<="1011011";SHIWEI<="0111111";
WHEN 11 => GEWEI<="0000110";SHIWEI<="0111111";
WHEN 12 => GEWEI<="0111111";SHIWEI<="0111111";
WHEN OTHERS => NULL;
END CASE;
END PROCESS ;
END one;
例化文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY jiaotongdeng IS
PORT( clk :IN STD_LOGIC;
SHAOMIAOXINHAO:IN STD_LOGIC;
EWG1:OUT STD_LOGIC;
EWY1:OUT STD_LOGIC;
EWR1:OUT STD_LOGIC;
NSG1:OUT STD_LOGIC;
NSY1:OUT STD_LOGIC;
NSR1:OUT STD_LOGIC;
WEIXUAN1:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
DUANXUAN1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END jiaotongdeng ;
ARCHITECTURE one OF jiaotongdeng IS
COMPONENT miao IS
PORT( CLK:IN STD_LOGIC;
EN:OUT STD_LOGIC);
END COMPONENT;
COMPONENT ls164 IS
PORT( CLKIN:IN STD_LOGIC;
EWG:OUT STD_LOGIC;
EWY:OUT STD_LOGIC;
EWR:OUT STD_LOGIC;
NSG:OUT STD_LOGIC;
NSY:OUT STD_LOGIC;
NSR:OUT STD_LOGIC);
END COMPONENT;
COMPONENT shaomiao IS
PORT(
SHAOMIAO:IN STD_LOGIC;
CLKIN:IN STD_LOGIC;
EWRIN :IN STD_LOGIC;
NSRIN :IN STD_LOGIC;
WEIXUAN:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
DUANXUAN:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END COMPONENT;
SIGNAL ewr2 : STD_LOGIC;
SIGNAL nsr2 : STD_LOGIC;
signal enable:std_logic;
BEGIN
U1: miao PORT MAP(CLK=>clk,EN=>enable);
U2:ls164 PORT MAP(CLKIN=>enable,EWG=>EWG1,EWY=>EWY1,EWR=>ewr2,NSR=>nsr2,NSG=>NSG1, NSY=>NSY1);
U3: shaomiao PORT MAP( SHAOMIAO=>SHAOMIAOXINHAO,CLKIN=>clk,EWRIN=>ewr2,NSRIN=>nsr2,WEI XUAN=>WEIXUAN1,DUANXUAN=>DUANXUAN1);
EWR1<=ewr2;
NSR1<=nsr2;
END one;
3、用QuartusII对设计进行编译、综合、仿真,给出仿真波形和时序分析数据(不包括数码显示部分)。
产生1秒信号输出仿真波形:
东西南北交通灯显示文件
4、通过QuartusII集成环境,将设计下载到实验电路上进行硬件测试。
管脚锁定:
数字显示所需管脚参考实验六。
5、画出完整的交通灯控制电路原理框图(含数码显示部分)。
6、修改上述内容2的设计,增加数码显示部分。
注意:两方向的计数要求分别显示在数码管1、2和数码管7、8上。
7、用QuartusII对设计进行编译、综合、仿真,给出仿真波形和时序分析数据。
时序分析:
东西南北方向的灯按12种状态轮流点亮(其中产生一些毛刺),而数码管则在这一周期不断进行减一得显示。
四、思考题:
1、控制电路除用有限状态机实现外,还可以采用什么方法实现?
可以用循环语句来实现控制
2、如果增加夜间显示(即全部黄灯闪烁),电路该怎样设计?
应该在东西南北交通灯文件增加一个控制开关语句和对数码管的控制语句。当开关闭合时,只让交通灯当中的黄灯闪烁接收秒脉冲,其余灯的电平均置为零,数码管位选全部置高电平。