【正确答案】根据题意,该控制电路有时钟输入端(cp)和系统清0输入端(ncr),输出端子有两个方向的红、黄、绿灯共六个(ew,y_ew,g_ew,r_sn,y_sn,g_sn)和东西、南北方向的计数显示(qhew,qlew,qhsn,qlsn)。可以在一个进程中完成设计,在下面的VHDL程序中,信号sn控制南北和东西方向的转换,sn=0表示东西方向通行,否则为南北方向通行,信号i控制绿灯和黄灯的计数转换,i=0表示绿灯计数时间,否则为黄灯计数时间。整个电路的VHDL程序如下:
LIBRARY ieee;
USE ieee.Std_logic_1164.ALL;
USE ieee.Std_logic_arith.ALL;
USE ieee.Std_logic_unsigned.ALL;
ENTITY xiti811 IS
PORT(cp,ncr:IN Std_logic;r_ew,y_ew,g_ew,r_sn,y_sn,g_sn:OUT Std_logic;qhew,qlew,qhsn,qlsn:BUFFER Std_logic_vector(3 downto 0));
END xiti811:
ARCHITECTURE xiti811_ar OF xiti811 IS
SIGNAL sn,i,oc:Std_logic;
SIGNAL qh,q1:Std_logic_vector(3 downto 0);
BEGIN
PROCESS(cp, ner)
BEGIN
IF ncr='0' THEN
qh<="0000";q1<="0000";sn<='0';i<='0';
ELSIF cp 'EVENT AND cp='1' THEN
IF sn='0' THEN一一东西方向通行
IF i='0' THEN——东西方向绿灯亮
r_ew<='0';y_ew<='0';g_ew<='1';r_sn<='1';y_sn<='0';g_sn<='0';
IF q1<"1000" THEN
q1<=q1+"0001";oc<='0';qlew<=q1+"0001";qlsn<=q1+"0001";
ELSIF q1="1000" THEN
q1<=q1+"0001";oc<='1';qlew<=q1+"0001";qlsn<=q1+"0001";
——东西绿灯和南北红灯的个位计数器达到9
ELSE
q1<="0000";oc<='0';qlew<="0000";qlsn<="0000";
END IF;
IF oc='1' THEN
IF qh<"0010" THEN
qh<=qh+"0001" ;qhew<=qh+"0001";qhsn<=qh+"0001";
ELSIF qh="0010" THEN
qh<="0000";i<='1';qhew<="0000";qhsn<="0011";
——东西绿灯和南北红灯计数值达到29,东西准备转换到黄灯,南北红灯继续计数
r_ew<='0';y_ew<='1';g_ew<='0';r_sn<='1';y_sn<='0';g_sn<='0';
END IF ;
ELSE
NULL;
END IF ;
ELSIF ql<"0100" THEN ——东西方向黄灯亮
r_ew<='0'; y_ew<='1'; g_ew<='0'; r_sn<='1'; y_sn<='0'; g_sn<='0';
ql<= ql+ "0001" ; qlew<= ql+"0001 "; qlsn< = ql+"0001" ;
ELSE
r_ew<='1'; y_ew<='0'; g_ew<='0'; r_sn<='0'; y_sn<='0'; g_sn<='1';
ql<="0000" ; i<='0'; sn<='1'; qlew<="0000"; qlsn<="0000"; qhsn<= "0000" ;
END IF;
ELSIF i='0' THEN ——转换到南北方向,绿灯亮
r_ew<='1'; y_ew<='0'; g_ew<='0'; r_sn<='0'; y_sn<='0'; g_sn<='1';
IF ql<"1000" THEN
ql<=ql+ "0001" ; oc<='0'; qlew<=ql+"0001" ; qlsn<= ql+ "0001" ;
ELSIF ql= "1000" THEN
ql<= ql+"0001"; oc<='1'; qlew<=ql+"0001" ; qlsn<= ql+"0001";
ELSE
ql<= "0000" ; oc<='0'; qlew<= "0000" ; qlsn<= "0000" ;
END IF;
IF oc='1' THEN
IF qh<"0010" THEN
qh<= qh+ "0001" ; qhew<= qh+ "0001" ; qhsn<= qh+ "0001" ;
ELSIF qh="0010" THEN
qh<= "0000" ; i<= '1' ; qhew<= "0011" ; qhsn<= "0000" ;
r_ew<='1'; y_ew<='0'; g_ew<='0'; r_sn<='0'; y_sn<='1'; g_sn<='0';
END IF;
ELSE
NULL;
END IF;
ELSIF ql< "0100" THEN ——南北方向黄灯亮,东西红灯继续
r_ew<='1'; y_ew<='0'; g__ew<='0 '; r_sn<='0'; y_sn<='1'; g_sn<='0';
ql<=ql+"0001" ; qlew<=ql+"0001" ; qlsn<= ql+"0001" ;
ELSE
r_ew<='0' ; y_ew<='0'; g_ew<='1' ; r_sn<='1'; y_sn<='0'; g_sn<='0';
ql<= "0000" ; i<= '0'; sn<='0' ; qlew<= "0000" ; qlsn<= "0000" ; qhew
【答案解析】