LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JPXSKZ IS PORT(BCDOUT:IN STD_LOGIC_VECTOR(11 DOWNTO 0); KEYC:IN STD_LOGIC; KEY:IN STD_LOGIC; QA:IN STD_LOGIC_VECTOR(11 DOWNTO 0); DATAOUT:OUT STD_LOGIC_VECTOR(11 DOWNTO 0)); END ENTITY JPXSKZ; ARCHITECTURE ART OF JPXSKZ IS SIGNAL STATE:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL QQA:STD_LOGIC_VECTOR(11 DOWNTO 0); BEGIN CHOSEKEY:PROCESS(KEYC)IS VARIABLE TEMP:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN IF RISING_EDGE(KEYC) THEN IF TEMP="10" THEN TEMP:="00"; ELSE TEMP:=TEMP+'1'; END IF; END IF; STATE<=TEMP; END PROCESS CHOSEKEY; CHOSEDISPLAY:PROCESS(STATE)IS BEGIN CASE STATE IS WHEN "00"=>DATAOUT<=QQA; WHEN "01"=>DATAOUT<=BCDOUT; WHEN "10"=>DATAOUT<=QA; WHEN OTHERS=>NULL; END CASE; END PROCESS CHOSEDISPLAY; KEYBOARD:PROCESS(KEY,STATE) VARIABLE TEMPA,TEMPB,TEMPC:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN WAIT UNTIL KEY='1'; IF STATE="00" THEN IF TEMPA="1001" THEN TEMPA:="0000"; TEMPB:=TEMPB+'1'; IF TEMPB="1001" THEN TEMPB:="0000"; TEMPC:=TEMPC+'1'; IF TEMPC="1001" THEN TEMPC:="0000"; END IF; END IF; ELSE TEMPA:=TEMPA+'1'; END IF; ELSE NULL; END IF; QQA(11 DOWNTO 8)<=TEMPC; QQA(7 DOWNTO 4)<=TEMPB; QQA(3 DOWNTO 0)<=TEMPA; END PROCESS KEYBOARD; END ARCHITECTURE ART;