vhdl»ù±¾Óï·¨ ÏÂÔØ±¾ÎÄ

ÖµÓï¾äÊôÓÚ²¢ÐÐͬʱÓï¾ä¡£

СÌáʾ£º

ÐźÅÓë±äÁ¿¸³ÖµµÄÇø±ð

SIGNAL D :INTEGER ; --ÐźÅÒª¶¨ÒåÔÚ½ø³ÌÍâµÄ½á¹¹ÌåÖÐ PROCESS£¨A,B,C£© BEGIN D <= A ; X <= B + D ; D <= C ; Y <= B + D ;

END PROCESS ;

Ö´ÐеĽá¹ûÊÇ£º D <= C ;

X <= B + C ;

Y <= B + C ; --½ø³ÌÖÐͬһÐźŶà´Î¸³Öµ Ö»ÓÐ×îºóÒ»´ÎÉúЧ PROCESS£¨A,B,C£©

VARIABLE D :INTEGER ; --±äÁ¿Òª¶¨ÒåÔÚ½ø³ÌÄÚ²¿ BEGIN D := A ;

X <= B + D ; D := C ; Y <= B+ D ;

END PROCESS ;

Ö´ÐеĽá¹ûÊÇ£º X <= B + A ;

Y <= B + C ; --½ø³ÌÖбäÁ¿¶à´Î¸³ÖµÔòÁ¢¼´ÉúЧ

Àý1-2-3 ͨ¹ýһλBCDÂëµÄ¼Ó·¨Æ÷µÄ³ÌÐò£¬±È½ÏÐźš¢³£Á¿¡¢±äÁ¿µÄ¸³Öµ¼°Ê¹Ó÷½·¨¡£ ENTITY bcdadd IS PORT£¨

op1, op2 :IN INTEGER RANGE 0 TO 9 ; result :OUT INTEGER RANGE 0 TO 31 £©;

END bcdadder;

ARCHITECTURE a OF bcdadder IS

CONSTANT adj :INTEGER := 6 ; --¶¨Òå³£Êýadj=6 SIGNAL binadd :INTEGER RANGE 0 TO 18 ; --¶¨ÒåÐźÅbinaddµÄȡֵ·¶Î§ÊÇ0¡«18 BEGIN

binadd <=op1+op2; --Çóop1+op2ºÍÔËËã

PROCESS (binadd)

VARIABLE tmp : INTEGER:=0; --¶¨Òå±äÁ¿tmpÊÇÕûÊýÐÍ£¬³õÖµÊÇ0 BEGIN

IF binadd > 9 THEN --Èç¹ûbinadd´óÓÚ9£¬½á¹ûÒªµ÷Õû tmp := adj ; --·½·¨ÊǺͼÓ6£¬·ñÔò£¬½á¹û¼Ó0¡£ ELSE tmp := 0 ;

END IF ;

result <=binadd+tmp ; --¸øÍⲿÐźŸ³Öµ END PROCESS; END a; СÌáʾ£º

³£Á¿£¬±äÁ¿£¬ÐźŵÄÎïÀíº¬ÒåÈçÏ£º ³£Á¿£ºµçÔ´£¬µØ£¬ºã¶¨Âß¼­ÖµµÈ³£Êý¡£

±äÁ¿£ºÄ³Ð©ÖµµÄÔØÌ壬´æ´¢µ¥Ôª£¬³£ÓÃÓÚÃèÊöËã·¨¡£ ÐźţºÎïÀíÉè¼ÆÖеÄÓ²Á¬½ÓÏߣ¬°üÀ¨ÊäÈëÊä³ö¶Ë¿Ú¡£

ÐźÅÓë³£ÊýÏ൱ÓÚÈ«¾Ö±äÁ¿£¬±äÁ¿Ï൱ÓÚ¾Ö²¿±äÁ¿£¬±äÁ¿Ö»ÄÜ´æÔÚÓÚPROCESS£¬ FUNCTION£¬PROCEDUCEÖС£²»ÄÜ´ø³öPROCESS£¬FUNCTION£¬PROCEDUCE£¬´« ËͳöÈ¥£¬¶øÐźſÉÒÔ¡£

