¡¶EDA¼¼ÊõʵÓý̳Ì(µÚÎå°æ)¡·Ï°Ìâ´ð°¸(µÚ1~10ÕÂ)--ÅË ÏÂÔØ±¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/12/20 22:50:28ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADC0809 IS

PORT(D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --À´×Ô0809ת»»ºÃµÄ8λÊý¾Ý CLK: IN STD_LOGIC; --״̬»ú¹¤×÷ʱÖÓ RST: IN STD_LOGIC; --ϵͳ¸´Î»¿ØÖÆ

EOC: IN STD_LOGIC; --ת»»×´Ì¬Ö¸Ê¾£¬µÍµçƽ±íʾÕýÔÚת»» ALE:OUT STD_LOGIC; --8¸öÄ£ÄâÐźÅͨµÀµØÖ·Ëø´æÐźŠSTART:OUT STD_LOGIC; --ת»»¿ªÊ¼ÐźÅ

OE:OUT STD_LOGIC; --Êý¾ÝÊä³öÈý̬¿ØÖÆÐźŠADDA:OUT STD_LOGIC; --ÐźÅͨµÀ×îµÍλ¿ØÖÆÐźŠ--LOCK_T:OUT STD_LOGIC; --¹Û²ìÊý¾ÝËø´æÊ±ÖÓ

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8λÊý¾ÝÊä³ö END ADC0809;

ARCHITECTURE behav OF ADC0809 IS

TYPE states IS(s0,s1,s2,s3,s4); --¶¨Òå¸÷״̬×ÓÀàÐÍ SIGNAL cs,next_state: states:=s0;

SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL LOCK: STD_LOGIC;--ת»»ºóÊý¾ÝÊä³öËø´æÊ±ÖÓÐźÅ

attribute keep : boolean;

attribute keep of LOCK : signal is true; BEGIN

ADDA<='0';--µ±ADDA<='0'£¬Ñ¡ÔñÄ£ÄâÐźÅͨµÀIN0£»µ±ADDA<='1'£¬ÔòÑ¡ÔñͨµÀIN1 --LOCK_T<=LOCK;

COM: PROCESS(cs,EOC) BEGIN --¹æ¶¨¸÷״̬ת»»·½Ê½ CASE cs IS

WHEN s0=> ALE<='0';START<='0';OE<='0';LOCK<='0';next_state<=s1; --0809³õʼ»¯ WHEN s1=> ALE<='1';START<='1';OE<='0';LOCK<='0';next_state<=s2 ;--Æô¶¯²ÉÑù WHEN s2=> ALE<='0';START<='0';OE<='0';LOCK<='0';

IF(EOC='1') THEN next_state<=s3; --EOC=1±íÃ÷ת»»½áÊø ELSE next_state<=s2; END IF; --ת»»Î´½áÊø£¬¼ÌÐøµÈ´ý

WHEN s3=> ALE<='0';START<='0';OE<='1';LOCK<='0';next_state<=s4;--¿ªÆôOE£¬Êä³öת»»ºÃµÄÊý¾Ý

WHEN s4=> ALE<='0';START<='0';OE<='1';LOCK<='1';next_state<=s0; WHEN OTHERS=> ALE<='0';START<='0';OE<='0';LOCK<='0';next_state<=s0; END CASE; END PROCESS COM;

REG:PROCESS(CLK,RST) BEGIN

IF(RST='1') THEN cs<=s0;

ELSIF(CLK'EVENT AND CLK='1') THEN cs<=next_state;END IF; END PROCESS REG; --ÓÉÐźÅcs½«µ±Ç°×´Ì¬Öµ´ø³ö´Ë½ø³Ì£ºREG

LATCH1: PROCESS(LOCK) --´Ë½ø³ÌÖУ¬ÔÚLOCKµÄÉÏÉýÑØ£¬½«×ª»»ºÃµÄÊý¾ÝËøÈë BEGIN

IF LOCK='1' AND LOCK'EVENT THEN REGL<=D;END IF; END PROCESS LATCH1; Q<=REGL; END behav;

10-5 ¸ø³öÀý10-3µÄÍêÕû³ÌÐò¡£

--10-5 ¸ø³öÀý10-3(COM1²úÉú´Î̬ºÍCOM2Êä³öÃüÁîµÄ3½ø³Ì״̬»ú)ÍêÕû³ÌÐò LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADC0809 IS

PORT(D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --À´×Ô0809ת»»ºÃµÄ8λÊý¾Ý CLK: IN STD_LOGIC; --״̬»ú¹¤×÷ʱÖÓ RST: IN STD_LOGIC; --ϵͳ¸´Î»¿ØÖÆ

EOC: IN STD_LOGIC; --ת»»×´Ì¬Ö¸Ê¾£¬µÍµçƽ±íʾÕýÔÚת»» ALE:OUT STD_LOGIC; --8¸öÄ£ÄâÐźÅͨµÀµØÖ·Ëø´æÐźŠSTART:OUT STD_LOGIC; --ת»»¿ªÊ¼ÐźÅ

OE:OUT STD_LOGIC; --Êý¾ÝÊä³öÈý̬¿ØÖÆÐźŠADDA:OUT STD_LOGIC; --ÐźÅͨµÀ×îµÍλ¿ØÖÆÐźŠLOCK_T:OUT STD_LOGIC; --¹Û²ìÊý¾ÝËø´æÊ±ÖÓ

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8λÊý¾ÝÊä³ö END ADC0809;

ARCHITECTURE behav OF ADC0809 IS

TYPE states IS(st0,st1,St2,st3,st4); --¶¨Òå¸÷״̬×ÓÀàÐÍ SIGNAL cs,next_state: states:=st0; SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL LOCK: STD_LOGIC;--ת»»ºóÊý¾ÝÊä³öËø´æÊ±ÖÓÐźŠBEGIN

ADDA<='1';--µ±ADDA<='0'£¬Ñ¡ÔñÄ£ÄâÐźÅͨµÀIN0£»µ±ADDA<='1'£¬ÔòÑ¡ÔñͨµÀIN1 LOCK_T<=LOCK;

COM1: PROCESS(cs,EOC) BEGIN --ÒëÂë²úÉú´Î̬ CASE cs IS

WHEN st0=> next_state<=st1; --0809³õʼ»¯ WHEN st1=> next_state<=st2 ;--Æô¶¯²ÉÑù

WHEN st2=> IF(EOC='1') THEN next_state<=st3;--EOC=1±íÃ÷ת»»½áÊø ELSE next_state<=st2; END IF; --ת»»Î´½áÊø£¬¼ÌÐøµÈ´ý WHEN st3=> next_state<=st4;--¿ªÆôOE£¬Êä³öת»»ºÃµÄÊý¾Ý WHEN st4=> next_state<=st0; WHEN OTHERS=>next_state<=st0; END CASE; END PROCESS COM1;

COM2: PROCESS(cs) BEGIN --²úÉúÊä³öÃüÁî CASE cs IS

WHEN st0=> ALE<='0';START<='0';LOCK<='0';OE<='0'; WHEN st1=> ALE<='1';START<='1';LOCK<='0';OE<='0'; WHEN st2=> ALE<='0';START<='0';LOCK<='0'; OE<='0'; WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1'; WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1'; WHEN OTHERS=> ALE<='0';START<='0';LOCK<='0'; END CASE; END PROCESS COM2; REG:PROCESS(CLK,RST) BEGIN

IF(RST='1') THEN cs<=next_state;

ELSIF(CLK'EVENT AND CLK='1') THEN cs<=next_state; END IF;

END PROCESS REG; --ÓÉÐźÅcs½«µ±Ç°×´Ì¬Öµ´ø³ö´Ë½ø³Ì£ºREG

LATCH1: PROCESS(LOCK) --´Ë½ø³ÌÖУ¬ÔÚLOCKµÄÉÏÉýÑØ£¬½«×ª»»ºÃµÄÊý¾ÝËøÈë BEGIN

IF LOCK='1' AND LOCK'EVENT THEN REGL<=D; END IF; END PROCESS LATCH1; Q<=REGL; END behav;

10-6 ÓÃMealy»úÀàÐÍ£¬Ð´³ö¿ØÖÆADC0809²ÉÑùµÄ״̬»ú¡£

--10-6 ÓÃMealy»úÀàÐÍ£¬Ð´³ö¿ØÖÆADC0809²ÉÑùµÄ״̬»ú¡£ LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADC0809 IS

PORT(D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --À´×Ô0809ת»»ºÃµÄ8λÊý¾Ý CLK: IN STD_LOGIC; --״̬»ú¹¤×÷ʱÖÓ RST: IN STD_LOGIC; --ϵͳ¸´Î»¿ØÖÆ

EOC: IN STD_LOGIC; --ת»»×´Ì¬Ö¸Ê¾£¬µÍµçƽ±íʾÕýÔÚת»» ALE:OUT STD_LOGIC; --8¸öÄ£ÄâÐźÅͨµÀµØÖ·Ëø´æÐźŠSTART:OUT STD_LOGIC; --ת»»¿ªÊ¼ÐźÅ

OE:OUT STD_LOGIC; --Êý¾ÝÊä³öÈý̬¿ØÖÆÐźŠADDA:OUT STD_LOGIC; --ÐźÅͨµÀ×îµÍλ¿ØÖÆÐźŠLOCK_T:OUT STD_LOGIC; --¹Û²ìÊý¾ÝËø´æÊ±ÖÓ

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8λÊý¾ÝÊä³ö END ADC0809;

ARCHITECTURE behav OF ADC0809 IS

TYPE states IS(s0,s1,S2,s3,s4); --¶¨Òå¸÷״̬×ÓÀàÐÍ SIGNAL cs,next_state: states:=s0;

SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL LOCK: STD_LOGIC;--ת»»ºóÊý¾ÝÊä³öËø´æÊ±ÖÓÐźŠBEGIN

ADDA<='1';--µ±ADDA<='0'£¬Ñ¡ÔñÄ£ÄâÐźÅͨµÀIN0£»µ±ADDA<='1'£¬ÔòÑ¡ÔñͨµÀIN1 LOCK_T<=LOCK;

COM: PROCESS(cs,EOC) BEGIN --¹æ¶¨¸÷״̬ת»»·½Ê½ CASE cs IS

WHEN s0=> ALE<='0';START<='0';LOCK<='0';OE<='0'; next_state<=s1; --0809³õʼ»¯ WHEN s1=> ALE<='1';START<='1';LOCK<='0';OE<='0'; next_state<=s2 ;--Æô¶¯²ÉÑù WHEN s2=> ALE<='0';START<='0';LOCK<='0';

IF(EOC='1') THEN next_state<=s3;OE<='1';--EOC=1ת»»½áÊø£¬OE=1(MealyÐÍ) ELSE next_state<=s2;OE<='0'; END IF; --δ½áÊøµÈ´ý£¬OE=0(MealyÐÍ) WHEN s3=> ALE<='0';START<='0';LOCK<='0';OE<='1'; next_state<=s4;--¿ªÆôOE£¬Êä³öת»»ºÃµÄÊý¾Ý

WHEN s4=> ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=s0; WHEN OTHERS=>next_state<=s0; END CASE; END PROCESS COM; REG:PROCESS(CLK,RST) BEGIN

IF(RST='1') THEN cs<=next_state;

ELSIF(CLK'EVENT AND CLK='1') THEN cs<=next_state; END IF;

END PROCESS REG; --ÓÉÐźÅcs½«µ±Ç°×´Ì¬Öµ´ø³ö´Ë½ø³Ì£ºREG

LATCH1: PROCESS(LOCK) --´Ë½ø³ÌÖУ¬ÔÚLOCKµÄÉÏÉýÑØ£¬½«×ª»»ºÃµÄÊý¾ÝËøÈë BEGIN

IF LOCK='1' AND LOCK'EVENT THEN REGL<=D; END IF; END PROCESS LATCH1; Q<=REGL; END behav;

10-7 ÒÔÀý10-6×÷Ϊ¿¼²ìʾÀý£¬°´ÕÕ±í10-3£¬·Ö±ð¶Ô´ËÀýÉèÖò»Í¬µÄ±àÂëÐÎʽºÍ°²È«×´Ì¬»úÉèÖ᣸ø³ö²»Í¬Ô¼ÊøÌõ¼þϵÄ×ÊÔ´ÀûÓÃÇé¿ö(ÈçLC¡¢REGµÈ)£¬ÏêϸÌÖÂ۱Ƚϲ»Í¬Çé¿öϵÄ״̬»ú×ÊÔ´ÀûÓᢿɿ¿ÐԵȷ½ÃæµÄÎÊÌâ¡£

--(1)ÒÔÀý10-6ΪÀý²ÎÕÕ±í10-3µÄ˳Ðò±àÂëµ¥½ø³ÌMEALY״̬»ú¡£ LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY MEALY2 IS

PORT(CLK,DIN1,DIN2,RST: IN STD_LOGIC;--ʱÖÓ/´®ÐÐÊý¾Ý/¸´Î» Q: OUT STD_LOGIC_VECTOR(4 DOWNTO 0));--¼ì²â½á¹ûÊä³ö END MEALY2;

ARCHITECTURE behav OF MEALY2 IS

TYPE states IS (st0,st1,st2,st3,st4);--¶¨Òå¸÷״̬ attribute syn_encoding : string;

attribute syn_encoding of states : type is \ SIGNAL PST : states;

BEGIN PROCESS(CLK,RST,PST,DIN1,DIN2)

BEGIN --¾ö¶¨×ª»»×´Ì¬µÄ½ø³Ì IF RST='1' THEN PST <= ST0;--¸´Î» ELSIF CLK'EVENT AND CLK='1' THEN CASE PST IS --DIN1Ó°Ïì״̬Çл»

WHEN st0=> IF DIN1='1' THEN PST<=st1; ELSE PST<=st0; END IF; IF DIN2='1' THEN Q<=\ WHEN st1=> IF DIN1='1' THEN PST<=st2; ELSE PST<=st1; END IF; IF DIN2='0' THEN Q<=\ WHEN st2=> IF DIN1='1' THEN PST<=st3; ELSE PST<=st2; END IF; IF DIN2='1' THEN Q<=\ WHEN st3=> IF DIN1='1' THEN PST<=st4; ELSE PST<=st3; END IF; IF DIN2='0' THEN Q<=\ WHEN st4=> IF DIN1='0' THEN PST<=st0; ELSE PST<=st4; END IF; IF DIN2='1' THEN Q<=\ WHEN OTHERS=> PST<=st0;Q<=\ END CASE; END IF;

END PROCESS REGCOM; END behav;

--(2)ÒÔÀý10-6ΪÀý²ÎÕÕ±í10-3µÄһλÈÈÂë±àÂëµ¥½ø³ÌMEALY״̬»ú¡£ LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY MEALY2 IS

PORT(CLK,DIN1,DIN2,RST: IN STD_LOGIC;--ʱÖÓ/´®ÐÐÊý¾Ý/¸´Î» Q: OUT STD_LOGIC_VECTOR(4 DOWNTO 0));--¼ì²â½á¹ûÊä³ö END MEALY2;

ARCHITECTURE behav OF MEALY2 IS

TYPE states IS (st0,st1,st2,st3,st4);--¶¨Òå¸÷״̬ attribute syn_encoding : string;

attribute syn_encoding of states : type is \

SIGNAL PST : states;

BEGIN PROCESS(CLK,RST,PST,DIN1,DIN2) BEGIN --¾ö¶¨×ª»»×´Ì¬µÄ½ø³Ì IF RST='1' THEN PST <= ST0;--¸´Î» ELSIF CLK'EVENT AND CLK='1' THEN CASE PST IS --DIN1Ó°Ïì״̬Çл»

WHEN st0=> IF DIN1='1' THEN PST<=st1; ELSE PST<=st0; END IF; IF DIN2='1' THEN Q<=\ WHEN st1=> IF DIN1='1' THEN PST<=st2; ELSE PST<=st1; END IF; IF DIN2='0' THEN Q<=\ WHEN st2=> IF DIN1='1' THEN PST<=st3; ELSE PST<=st2; END IF; IF DIN2='1' THEN Q<=\