--复位的实现
ELSIF CP='1' AND CP 'EVENT THEN
IF JJ='1' THEN GL<=\--紧急状态的实现
ELSE --状态转换及状态中输出计时的实现 CASE S IS
WHEN S0=>
IF C>1 THEN C<=C-1; ELSE
S<=S1;C<=X\ T1C<=X\ END IF;
IF T1C>1 THEN T1C<=T1C-1; END IF;
IF T2C>1 THEN T2C<=T2C-1; END IF;
WHEN S1=>
IF C>1 THEN C<=C-1; ELSE
S<=S2;C<=X\ T1C<=X\ END IF;
IF T1C>1 THEN T1C<=T1C-1; END IF;
IF T2C>1 THEN T2C<=T2C-1; END IF;
WHEN S2=>
IF C>1 THEN C<=C-1; ELSE
S<=S3;C<=X\ T1C<=X\ END IF;
IF T1C>1 THEN T1C<=T1C-1; END IF;
IF T2C>1 THEN T2C<=T2C-1; END IF;
WHEN S3=>
IF C>1 THEN
C<=C-1; ELSE
S<=S0;C<=X\ T1C<=X\ END IF;
IF T1C>1 THEN T1C<=T1C-1; END IF;
IF T2C>1 THEN T2C<=T2C-1; END IF; END CASE; END IF; END IF; END PROCESS;
PROCESS(GL,ZL,T1C,T2C)--影子端口的赋值 BEGIN
SGL<=GL;SZL<=ZL;ST1C<=SAM(T1C);ST2C<=SAM(T2C); END PROCESS;
PROCESS(CPIN,R)—分频语言 BEGIN
IF R='1' THEN
CPCT<=10000000;
ELSIF CPIN='1' AND CPIN 'EVENT THEN IF CPCT=0 THEN
CPCT<=10000000;CP<=NOT CP; ELSE
CPCT<=CPCT-1; END IF; END IF;
END PROCESS;
END JGT;
LIBRARY IEEE; --所用的LCD模块的VHDL程序 USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity JTDLCD is
port (CPIN,R,BUSY :IN STD_LOGIC;
EW,SN :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
EWRYG,SNRYG : IN STD_LOGIC_VECTOR(2 DOWNTO 0); CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC; DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
end entity ;
architecture JGT of JTDLCD is
TYPE STATES IS (S0,S1,S2,S3,S4); SIGNAL S: STATES;
SIGNAL LCDPT : INTEGER RANGE 0 TO 10; SIGNAL CPCT : INTEGER RANGE 0 TO 65535; SIGNAL CP: STD_LOGIC;
SIGNAL ASCEW,ASCSN : STD_LOGIC_VECTOR(7 DOWNTO 0); begin
PROCESS(CPIN,R) BEGIN
CLK<=CPIN; IF R='1' THEN CPCT<=65535;
ELSIF CPIN='1' AND CPIN 'EVENT THEN IF CPCT=0 THEN
CPCT<=65535;CP<=NOT CP; ELSE
CPCT<=CPCT-1; END IF; END IF;
END PROCESS; --分频为500US周期
--主进程:拟采用500us时钟,即在500us后完成状态转换,修改LCDPT指针 --S0:初始状态,在R=1时,处于S0状态,LCDPT=0 -- 流程: 输出rst=1, 转S1
--S1:输出RST=0;判断BUSY=0? :Y: LCDPT+1;LCDPT到固定最后?::N: ->S2 -- ::Y: 转S3 -- ;N; NULL --S2:给出STROBE信号。转S1
--S1,S2完成初始化固定显示的功能
PROCESS(CP,R) BEGIN
IF R='1' THEN
S<=S0;LCDPT<=0;RST<='1';
ELSIF CP='1' AND CP 'EVENT THEN CASE S IS
WHEN S0=> S<=S1;LCDPT<=0;RST<='1'; WHEN S1=> RST<='0';STROBE<='0'; IF BUSY='0' THEN
LCDPT<=LCDPT+1; IF LCDPT=5 THEN S<=S3; ELSE
S<=S2; END IF; END IF;
WHEN S2=> S<=S1;STROBE<='1'; --S3~S4完成扫描显示功能
--S3:BUSY=0? :Y: LCDPT循环+1 ,转S4 --S4:给出STROBE信号,转S3 WHEN S3=> STROBE<='0'; IF BUSY='0' THEN
IF LCDPT=10 THEN LCDPT<=5; ELSE
LCDPT<=LCDPT+1; END IF; S<=S4; END IF;
WHEN S4=> STROBE<='1';S<=S3; WHEN OTHERS=> NULL; END CASE; END IF;
END PROCESS;
--选择输出进程(LCDPT) --LCDPT=0,NULL
-- =1~4 显示EW SN E 45H,5 W57H,6
PROCESS(LCDPT) BEGIN
CASE LCDPT IS WHEN 0 => NULL;
S53H,9 N4EH,10 WHEN 1=> DATA<=\WHEN 2=> DATA<=\WHEN 3=> DATA<=\WHEN 4=> DATA<=\ --LCDPT=5,6 EWBCD码 EH,5 EL,6 --LCDPT=7 EW 红绿灯 R,4
--LCDPT=89 SNBCD码 SH,9 SL,10
--LCDPT=10 SN 红绿灯。 G,8 R52H;Y59H;G47H
WHEN 5=>DATA<=\WHEN 6=>DATA<=\WHEN 7=>DATA<=ASCEW;ADDR<=\
WHEN 8=>DATA<=\WHEN 9=>DATA<=\WHEN 10=>DATA<=ASCSN;ADDR<=\WHEN OTHERS=> NULL; END CASE;
END PROCESS;
PROCESS(EWRYG) BEGIN
CASE EWRYG IS
WHEN \WHEN \WHEN \WHEN OTHERS=> NULL; END CASE; END PROCESS;
PROCESS(SNRYG) BEGIN
CASE SNRYG IS
WHEN \WHEN \WHEN \WHEN OTHERS=> NULL; END CASE; END PROCESS;
end architecture JGT;
三.仿真图形