1.3 VHDLÉè¼ÆµÄ»ù±¾Óï¾ä

VHDL³£ÓÃÓï¾ä¿ÉÒÔ·ÖΪÁ½´óÀಢÐÐÓï¾äºÍ˳ÐòÓï¾ä£¬ÔÚÊý×ÖϵͳµÄÉè¼ÆÖУ¬ÕâЩÓï¾ä ÓÃÀ´ÃèÊöϵͳµÄÄÚ²¿Ó²¼þ½á¹¹ºÍ¶¯×÷ÐÐΪ£¬ÒÔ¼°ÐźÅÖ®¼äµÄ»ù±¾Âß¼­¹ØÏµ¡£Ë³ÐòÓï¾ä±ØÐë·Å ÔÚ½ø³ÌÖУ¬Òò´Ë¿ÉÒÔ°Ñ˳ÐòÓï¾ä³Æ×÷Ϊ½ø³ÌÖеÄÓï¾ä¡£Ë³ÐòÓï¾äµÄÖ´Ðз½Ê½ÀàËÆÓÚÆÕͨ¼ÆËã »úÓïÑԵijÌÐòÖ´Ðз½Ê½£¬¶¼Êǰ´ÕÕÓï¾äµÄǰºóÅÅÁеķ½Ê½Ë³ÐòÖ´Ðеģ¬Ò»´ÎÖ´ÐÐÒ»ÌõÓï¾ä£¬ ²¢ÇÒ´Ó·ÂÕæµÄ½Ç¶ÈÀ´¿´ÊÇ˳ÐòÖ´Ðеġ£½á¹¹ÌåÖеIJ¢ÐÐÓï¾ä×ÜÊÇ´¦ÓÚ½ø³ÌµÄÍⲿ£¬ËùÓв¢ÐÐ Óï¾ä¶¼ÊÇÒ»´ÎͬʱִÐеģ¬ÓëËûÃÇÔÚ³ÌÐòÖÐÅÅÁеÄÏȺó´ÎÐòÎ޹ء£ ³£ÓõIJ¢ÐÐÓï¾äÓУº

£¨1£© ²¢ÐÐÐźŸ³ÖµÓï¾ä£¬Óà ¡°<=¡± ÔËËã·û £¨2£© Ìõ¼þ¸³ÖµÓï¾ä£¬WHEN-ELSE

£¨3£© Ñ¡ÔñÐźŸ³ÖµÓï¾ä£¬WITH-SELECT £¨4£© ·½¿éÓï¾ä£¬BLOCK ³£ÓõÄ˳ÐòÓï¾äÓУº

£¨1£© ÐźŸ³ÖµÓï¾äºÍ±äÁ¿¸³ÖµÓï¾ä £¨2£© IF- ELSEÓï¾ä £¨3£© CASE-WHENÓï¾ä £¨4£© FOR-LOOP

1.3.1²¢ÐÐÐźŸ³ÖµÓï¾ä

ÐźŸ³ÖµÓï¾äµÄ¹¦ÄÜÊǽ«Ò»¸öÊý¾Ý»òÒ»¸ö±í´ïʽµÄÔËËã½á¹û´«Ë͸øÒ»¸öÊý¾Ý¶ÔÏó£¬Õâ¸ö Êý¾Ý¶ÔÏó¿ÉÒÔÊÇÄÚ²¿Ðźţ¬Ò²¿ÉÒÔÊÇÔ¤¶¨ÒåµÄ¶Ë¿ÚÐźš£

Àý1-3-1Óò¢ÐÐÐźŸ³ÖµÓï¾äÃèÊöÂß¼­±í´ïʽÊÇY=AB+C¨’DµÄµç·¡£ ENTITY loga IS PORT (

A, B, C, D : IN BIT; Y : OUT BIT

);

END loga; --¶¨ÒåA£¬B£¬C£¬DÊÇÊäÈë¶Ë¿ÚÐźţ¬YÊÇÊä³ö¶Ë¿ÚÐźŠARCHITECTURE stra OF loga IS

SIGNALE : BIT; --¶¨ÒåEÊÇÄÚ²¿ÐźÅ

BEGIN

Y <=(A AND B) OR E; --ÒÔÏÂÁ½Ìõ²¢ÐÐÓï¾äÓë˳ÐòÎÞ¹Ø

E <=C XOR D;

END stra; СÌáʾ£º

ÔÚ½ø³ÌÖеÄÐźŸ³ÖµÓï¾äÊôÓÚ˳ÐòÓï¾ä£¬¶øÔڽṹÌåÖнø³ÌÍâµÄÐźŸ³ÖµÓï¾äÔòÊôÓÚ²¢ ÐÐÓï¾ä¡£

1.3.2 Ìõ¼þ¸³ÖµÓï¾ä£¬WHEN-ELSE Óï·¨¸ñʽΪ£º

ÐźÅY<= ÐźÅA WHEN Ìõ¼þ±í´ïʽ1 ELSE ÐźÅB WHEN Ìõ¼þ±í´ïʽ2 ELSE ...

ÐźÅN£»

ÔÚÖ´ÐÐWHEN-ELSEÓï¾äʱ£¬ÏÈÅжÏÌõ¼þ±í´ïʽ1ÊÇ·ñΪTRUE£¬ÈôÎªÕæ£¬Y<=ÐźÅA£¬·ñ ÔòÅжÏÌõ¼þ±í´ïʽ2ÊÇ·ñΪTRUE£¬ÈôΪTRUE£¬Y<=ÐźÅB£¬ÒÀ´ÎÀàÍÆ£¬Ö»Óе±ËùÁеÄÌõ¼þ

±í´ïʽ¶¼Îª¼Ùʱ£¬Y<=ÐźÅN¡£

Àý1-3-2ÓÃÌõ¼þ¸³ÖµÓï¾äWHEN-ELSEʵÏÖµÄËÄѡһÊý¾ÝÑ¡ÔñÆ÷ LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY mux4 IS PORT(

a0, a1, a2, a3 :IN STD_LOGIC;

s :IN STD_LOGIC_VECTOR (1 DOWNTO 0); y :OUT STD_LOGIC );

END mux4;

ARCHITECTURE archmux OF mux4 IS

BEGIN

y <= a0 WHEN s = ¡°00¡± else --µ±s=00ʱ£¬y=a0 a1 WHEN s = ¡°01¡± else --µ±s=01ʱ£¬y=a1 a2 WHEN s = ¡°10¡± else --µ±s=10ʱ£¬y=a2 a3; --µ±sÈ¡ÆäËüֵʱ£¬y=a3

END archmux;

1.3.3 Ñ¡ÔñÐźŸ³ÖµÓï¾ä£¬WITH-SELECT Óï·¨¸ñʽΪ£º

WITH Ñ¡ÔñÐźÅX SELECT

ÐźÅY<= ÐźÅA WHEN Ñ¡ÔñÐźÅÖµ1, ÐźÅB WHEN Ñ¡ÔñÐźÅÖµ2, ÐźÅC WHEN Ñ¡ÔñÐźÅÖµ3, ...

ÐźÅZ WHEN OTHERS£»

WITH-SELECTÓï¾ä²»ÄÜÔÚ½ø³ÌÖÐÓ¦Óã¬Í¨¹ýÑ¡ÔñÐźÅXµÄÖµµÄ±ä»¯À´Ñ¡ÔñÏàÓ¦µÄ²Ù×÷¡£ µ±Ñ¡ÔñÐźÅXµÄÖµÓëÑ¡ÔñÐźÅÖµ1Ïàͬʱ£¬Ö´ÐÐY<=ÐźÅA£¬µ±Ñ¡ÔñÐźÅXµÄÖµÓëÑ¡ÔñÐźÅÖµ2Ïàͬʱ£¬Ö´ÐÐY<=ÐźÅB£¬Ö»Óе±Ñ¡ÔñÐźÅXµÄÖµÓëËùÁеÄÖµ¶¼²»Í¬Ê±£¬²ÅÖ´ÐÐY<=

ÐźÅZ¡£

²ÉÓÃÑ¡ÔñÐźŸ³ÖµÓï¾äWITH-SELECTʵÏÖµÄËÄѡһÊý¾ÝÑ¡ÔñÆ÷½á¹¹Ì壺 ARCHITECTURE archmux OF mux4 IS BEGIN

WITH s SELECT y <= a0WHEN ¡°00¡±, a1WHEN ¡°01¡±, a2 WHEN ¡°10¡±,

a3 WHEN OTHERS;

END archmux;

×¢Ò⣺WITH-SLECTÓï¾ä±ØÐëÖ¸Ã÷ËùÓл¥³âÌõ¼þ£¬¼´¡°s¡±µÄËùÓÐȡֵ×éºÏ£¬ÒòΪ¡°s¡±µÄÀàÐÍΪ ¡°STD_LOGIC_VECTOR¡±£¬Æäȡֵ×éºÏ³ýÁË00£¬01£¬10£¬11Í⻹ÓÐ0x£¬0z£¬x1£¬?µÈ¡£ËäÈ»ÕâЩȡֵ×éºÏÔÚʵ¼Êµç·Öв»³öÏÖ£¬µ«Ò²Ó¦Áгö¡£Îª±ÜÃâÂé·³¿ÉÒÔÓÃOTHERS´úÌæÆäËû¸÷ÖÖ×éºÏ¡£

1.3.4 ¿é£¨BLOCK£©Óï¾ä

ΪÁËʵÏÖ¸´ÔÓÊý×ֵ緵ijÌÐòÉè¼Æ£¬³£³£²ÉÓòã´Î»¯Éè¼ÆºÍ¹¦ÄÜÄ£¿é»¯Éè¼Æ·½·¨£¬ÔÚ VHDLÓï¾äÖУ¬ÊµÏÖÕâЩ¹¦ÄܵÄÓï¾äÓУº¿éÓï¾ä£¨BLOCK£©£¬Ôª¼þ£¨COMPONENT£©¶¨Òå Óï¾äºÍÔª¼þÀý»¯£¨PORT MAP£©Óï¾ä£¬×Ó³ÌÐò(¹ý³ÌºÍº¯Êý)£¬ÒÔ¼°°üºÍ¿â£¨LIBRARY£©µÈ¡£ ¿éÓï¾ä¿ÉÒÔ¿´×÷ÊǽṹÌåÖеÄ×ÓÄ£¿é£¬Ëü°ÑʵÏÖÄ³Ò»ÌØ¶¨¹¦ÄܵÄһЩ²¢·¢Óï¾ä×éºÏÔÚÒ» ÆðÐγÉÒ»¸öÓï¾äÄ£¿é¡£ÀûÓöà¸ö¿éÓï¾ä¿ÉÒÔ°ÑÒ»¸ö¸´ÔӵĽṹÌå»®·Ö³É¶à¸ö²»Í¬¹¦ÄܵÄÄ£¿é£¬Ê¹¸´ÔӵĽṹÌå½á¹¹·ÖÃ÷£¬¹¦ÄÜÃ÷È·£¬Ìá¸ßÁ˽ṹÌåµÄ¿É¶ÁÐÔ£¬¿éÓë¿éÓï¾äÖ®¼äµÄ¹ØÏµÊDz¢ÐÐÖ´Ðеģ¬ÕâÖֽṹÌåµÄ»®·Ö·½·¨½ö½öÖ»ÊÇÐÎʽÉϵ쬴¦ÓÚÒ»¸öÉè¼Æ²ã´Î£¬¿éÓë¿éÖ®¼äÊDz»Í¸Ã÷µÄ£¬Ã¿¸ö¿é¶¼¿ÉÒÔ¶¨Òå¹²¿éÄÚʹÓõÄÊý¾Ý¶ÔÏóºÍÊý¾ÝÀàÐÍ£¬²¢ÇÒÕâÖÖ˵Ã÷¶ÔÆäËü¿éÊÇÎÞЧµÄ¡£ÁíÍ⣬ÀûÓÿéÓï¾äÖеı£»¤±í´ïʽ¿ÉÒÔ¿ØÖÆ·½¿éÓï¾äµÄÖ´ÐС£ ¿éÓï¾äµÄ¸ñʽΪ£º ¿é±êºÅ£º BLOCK ˵Ã÷Óï¾ä

BEGIN ²¢ÐÐÓï¾äÇø

END BLOCK ¿é±êºÅ£»

ÔÚ¿éÓï¾ä˵Ã÷²¿·ÖÖж¨Òå¿éÄÚ¾Ö²¿Ðźš¢Êý¾ÝÀàÐÍ¡¢Ôª¼þºÍ×Ó³ÌÐò£¬ÔÚ¿éÄÚ²¢ÐÐÓï¾äÇø¿ÉÒÔ Ê¹ÓÃVHDLÖеÄËùÓв¢ÐÐÓï¾ä¡£

Àý1-3-3Éè¼ÆÒ»¸öµç·£¬°üº¬Ò»¸ö°ë¼ÓÆ÷ºÍÒ»¸ö°ë¼õÆ÷£¬·Ö±ð¼ÆËã³öA+BºÍA-BµÄ½á¹û¡£ Âß¼­±í´ïʽ£º °ë¼ÓÆ÷£º SUM=A¨’B Co=AB

°ë¼õ·¨Æ÷£º SUB=A¨’B

Bo=BA

°Ñ¼Ó·¨ºÍ¼õ·¨·Ö³ÉÁ½¸ö¹¦ÄÜÄ£¿é£¬·Ö±ðÓÃÁ½¸öBLOCK·½¿éÓï¾äÀ´±íʾ£¬Éè¼ÆµÄ³ÌÐòÈç ÏÂËùʾ£º LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY adsu is

PORT(

a, b : IN STD_LOGIC;

co, sum, bo, sub : OUT STD_LOGIC );

END adsu ;

ARCHITECTURE a OF adsu IS BEGIN

half_adder : BLOCK -- half_adder BEGIN

sum <= A XOR B; co<= AAND B;

END BLOCK half_adder;

half_subtractor: BLOCK -- half_subtractor BEGIN

sub<= a XOR b;

bo <= NOT a AND b;

END BLOCK half_subtractor; END a; СÌáʾ£º

¿éÓï¾äÖ»ÊÇÆðÒ»ÖÖ·Ö¸ô·ûµÄ×÷Óã¬Ê¹³ÌÐò±àÅŸü¼ÓÇåÎú£¬Óвã´Î¡£¹¦ÄÜÉÏÓë²»ÓÿéÓï ¾äÍêÈ«Ïàͬ¡£

1.3.5 IF-ELSEÓï¾ä

IF-ELSEÓï¾äÊÇ×î³£ÓõÄ˳ÐòÓï¾ä£¬ÆäÓ÷¨ºÍÓï¾ä¸ñʽÓëÆÕͨµÄ¼ÆËã»ú¸ß¼¶ÓïÑÔÀàËÆ£¬ ÔÚVHDLÓïÑÔÖУ¬ËüÖ»ÔÚ½ø³ÌÖÐʹÓ㬸ù¾ÝÒ»¸ö»òÒ»×éÌõ¼þÀ´Ñ¡ÔñÄ³Ò»ÌØ¶¨µÄÖ´ÐÐͨµÀ¡£ Æä³£ÓõĸñʽΪ£º ¸ñʽһ:

IF Ìõ¼þ±í´ïʽ1 THEN Óï¾ä·½¿éA

ELSIF Ìõ¼þ±í´ïʽ2 THEN Óï¾ä·½¿éB

ELSIF Ìõ¼þ±í´ïʽ3 THEN Óï¾ä·½¿éC £º

ELSE

Óï¾ä·½¿éN

END IF ¸ñʽ¶þ£º

IF Ìõ¼þ±í´ïʽTHEN Óï¾ä·½¿éA

END IF; ¸ñʽÈý£º

IF Ìõ¼þ±í´ïʽTHEN Óï¾ä·½¿éA