VHDL°Á ¹× ¿äÁ¡ Á¤¸®
¢Â VHDLÀ̶õ : Very high speed integrated circuit Hardware Description LanguageÀÇ ¾àÀڷμ »óÀ§ÀÇ µ¿ÀÛ ·¹º§¿¡¼ºÎÅÍ ÇÏÀ§ÀÇ °ÔÀÌÆ® ·¹º§±îÁö ÇÏµå ¿þ¾î¸¦ ±â¼úÇÏ°í ¼³°è Çϵµ·Ï ÇÏ´Â CAD ¾÷°è ¹× IEEE Ç¥Áؾð¾îÀÌ¸ç ¹Ì±¹ Á¤ºÎ°¡ Áö¿øÀ» °øÀÎÇÑ Çϵå¿þ¾î ¼³ °è ¾ð¾î.
¢Â VHDLÀÇ Æ¯Â¡
- VHDLÀº IEEE¿¡ ÀÇÇØ °øÀεǾî Çϵå¿þ¾î °³¹ß°ú ¹®¼È¿¡ Ç¥Áؾð¾î·Î »ç¿ëµÈ´Ù.
- ±¤¹üÀ§ÇÑ ±â¼ú ´É·ÂÀ¸·Î ½Ã½ºÅÛ ·¹º§¿¡¼ °ÔÀÌÆ® ·¹º§±îÁö Çϵå¿þ¾î ȸ·Î Ç¥ÇöÀÌ °¡´É ÇÏ´Ù.
¢Â VHDL ±ÔÄ¢°ú Ç¥Çö
1. VHDLÀÇ ±ÔÄ¢
- VHDLÀº ´Ù¸¥ ¾ð¾î¿Í´Â ´Þ¸® ´ë¼Ò¹®ÀÚÀÇ ±¸ºÐÀ» ¿ä±¸ÇÏÁö ¾Ê´Â´Ù.
- ÆÄÀϸíÀº ¹Ýµå½Ã °ø¹éÀ» °¡ÁöÁö ¾Ê´Â ¹®ÀÚ¿À̾î¾ß ÇÑ´Ù.
- VHDL¿¡¼ ¹®Àå°£ÀÇ ±¸º°Àº ¿©´À ÇÁ·Î±×·¥ ¾ð¾î¿Í °°ÀÌ ¼¼¹ÌÄÝ·Ð( ; )À¸·Î Ç¥½ÃÇÑ´Ù. - ÁÖ¼®Àº "--"·Î Ç¥½ÃÇϸç ÀÌ´Â VHDLÀÇ ¼öÇà¿¡´Â ¿µÇâÀ» ¹ÌÄ¡Áö ¾ÊÀ¸¹Ç·Î ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¼³¸í µîÀÇ ¹®¼È¸¦ À§Çؼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- ÁÖ¼® ºÎÈ£°¡ ÀÖ´Â ºÎºÐºÎÅÍ ±× ÁÙ ³¡±î Áö ÁÖ¼®¹®À¸·Î °£ÁÖÇÑ´Ù.
2. VHDLÀÇ ±âº» ±¸¼º°ú Ç¥Çö
VHDLÀÇ ±âº» ±¸¼ºÀ¸·Î½á ¿©·¯ °¡Áö Á¾·ùÀÇ Design UnitÀÌ ÀÖ´Ù. ±×Áß °¡Àå ±âº»ÀÌ µÇ´Â ÃÖ¼ÒÇÑÀÇ ´ÜÀ§·Î½á Entity Declaration°ú Architecture Body°¡ ÀÖ´Ù.
¤ý°´Ã¼(Object)¿Í ÀÚ·áÇü(Data Type) ¹× ¿¬»êÀÚ(Operator)
¤ýµ¿ÀÛÀû Ç¥Çö(Behavioral Description)°ú ±¸Á¶Àû Ç¥Çö(Structural Description)
¤ý¼øÂ÷ 󸮹®°ú º´Çà 󸮹®
Entity ¼±¾ð°ú Architecture Body ¼±¾ð
1. Entity ¼±¾ðºÎ´Â »ç¿ëÀÚ°¡ ¼³°èÇϰíÀÚ ÇÏ´Â ½Ã½ºÅÛÀÇ ¿ÜÀû ¿¬°áÀ» ´ã´çÇÏ´Â ºÎºÐÀÌ´Ù. ȸ·ÎÀÇ ³»ºÎÀûÀÎ ±¸Á¶³ª ¿¬°á µîÀ» °í·ÁÇÒ Çʿ䰡 ¾øÀ¸¸ç ¿©±â¼ Á¤ÀÇÇÑ °ÍÀ» ÅëÇØ ´Ù À½ÀÇ Architecture Body¿¡¼ ³»ºÎÀû µ¿ÀÛÀ» ¿©·¯ °¡Áö ¹æ¹ýÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ´Ù½Ã¸» ÇØ¿ÜºÎ¿ÍÀÇ Åë½ÅÀ» À§ÇÑ ÀÔÃâ·Â ¼±À» Á¤ÀÇÇÏ´Â °ÍÀ» Entity ¼±¾ðÀ̶ó°í ÇÑ´Ù. °£´ÜÈ÷ 2 ÀÔ·Â and °ÔÀÌÆ® ȸ·Î¸¦ °¡Áö°í ¿¹¸¦ µé¾î º¸°Ú´Ù.
¿¹) entity mylogic_2and is
port( in_a, in_b : in std_logic;
out_y : out std_logic );
end mylogic_2and;
¿©±â¼ entityÀÇ À̸§À» ¼³Á¤ÇÏ´Â °Í¿¡ À¯ÀÇÇϵµ·Ï ÇÏÀÚ. VHDLÀº 2and_mylogicÀ̳ª mylogic 2and¿Í °°ÀÌ ¾Õ¿¡ ¼ýÀÚ¸¦ ¸ÕÀú Ç¥±âÇÒ ¼ö ¾øÀ¸¸ç, °ø¹éÀÌ À־ ¾ÈµÈ´Ù. ¿Ü ºÎ¿ÍÀÇ Åë½ÅÀ» À§ÇÑ ÀÔ·Â ¼±À¸·Î in_a¿Í in_b°¡ Ãâ·Â ¼±À¸·Î out_y°¡ ¼±¾ðµÇ¾ú´Ù. ¿¹¿¡ ³ªÅ¸³½ port¿Í std_logic¿¡ ´ëÇØ¼´Â µÚ¿¡¼ ¼³¸íÇϰڴÙ.
2. Architecture Body´Â »ç¿ëÀÚ°¡ ¼³°èÇϰíÀÚ ÇÏ´Â ½Ã½ºÅÛ ³»ºÎÀÇ µ¿ÀÛÀ» ¼¼ºÎÀûÀ¸·Î Á¤ ÀÇ ÇÏ´Â ºÎºÐÀÌ´Ù.
¿¹) architecture sample of mylogic_2and is
begin
out_y <= in_a and in_b;
end sample;
¿©±â¼ sampleÀ̶õ architectureÀÇ À̸§ÀÌ´Ù. À̰ÍÀº Á¤ÇØÁø °ÍÀÌ ¾Æ´Ï¶ó ÀÓÀÇ´ë·Î ¹Ù²Ù¾î µµ µÈ´Ù. architectureÀÇ ½ÃÀÛ°ú ³¡Àº begin°ú endÀÌ´Ù. entity declaration¿¡¼µµ beginÀ» »ç¿ëÇÏÁö¸¸ µå¹® ÀÏÀÌ´Ù. ¿¹¿¡¼Ã³·³ 2 ÀÔ·Â and °ÔÀÌÆ® ȸ·Î¿¡ ´ëÇÑ ³»ºÎ µ¿ÀÛÀº Ç¥ÇöÀÌ °£´ÜÇÏ´Ù. ÀÌÁ¤µµÀÇ °£´ÜÇÑ Ç¥ÇöÀ̶ó¸é Ãʺ¸Àڵ鵵 µÎ·Á¿òÀ» °¡Áö±â Èûµé °ÍÀÌ´Ù.
°´Ã¼(Object)¿Í ÀÚ·áÇü(Data Type) ¹× ¿¬»êÀÚ(Operator)
1. °´Ã¼(Object)¶õ VHDL¿¡¼ °ªÀ» °¡Áú ¼ö ÀÖ´Â °ÍÀ» ¸»ÇÑ´Ù. °´Ã¼¸¦ ¼±¾ðÇÔ¿¡ ÀÖ¾î °´Ã¼ °¡ ¾î¶°ÇÑ ÇüÅÂ, Áï ÀÚ·áÇüÀ» »ç¿ëÇÒ °ÍÀΰ¡¸¦ °áÁ¤ÇØ¾ß ÇÑ´Ù.
¨ç °´Ã¼ÀÇ Á¾·ù
¥¡) Signal
VHDL ÇÕ¼º½Ã¿¡ Wire·Î ±¸ÇöÀÌ µÇ¸ç, °¢ ComponentÀÇ ¿¬°á¿¡ »ç¿ëµÇ´Â ¿ÜÀû º¯ ¼öÀÌ´Ù. Signal ÇüÅÂÀÇ °´Ã¼¿¡ °ªÀ» ´ëÀÔÇϱâ À§Çؼ´Â ¿¹¿¡¼¿Í °°ÀÌ '<='¸¦ »ç ¿ëÇÑ´Ù.
¿ÜºÎ ¿¬°á ½ÅÈ£ÀÇ ¼±¾ð¿¡´Â Signal·Î ¼±¾ðÇÏ´Â ¹æ¹ý°ú Port·Î ¼±¾ðÇÏ´Â ¹æ¹ýÀÌ ÀÖ ´Ù. Port¿Í Signal ¼±¾ð¿¡¼ÀÇ ¶Ç´Ù¸¥ Â÷ÀÌ´Â ÀÔÃâ·ÂÀÇ ±¸ºÐ, Áï Mode¿¡ ´ëÇÑ Á¤ ÀÇ ¿©ºÎÀÌ´Ù.
¢Â Port·Î ¼±¾ðÇÏ´Â ¹æ¹ý
¼±¾ðÀ§Ä¡´Â Entity ³»ºÎÀÌ´Ù. Entity¿¡ ´ëÇÑ ¼³¸íÀº ¾ÕÀåÀ» Âü°í Çϱ⠹ٶõ´Ù.
¿¹) port ( a, b : in std_logic;
c : out std_logic );
¢º Signal·Î ¼±¾ðÇÏ´Â ¹æ¹ý
SignalÀÇ ¼±¾ðÀ§Ä¡´Â architecture¿Í architectureÀÇ ½ÃÀÛÀ» ³ªÅ¸³»´Â begin »çÀÌÀÌ´Ù.
¿¹) architecture sample of logic is
signal a, b : std_logic;
signal temp : std_logic_vector(3 downto 0) := "1100"; -- ÃʱⰪÀ» ´ë ÀÔÇÒ ¶§´Â ±âÈ£ ':='¸¦ »ç¿ëÇÑ´Ù.
begin
Signal »ç¿ë½Ã ÁÖÀÇÇÒ Á¡Àº ´ëÀÔ±âÈ£ '<='´Â ±× °ªÀÌ Áï½Ã ´ëÀԵǴ °ÍÀÌ ¾Æ´Ï´Ù. Process¹® ³»¿¡¼ °ªÀÌ ´ëÀԵǴ ½ÃÁ¡Àº Process¹®ÀÌ ³¡³ª´Â End process¸¦ ¸¸³¯ ¶§ ºñ ·Î½á ±× °ªÀÌ ´ëÀÔµÊÀ» À¯ÀÇÇØ¾ß ÇÑ´Ù. Áï ½Ã°£ÀÌ Áö³²¿¡ µû¶ó º¯ÇÑ °ªÀ» °¡Áø´Ù.
¥¢) Variable
VariableÀº process³ª ºÎÇÁ·Î±×·¥, Áï function°ú procedure¿¡¼ »ç¿ëµÇ¸ç process ³»ºÎ¿¡ ¼¸¸ À¯È¿ÇÑ ³»Àû º¯¼öÀÌ´Ù. VariableÀº Signal°ú °°ÀÌ Wire·Î ±¸ÇöµÇÁö ¾ÊÀ¸¸ç ´ÜÁö Áß °£ ¿¬»ê´Ü°è¿¡ ÁÖ·Î ÀÌ¿ëµÈ´Ù. Variable¿¡ »ç¿ëµÇ´Â ´ëÀÔ±âÈ£´Â ':='ÀÌ´Ù. ÀÌ ±âÈ£´Â °ªÀÌ Áï½Ã ÀԷµȴÙ. ¼±¾ð¹æ½ÄÀº Signal°ú À¯»çÇÏ´Ù.
¢º Variable·Î ¼±¾ðÇÏ´Â ¹æ¹ý
VariableÀÇ ¼±¾ðÀ§Ä¡´Â process¿Í processÀÇ ½ÃÀÛÀ» ³ªÅ¸³»´Â begin »çÀÌÀÌ´Ù.
¿¹) process(a, b)
variable temp1, temp2 : std_logic;
begin
¶ÇÇÑ VariableÀº Áï½Ã °ªÀÌ ´ëÀÔµÇÁö¸¸ process ¹®À» ºüÁ® ³ª¿À¸é ±× °ªÀ» »ó½ÇÇØ ¹ö¸° ´Ù. µû¶ó¼ °ªÀ» º¸Á¸ Çϱâ À§Çؼ´Â process¸¦ ºüÁ® ³ª¿À±â Àü¿¡ ±× °ªÀ» Signal¿¡ ´ëÀÔ ÇØ¾ß ÇÑ´Ù.
¥£) Constant
Constant´Â Ãʱ⿡ ¼±¾ðÇÑ »ó¼öÀÇ °ªÀ» À¯ÁöÇϴµ¥ »ç¿ëÇϸç, ¼±¾ðµÈ ÃʱⰪÀ» ¹Ù²Ü ¼ö ¾ø´Ù. ´ëÀÔ±âÈ£ ¿ª½Ã Variable°ú ¸¶Âù°¡Áö·Î ':='¸¦ »ç¿ëÇÑ´Ù.
¢º Constant·Î ¼±¾ðÇÏ´Â ¹æ¹ý
ConstantÀÇ ¼±¾ðÀ§Ä¡´Â loop, generate¹®, ºÎÇÁ·Î±×·¥ ¶Ç´Â generic¿¡¼ ¼±¾ðµÈ´Ù.
¿¹) architecture sample of logic is
constant delay : integer := 5ns;
begin
2. ÀÚ·áÇü(Data Type)Àº ¾î¶² ÀÓÀÇÀÇ »óŰªÀ̳ª °á°ú¸¦ ¹Þ¾ÆµéÀ̰ųª ÀԷ°ªÀ¸·Î ó¸® ÇÒ ¼ö ÀÖ´Â ÇüŸ¦ ¸»Çϸç, ±â´É°ú Ç¥Çö»óÀÇ ºÐ·ùÇÒ ¼ö ÀÖ´Ù. VHDL¿¡¼ °´Ã¼´Â °ÅÀÇ ¹«ÇÑÇÑ Á¾·ùÀÇ ÀÚ·áÇüÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ »ç¿ëÀÚ°¡ Á÷Á¢ ¸¸µé ¼ö ÀÖ´Ù.
¹è¿Çü (Array Type) |
Á¦ÇÑÇü (Constraint Type) |
TO, DOWNTO |
¹«Á¦ÇÑÇü
(Unconstraint Type) |
BIT_VECTOR, STRING, STD_LOGIC_VECTOR |
ÁýÇÕÇü (Record Type) |
RECORD |
¨ç ÀÚ·áÇüÀÇ Á¾·ù
ÀÚ·áÇüÀÇ Á¾·ù·Î´Â Å©°Ô ±â´É°ú Ç¥Çö»óÀÇ ºÐ·ù·Î ±¸ºÐµÇ´Ù. °£´ÜÈ÷ ¿ä¾àÇÏ¸é ´ÙÀ½°ú °°´Ù.
¥¡) Ç¥ÇöÀû ºÐ·ù
¢Â Predefinde Data Type (ÀÌ¹Ì Á¤ÀÇµÈ VHDL)
¢Â User-Definde Type (»ç¿ëÀÚ Á¤ÀÇ)
¥¢) ±â´ÉÀû ºÐ·ù
¢Â Scalar Type(¼ýÀÚÇü)
¼ýÀÚÇüÀ̶ó´Â °ÍÀº 0, 1, 2, 3 ¡¦ µîÀÇ ¼ýÀÚ·Î ±× ¼ø¼¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Â ÀÚ·áÇüÀÌ ´Ù. ÀÌ·¯ÇÑ ¼ýÀÚÇüÀº ¶Ç´Ù½Ã ¼¼ºÎÀûÀ¸·Î ³ª´¶´Ù.
¿°ÅÇü (Enumeration Type) |
BIT, BOOLEAN, HARACTER, STD_LOGIC |
Á¤¼öÇü (Integer Type) |
INTEGER |
½Ç¼öÇü (Floating Type) |
REAL |
¹°¸®Çü (Physical Type) |
UNIT : TIME, DISTANCE |
¢Â Composite Type(º¹ÇÕÇü)
È¥ÇÕÇüÀº ÀÌ·¯ÇÑ ¼ýÀÚÇüÀ» Àç Á¶ÇÕÇÏ¿© ÇÊ¿äÇÑ ¸¸Å¸¸ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼±¾ðÇÒ °æ ¿ì¿Í ¿©·¯ °¡Áö¸¦ È¥ÇÕÇÏ¿© »ç¿ëÇÏ°í ½ÍÀ» ¶§ »ç¿ëÇÑ´Ù. È¥ÇÕÇüÀº ¹è¿Çü°ú ÁýÇÕÇü À¸·Î ³ª´¶´Ù.
¹è¿Çü (Array Type) |
Á¦ÇÑÇü (Constraint Type) |
TO, DOWNTO |
¹«Á¦ÇÑÇü(Unconstraint Type) |
BIT_VECTOR, STRING, STD_LOGIC_VECTOR |
ÁýÇÕÇü (Record Type) |
RECORD |
¢Â Access Type(¿¬°áÇü)
¿¬°áÇüÀº ÀÏ¹Ý Computer ¾ð¾î¿¡¼ÀÇ Linked List¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸¸µé¾îÁø Point Çü½Ä°ú À¯»çÇÏ´Ù. ¿¬°áÇüÀ» »ç¿ëÇÒ ¶§ Á¤È®ÇÑ Ç¥ÇöÀÌ ¾Æ´Ï¸é ÀüÇô ´Ù¸¥ °á°ú ¸¦ Ãâ·ÂÇϱ⠶§¹®¿¡ ¾ð¾î¸¦ ½ÃÀÛÇÏ´Â Ãʺ¸ÀÚ¶ó¸é µÇµµ·Ï »ç¿ëÀ» ÇÇÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¶ÇÇÑ ¿¬°áÇüÀº ½Ã¹Ä·¹À̼ÇÀ» À§ÇÑ ¿ëµµ ¿Ü¿¡ Çϵå¿þ¾îÀûÀ¸·Î ±¸ÇöÇÏ´Â °ÍÀ¸·Î´Â ¾Æ Á÷±îÁö ±× Áö¿øÀÌ ¹ÌÈíÇÏ´Ù.
¿¬°áÇü (Access Type) |
ACCESS, NEW |
¢Â File Type
File TypeÀº File ÀÔÃâ·Â¿¡ °ü·ÃµÈ Data TypeÀ¸·Î½á ¿ÜºÎ¿ÍÀÇ ÀÔÃâ·ÂÀ̳ª ƯÁ¤ FileÀÇ º¯¼ö¸¦ ¼±ÅÃÇÏ¿© »ç¿ëÇÑ´Ù. ¶ÇÇÑ ÀÌ ÀÚ·áÇüÀº VHDLÀÇ È¸·Î Ç¥Çö¿¡ ´ëÇÑ °Ë Áõ ´Ü°è, Áï Simulation Debugging¿¡¼ ¸¹ÀÌ »ç¿ëµÇ¸ç Ưº°ÇÑ È¸·Îµ¿ÀÛÀÇ ÀÔÃâ·Â À» Á¦¿ÜÇÏ¸é °ÅÀÇ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ±×·¡¼ Synthetic Code°¡ ¾Æ´Ï¶õ °ÍÀ» À¯ÀÇÇÏ ÀÚ. ÆÄÀÏÇüÀº ¿¬°áÇü°ú °°ÀÌ Ãʺ¸ÀÚ¿¡°Ô´Â ¾î·Á¿î Á¡ÀÌ ÀÖÀ¸´Ï À¯ÀÇÇϱ⠹ٶõ´Ù.
¨è ¼±¾ð ¹æ¹ý
ÀÚ·áÇüÀ» ¼±¾ðÇÒ ¶§´Â Type ~ is¶ó´Â ¿¹¾à¾î¸¦ »ç¿ëÇÑ´Ù. ¿©±â¼´Â Std_logic_1164 Package¿¡ ¼±¾ðµÈ ³»¿ëÀ» ¿¹·Î µé¾ú´Ù.
¥¡) ¿°ÅÇü :: ¹®ÀÚ¿À» ÇϳªÀÇ Data·Î ¹¾î¼ ¼±¾ðÇÏ´Â °ÍÀÌ´Ù.
¿¹) Type bit is ('0', '1');
Type boolean is (true, false);
¥¢) Á¤¼öÇü :: Á¤¼öÇüÀÇ ¹üÀ§´Â ¾Æ·¡¿Í °°ÀÌ ±¸°ÝȵǾî ÀÖ´Ù.
¿¹) Type integer is range -2147483647 to 2147483647;
Type byte is range -127 to 127;
¥£) ½Ç¼öÇü :: ½Ç¼öÇüÀÇ ¹üÀ§ ¿ª½Ã ¾Æ·¡¿Í °°ÀÌ -1.0E38¿¡¼ 1.0E38±îÁö ±Ô°ÝȵǾî ÀÖ´Ù. ½Ç¼öÇüÀÇ ÃÖ´ë°ª°ú ÃÖ¼Ò°ªÀº High¿Í Low¶ó´Â Attribute¸¦ »ç¿ëÇØ¼ ³ªÅ¸³¾ ¼öµµ ÀÖ ´Ù.
¿¹) Type real is range -1.0E38 to +1.0E38;
¥¤) ¹°¸®Çü :: ¹°¸®ÇüÀº ½Ã°£, °Å¸® Àü·ù µîÀÇ ¹°¸®ÀûÀÎ ´ÜÀ§¸¦ ³ªÅ¸³½´Ù. »ç¿ëÀÚ°¡ ¹üÀ§¸¦ Á¤ÀÇÇÏÁö ¾ÊÀ¸¸é ±âº» ´ÜÀ§ÀÇ °íÁ¤ ¹üÀ§´Â Á¤¼öÇüÀÇ ¹üÀ§°ú °°Àº -2147483647¿¡¼ 2147483647±îÁö ÀÌ´Ù.
¿¹) Type time is range -1.0E38 to +1.0E38;
unit ps;
ns = 1000ps;
us = 1000ns;
ms = 1000us;
sec = 1000ms;
min = 60sec;
end unit;
¥¥) ÁýÇÕÇü :: ÁýÇÕÇüÀº ´Ù¸¥ Á¾·ùÀÇ ¼ýÀÚÇüÀ̳ª ¹è¿ÇüÀ» Çϳª·Î ¸¸µé¾î »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. °¢°¢ÀÇ Field·Î ³ª´µ¾îÁ®¼ º°°³ÀÇ Data TypeÀ» ¼±¾ðÇÒ ¼ö ÀÖ´Ù. Record Type À¸·Î ¼±¾ðµÈ °´Ã¼ÀÇ ¿ä¼Ò °ªÀ» ÂüÁ¶Çϱâ À§Çؼ °´Ã¼¿Í ¿ä¼Ò»çÀÌ¿¡ '.'À» »ç¿ëÇÑ´Ù.
¿¹) Type information is
record value : bit;
context : integer;
end record;
variable kk : information;
kk.value := '1';
kk.context := 9;
¥¦) ¹è¿Çü :: °°Àº Á¾·ùÀÇ ¼ýÀÚÇüÀ» Çѱºµ¥ ¹¾î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼±¾ð ¹æ¹ý¿¡ µû¶ó µÎ °¡Áö·Î ³ª´¶´Ù.
¢Â Á¦ÇÑÇü :: ÀÌ¹Ì ¼±¾ðµÈ TypeÀ» Á¤ÇØÁø ¹üÀ§¿¡¼ ¿°ÅÇÏ°Ô ¸¸µç °ÍÀ¸·Î ÀÏÁ¾ÀÇ BUS TypeÀ¸·Î ¸¸µç °ÍÀÌ´Ù. ¿©±â¼ to¿Í downto´Â ³»¸²Â÷¼ø°ú ¿À¸§Â÷¼øÀ¸·Î Á¤ÀÇÇÏ´Â °ÍÀÌ ´Ù.
¿¹) Type byte is array( 7 downto 0 ) of bit;
variable a : byte;
a := "01110000";
¢Â ¹«Á¦ÇÑÇü :: Á¦ÇÑÇü°ú´Â ´Ù¸£°Ô ¼±¾ðµÈ TypeÀ» ¶Ç ÇϳªÀÇ º¯ÇüµÈ »õ·Î¿î TypeÀ¸·Î ´Ù½Ã ¸¸µå´Â ¿°ÅÇüÀÌ´Ù.
¿¹) Type bit_vector( natural range <> ) of bit;
Type string is array ( positive range <> ) of character;
¥§) ¿¬°áÇü :: ¿¬°áÇüÀº µ¿ÀÛÀû ¸ðµ¨¸µÀ̳ª Çϵå¿þ¾î/¼ÒÇÁÆ®¿þ¾î È¥ÇÕÇüÀ» ¸ðµ¨¸µ ÇÒ ¶§ µ¿Àû ¸Þ¸ð¸® ÇÒ´ç(Dynamic Memory Allocation)À» ÇÊ¿ä·Î ÇÏ´Â °æ¿ì¿¡ À¯¿ëÇϰí, Àڷᱸ Á¶(Data Structure)ÀÇ Å©±â¸¦ ¹Ì¸® °áÁ¤ÇÒ ¼ö ¾ø´Â °æ¿ì¿¡ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î Å¥(Que)³ª ½ºÅÃ(Stack) ±¸Á¶¿¡¼ ¿¬°á ¸®½ºÆ®(Linked List)¸¦ ¸¸µé±â À§ÇØ »ç¿ëÇÑ´Ù. ¿¬°áÇü¿¡´Â 3°¡ Áö·Î ±¸ºÐÇÒ ¼ö ÀÖÀ¸³ª 2°¡ÁöÀÇ Çü½Ä¸¸ ¾Ë°í ³Ñ¾î°¡ÀÚ.
¢Â ºÒ¿ÏÀü ¼±¾ð :: Type ¼±¾ð½Ã ¾Æ¹«·± Ç¥Çöµµ ÇÏÁö ¾Ê°í ¼±¾ðÀÚ¸¸À» Ç¥½Ã
¿¹) Type CELL;
¢Â ÀÏ¹Ý ¼±¾ð :: Type ¼±¾ð½Ã ¾Æ¹«·± Ç¥Çöµµ ÇÏÁö ¾Ê°í ¼±¾ðÀÚ¸¸À» Ç¥½Ã
¿¹) Type LINK is access CELL;
¥¨) ÆÄÀÏÇü :: ÆÄÀÏÇüÀº VHDL ±Ô°Ý ÆÐŰÁöÀÇ TEXTIO ºÎºÐ¿¡ ¼±¾ðµÇ¾î Àֱ⠶§¹®¿¡ Ȱ ¿ë¸¸ ÇÏ¸é µÈ´Ù. ÀÌ°Í ¶ÇÇÑ Çü½Ä¸¸ ¾Ë°í ³Ñ¾î°¡ÀÚ.
¿¹) Type TEXT is file of STRING;
file INPUT : TEXT is in "std_input";
file OUTPUT : TEXT is out "std_output";
¿ì¼±¼øÀ§
³ô´Ù
¡é
¡é
¡é
³·´Ù
|
³í¸® ¿¬»êÀÚ(Local Operator) |
or, and, nor, nand,
xor,xnor |
°ü°è¿¬»êÀÚ(Relational Operator) |
=, /=, >, <, >=, <= |
µ¡¼À¿¬»êÀÚ(Adding Operator) |
+, -, &
|
´ÜÇ׿¬»êÀÚ(Unary Operator) |
+, - |
°ö¼À(Multiplying) |
*, /, mod, rem |
±âŸ ¿¬»êÀÚ |
**, abs, not |
3. ¿¬»êÀÚ(Operator)´Â ¾Æ·¡ Ç¥¿¡ °£´ÜÈ÷ ¿ä¾àÇß´Ù. ¿¬»êÀÚ¸¦ ¿¬¼ÓÀ¸·Î »ç¿ëÇÒ °æ¿ì ¿ì¼± ¼øÀ§¿¡ µû¶ó ¿¬»ê ¼ø¼°¡ °áÁ¤µÈ´Ù. °ýÈ£ ¾ÈÀÇ ¿¬»êÀÚ´Â ¿ì¼±ÇÑ´Ù. ƯÈ÷ ³í¸® ¿¬»êÀÚ´Â µÎ ÇÇ¿¬»êÀÚÀÇ ÀÚ·áÇüÀÌ °°¾Æ¾ß ÇÏ¸ç ¿¬»êÀÚÀÇ ¿ì¼± ¼øÀ§°¡ °¡Àå ³·À¸³ª not´Â ³í¸® ¿¬ »êÀÚÀÌÁö¸¸ ´Ù¸¥ ¿¬»êÀÚº¸´Ù ¿ì¼± ¼øÀ§°¡ ³ô´Ù. and³ª or ¿¬»êÀÚ´Â °áÇÕ¹ýÄ¢ÀÌ ¼º¸³µÇ³ª, ¿©·¯ ³í¸®¿¬»êÀÚ¸¦ ÇÔ²² »ç¿ëÇÒ °æ¿ì³ª nand ȤÀº norÀ» ¿¬¼ÓÇØ¼ »ç¿ëÇÒ °æ¿ì °áÇÕ¹ý Ä¢ÀÌ ¼º¸³µÇÁö ¾ÊÀ¸¹Ç·Î °ýÈ£¸¦ »ç¿ëÇÏ°í °áÇÕ¼ø¼¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù.
µ¿ÀÛÀû Ç¥Çö(Behavioral Description)°ú ±¸Á¶Àû Ç¥Çö(Structural Desciption)
VHDLÀÇ Ç¥Çö ¹æ¹ýÀº ¼³°èÀÇ Àǵµ¿Í ¿ëµµ¿¡ µû¶ó ¹æ¹ýÀ» ¼±ÅÃÇϰųª È¥ÇÕÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
1. µ¿ÀÛÀû Ç¥ÇöÀº ÀÚ·áÈ帧Àû Ç¥Çö°ú Process¹®¿¡ ÀÇÇÑ Ç¥ÇöÀ¸·Î ³ª´µ¾î Áø´Ù.
¨ç ÀÚ·áÈ帧Àû Ç¥Çö(Data Flow Description)
ºÎ¿ï ´ë¼ö½Ä, RTL ȤÀº ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ÀԷ°ú Ãâ·Â»çÀÌÀÇ °ü°è¸¦ ³ªÅ¸³»´Â °ÍÀ» ¸»ÇÑ´Ù. ÀÚ·áÈ帧Àû Ç¥ÇöÀº ÁÖ·Î º´Çà 󸮹®¿¡¼ »ç¿ëµÇ¸ç, ¹®ÀåÀÇ ¼ø¼¿¡ ¹«°üÇÏ°Ô µ¿ ½Ã¿¡ ¼öÇàµÈ´Ù.
¿¹) architecture data_flow of compare_logic is
begin
equal <= not( a(1) xor b(1) ) and not( a(0) xor b(0) );
end data_flow;
¨è Process¹®¿¡ ÀÇÇÑ Ç¥Çö
ÀÚ·áÈ帧Àû Ç¥Çö ¹æ¹ýº¸´Ù Ãß»óÈµÈ °³³äÀÌ´Ù. ȸ·ÎÀÇ ±â´ÉÀû Ç¥ÇöÀ» ±â´ÉÀû ȤÀº ¾Ë°í ¸®ÁòÀûÀ¸·Î ±â¼úÇÏ´Â °ÍÀÌ´Ù. Process¹®Àº Çϵå¿þ¾î ½Ã½ºÅÛÀ» ¸ðµâº°·Î ±â¼úÇϴµ¥ Æí¸® ÇÏ´Ù. ½Ã½ºÅÛÀº Çϵå¿þ¾î ¸ðµâ·Î ±¸¼ºµÇ¾î ÀÖ°í, °¢ ¸ðµâÀº º´Çà󸮸¦ ÇÏ¸é¼ ¼·Î°£ÀÇ Åë½ÅÀ» ÅëÇØ °ü°è¸¦ À¯ÁöÇÑ´Ù. Architecture³»¿¡ ¿©·¯ °³ÀÇ Process¹®ÀÌ ÀÖÀ» ¼ö ÀÖÀ¸¸ç °¢ Process¹®Àº º´Çà󸮸¦ ÇÏÁö¸¸, Process¹® ³»ºÎ´Â ¼øÂ÷󸮸¦ ÇÑ´Ù. ¶ÇÇÑ Process¹® Àº °¨Áö½ÅÈ£ÀÇ º¯È¸¦ ÅëÇØ µ¿ÀÛÇϸç À̸¦ ÅëÇØ ¼·Î Åë½ÅÀ» ÇÑ´Ù.
¿¹) architecture sample of compare_logic is
begin
process(a, b) -- ( )¾ÈÀÇ a, b¸¦ °¨Áö½ÅÈ£¶ó ÇÑ´Ù.
begin
if a = b then
equal <= '1';
else
equal <= '0';
end if;
end process;
end sample;
2. ±¸Á¶Àû Ç¥ÇöÀº µ¿ÀÛÀû Ç¥Çöº¸´Ù Çϵå¿þ¾î ±¸Á¶¿¡ °¡Àå °¡±î¿î Ç¥ÇöÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ÇÏ µå¿þ¾î ȸ·Î»ó¿¡¼ IC¼ÒÀÚµéÀ» ¼·Î ¼±À¸·Î ¿¬°áÇÏ¿© ½Ã½ºÅÛÀ» ±¸¼ºÇϵíÀÌ ÀÌ¹Ì ¼³°è µÈ Component¸¦ ÀÌ¿ëÇÏ¿©, ±× ComponentµéÀ» ¼·Î ¿¬°áÇÏ¿© SystemÀ» ±â¼úÇÏ·Á´Â ¹æ ½ÄÀÌ´Ù. ±¸Á¶Àû Ç¥Çö¿¡´Â Generate¹®°ú Generic¹®ÀÌ ÀÖ´Ù.
¨ç Component¹®
ÀÌ¹Ì ¼³°èÇÑ Entity¸¦ ºÎǰÀ¸·Î °£ÁÖÇÏ¿© ±¸Á¶ÀûÀ¸·Î ¼³°èÇÏ´Â ¹®ÀÌ´Ù. À̸¦ »ç¿ëÇϱâ À§Çؼ´Â Component¸¦ ¼±¾ðÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ Port map()À̶õ ¿¹¾à¾î¸¦ »ç¿ëÇÏ¿© Component¸¦ »ç·ÊÈ ½ÃÄÑ¾ß ÇÑ´Ù.
¿¹) entity nand_component is
port( in1, in2, in3, in4 : in std_logic;
out1, out2 : out std_logic );
end nand_component;
architecture sample of compare_logic is
component nand2 -- component nand2¸¦ ¼±¾ð
port( a, b : in std_logic;
y : out std_logic );
end component;
begin
u1 : nand2 port map( in1, in2, out1);
-- nand2¸¦ »ç·ÊÈ, À§Ä¡°áÇÕ ¹æ½Ä
u2 : nand2 port map( a=>in3, b=>in4, y=>out2 );
-- À̸§°áÇÕ ¹æ½Ä
end sample;
¿¹ÀÇ port map¿¡¼ À§Ä¡°áÇÕ°ú À̸§°áÇÕ ¹æ½ÄÀÌ ÀÖ´Ù. À§Ä¡°áÇÕÀº component¿Í °áÇÕÇÒ ¶§, port signalÀÌ ³ª¿µÈ À§Ä¡¼ø¼´ë·Î ¿¬°áµÇ¸ç, À̸§°áÇÕÀº port signalÀÌ ³ª¿µÈ À§Ä¡¿Í »ó°ü¾øÀÌ °¢°¢ÀÇ 'Çü½ÄÀ̸§' => '½ÇÁ¦À̸§'À¸·Î ¿¬°áµÈ´Ù. À̸§°áÇÕÀº Á÷Á¢ À̸§À¸·Î ¿¬ °áµÇ±â ¶§¹®¿¡ °áÇÕÀÇ ¼ø¼¿¡ ¹«°üÇÏ´Ù. ¶ÇÇÑ component¸¦ »ç¿ëÇϱâ À§Çؼ´Â »ç¿ëÇÒ c omponent°¡ ÀÛ¾÷ µð·ºÅ丮¿¡ µî·ÏÀÌ µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.
¨è Generate¹®
Generate¹®Àº Component¸¦ ¹Ýº¹ÀûÀ¸·Î »ç¿ëÇϱâ À§Çؼ »ç¿ëÇÑ´Ù. Generate¹®Àº ´Ü¼ø ¹Ý º¹»ý¼ºÀ» À§ÇÑ for-generate¹®°ú ÁÖ¾îÁø Á¶°Ç¿¡ µû¶ó ¹Ýº¹Ã³¸®ÇÏ´Â if-generate¹®ÀÌ ÀÖ´Ù. ¿¹¸¦ µé±â À§ÇØ ±ä entity À̸§À» »ç¿ëÇß´Ù. »ç¿ëÀÚ´Â ±»ÀÌ ±×·² ÇÊ¿ä´Â ¾ø´Ù.
¢Â for-generate¹®
¿¹) entity nand_component_for_generate is
port ( a, b : in std_logic_vector( 3 downto 0 );
y : out std_logic_vector( 3 downto 0 ) );
end nand_component_generate;
architecture sample of nand_component_generate is
component nand2
port ( a, b : in std_logic;
y : out std_logic );
end component;
begin
g1 : for i in 3 downto 0 generate
ux : nand2 port map ( a(i), b(i), y(i) );
end generate g1;
end sample;
¢Â if-generate¹®
¿¹) entity xor_component_if_generate is
port ( a : in std_logic_vector( 4 downto 0 );
prity_check : out std_logic );
end nand_component_generate;
architecture sample of nand_component_generate is
signal y : std_logic_vector( 3 downto 0 );
component xor2
port ( a, b : in std_logic;
c : out std_logic );
end component;
begin
g1 : for i in 3 downto 0 generate
-- g1, g2, g3, u4, ux´Â ·¹À̺íÀÌ´Ù.
g2 : if i =3 generate
u4 : xor2 port map ( a(i+1), a(i), y(i) );
end generate g2;
g3 : if i < 3 generate
ux : xor2 port map ( y(i+1), a(i), y(i) );
end generate g3;
end generate g1;
parity_check <= y(0);
end sample;
¨é Generic¹®
Generic(ÀϹÝÈ)À̶õ Entity ³»¿¡ ±â¼úÇϸç GenericÀÇ ¸Å°³º¯¼ö¸¦ Entity¿¡ Àü´ÞÇÔÀ¸·Î½á, ȸ·ÎÀÇ °³¼ö³ª ÀÔÃâ·ÂÀÇ Å©±â°¡ ¸Å°³º¯¼ö¿¡ ÀÇÇØ °áÁ¤µÇ°Ô ÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. GenericÀÇ ¸Å°³º¯¼ö·Î »ç¿ëµÇ´Â °´Ã¼´Â »ó¼öÀ̸ç, ¸ðµå´Â inÀ¸·Î µÇ¾î Àֱ⠶§¹®¿¡ ¹Ýµå½Ã ¸í½ÃÇÒ ÇÊ ¿ä°¡ ¾ø´Ù. ¶ÇÇÑ ÀÌ ¸Å°³º¯¼ö´Â »ç¿ë¿ëµµ¿¡ µû¶ó µÎ °¡Áö·Î ³ª´¶´Ù. ¹Ýº¹»ý¼ºÀÇ °³¼ö¸¦ À§ ÇÑ ¸Å°³»ó¼ö¿Í ÀÔÃâ·ÂÀÇ Å©±â¸¦ À§ÇÑ ¸Å°³»ó¼öÀÌ´Ù.
GenericÀÇ »ç¿ëÀº »ç¿ëÇÒ ComponentÀÇ Entity¿¡ ¸ÕÀú ¼±¾ðÀ» ÇÏ°í ´ÙÀ½ Component¸¦ »ç ¿ëÇÏ´Â Logic System¿¡¼ À̸¦ ÀÌ¿ëÇÑ´Ù.
¢Â ¹Ýº¹»ý¼ºÀÇ °³¼ö¸¦ À§ÇÑ ¸Å°³»ó¼ö
¿¹) --[ »ç¿ëµÉ Component ] --
entity nand_generic is
generic ( size : integer := 8 );
port ( x, y : in std_logic_vector( size-1 downto 0 );
z : out std_logic_vector ( size-1 downto 0 ) );
end nand_generic;
architecture sample of nand_generic is
begin
z <= x nand y;
end sample;
-- [ GenericÀ¸·Î ¼±¾ðµÈ Component¸¦ »ç¿ëÇÏ´Â Logic System ] --
entity nand_sys is
port( a, b : in std_logic_vector( 3 downto 0 );
c : out std_logic_vector( 3 downto 0 ) );
end nand_sys;
architecture sample of nand_sys is
component nand_generic
generic( size : integer );
port ( x,y : in std_logic_vector( size-1 downto 0 );
z : out std_logic_vector( size-1 downto 0 ) );
end component;
begin
ux : nandg generic map(4) port map( a, b, c );
end sample;
¢Â ÀÔÃâ·ÂÀÇ Å©±â¸¦ À§ÇÑ ¸Å°³»ó¼ö
¿¹) --[ »ç¿ëµÉ Component ] --
entity nandx_generic is
generic ( size : integer );
port ( x : in std_logic_vector( size-1 downto 0 );
z : out std_logic );
end nandx_generic;
architecture sample of nandx_generic is
begin
process( x )
variable temp : std_logic;
begin
temp := x(0);
for I in 1 to size-1 loop
temp := temp and x(i);
end loop;
z <= not (temp);
end process;
end sample;
-- [ GenericÀ¸·Î ¼±¾ðµÈ Component¸¦ »ç¿ëÇÏ´Â Logic System ] --
entity nand_sys is
port( a : in std_logic_vector( 3 downto 0 );
b : out std_logic );
end nand_sys;
architecture sample of nand_sys is
component nandx_generic
generic ( size : integer );
port ( x : in std_logic_vector( size-1 downto 0 );
z : out std_logic );
end component;
begin
ux : nandx generic map(4) port map( a, b );
end sample;
¼øÂ÷ 󸮹®°ú º´Çà 󸮹®
1. ¼øÂ÷ 󸮹®Àº Process¹® ³»¿¡¼ ±â¼úµÇ¸ç wait¹®, if¹®, case¹® ¹× for-loop¹®ÀÌ ÀÖ´Ù. ±×·¯³ª °¢°¢ÀÇ Process¹®Àº º´Çàó¸®ÇÑ´Ù°í ¸»ÇÑ ¹ÙÀÖ´Ù. ÀÌÁ¦ ¼øÂ÷ 󸮹®ÀÇ Á¾·ù¸¦ ¾Ë ¾Æº¸ÀÚ.
¨ç Process¹®
Process¹®Àº ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î »ç¿ëÇÑ´Ù. ·¹À̺íÀº »ý·«Çصµ µÇ¸ç, °¨Áö½ÅÈ£ ¸®½ºÆ® ´Â ´ë°³ Process³»ÀÇ ÀԷ½ÅÈ£µé·Î ±¸¼ºµÇ¸ç, ÀÌ °¨Áö½ÅÈ£ÀÇ º¯È°¡ »ý±æ ¶§ process¹® ÀÌ ¼öÇàµÈ´Ù. ¶ÇÇÑ ÇϳªÀÇ Entity³»¿¡ ¿©·¯ °³ÀÇ Architecture°¡ ÀÖÀ» ¼ö ÀÖ´Â °Íó·³ Process¹® ¶ÇÇÑ ÇϳªÀÇ Architecture ³»¿¡ ¿©·¯ °³ÀÇ Process¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
[·¹À̺í :] process [(°¨Áö½ÅÈ£ ¸®½ºÆ®)]
begin
¼øÂ÷󸮹®;
end process [·¹À̺í];
¨è If¹®
°í±Þ¾ð¾î¿Í °°ÀÌ Á¶°ÇÀÌ ÂüÀÌ¸é ¼öÇàµÇ´Â if (Á¶°Ç) then Çü½ÄÀÌ ÀÖ´Ù. if¹®Àº ¶ÇÇÑ »ç¿ë¹æ ¹ý¿¡ µû¶ó ´ÙÀ½°ú °°ÀÌ 3°¡ÁöÀÇ µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù.
¢Â ÀϹÝÀû if¹®
if¹®Àº ¸ÖƼ Ç÷¢¼(Multiplexer, ÀÌÇÏ MUX·Î Ç¥±â)¸¦ ÀÌ¿ëÇÏ¿© µî°¡ÀûÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖÀ¸¸ç, if¹®ÀÇ Çϵå¿þ¾î ±¸Çö¿¡ ´ëÇÑ ÀÌÇØ¿¡ µµ¿òÀ» ÁØ´Ù.
¿¹) if ( sel = '1' ) then
y <= a;
else
y <= b;
end if;
¢Â ´ÙÁß if¹®
´ÙÁß if¹®ÀÇ °æ¿ì¿¡µµ °°Àº ¹æ½ÄÀÇ MUX ³í¸®¸¦ Àû¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÁß if¹®Àº ¿©·¯ °³ÀÇ Á¶°ÇÀ» °®´Â °æ¿ìÀÌ´Ù.
¿¹) if ( sel0 = '1' ) then
y <= a;
elsif ( sel1 = '1' ) then
y <= b;
else
y <= c;
end if;
¢Â ±â¾ï¼ÒÀÚ°¡ ³»Æ÷µÈ if¹®
À̰ÍÀº else¹®ÀÌ ¾ø´Â if¹®ÀÌ´Ù. ¿©±â¼´Â if¹®¿¡¼´Â Á¶°ÇÀÌ °ÅÁþÀÏ °æ¿ì ¼öÇàµÇ¾î¾ß ÇÏ´Â else¹®ÀÌ ¾øÀ¸¹Ç·Î, else¿¡ ÇØ´çµÇ´Â Ãâ·ÂÀº °ú°ÅÀÇ Ãâ·Â °ªÀ» ±×´ë·Î À¯ÁöÇÏ°Ô µÈ´Ù. µû¶ó ¼ Ãâ·ÂÀº Á¶°ÇÀÌ °ÅÁþÀÏ ¶§´Â °ú°ÅÀÇ Ãâ·Â °ªÀ» Áö³à¾ß ÇϹǷΠVHDL ÇÕ¼º½Ã¿¡ ±â¾ï¼ÒÀÚ °¡ ³»Æ÷µÈ´Ù. ÀÌ·¯ÇÑ ±â¾ï¼ÒÀÚ°¡ ³»Æ÷µÈ if¹®ÀÇ ¿¹°¡ Latch¿Í Flip/FlopÀÌ´Ù. Latch¿Í Flip/FlopÀÇ Â÷ÀÌ´Â ifÀÇ Á¶°ÇÀÌ Level Trigger¿¡ ÀÇÇØ Ãâ·ÂÀÌ º¯ÈµÇ¸é LatchÀ̰í, ifÀÇ Á¶ °ÇÀÌ ½ÅÈ£ÀÇ »ó½Â ȤÀº Çϰ¿¡ ÀÇÇØ,Áï Rising Edge³ª Falling Edge Trigger¿¡ ÀÇÇØ Ãâ·Â ÀÌ º¯ÈµÇ¸é Flip/FlopÀÌ´Ù. VHDL¿¡¼ À̵éÀ» Ç¥ÇöÇϱâ À§ÇØ event¶ó´Â ¿¹¾à¾î¸¦ »ç¿ë ÇÑ´Ù.
¿¹) if clk'event and clk = '1' then -- Rising Edge¿¡¼ µ¿ÀÛÇÏ´Â Flip/Flop
q <= d;
end if;
if clk'event and clk = '0' then -- Falling Edge¿¡¼ µ¿ÀÛÇÏ´Â Flip/Flop
q <= d;
end if;
if en = '1' then -- Leve Trigger¿¡ ÀÇÇØ µ¿ÀÛÇÏ´Â Latch
q <= d;
end if;
¨é Case¹®
Case¹®Àº ¼ö½Ä °ª¿¡ µû¶ó ¹®ÀåÀ» ¼±ÅÃÇÑ´Ù. Case¹®ÀÇ ¼ö½Ä °ªÀº integerÇü, ¿°ÅÇü µî°ú °° Àº ÀÚ·áÇüÀÌ ÁÖ·Î »ç¿ëµÇ¸ç, Áø¸®Ç¥¿Í °°Àº ±â´ÉÇ¥¿¡ ´ëÇÑ ¼³°è¿¡ ÀûÇÕÇÏ´Ù. Case¹®Àº WhenÀÇ °ª°ú ºñ±³ÇÏ¿© ÀÏÄ¡ÇÏ¸é ±× ¹®ÀåÀ» ¼öÇàÇÑ´Ù. WhenÀÇ ¼ö½ÄÀ» ¿©·¯ °ªÀ¸·Î Ç¥Çö ÇÒ ¶§´Â '|'(¶Ç´Â)À̶ó´Â ±âÈ£¸¦ »ç¿ëÇÑ´Ù.
¿¹) case sel is
when "00" => y <= d(0);
when "01" => y <= d(1);
when "02" => y <= d(2);
when others => y <= d(3);
end case;
¨ê Loop¹®
Loop¹®Àº ¹Ýº¹Ã³¸® Çϱâ À§ÇÑ °ÍÀÌ´Ù. Loop¹®Àº For-LoopÇü½Ä°ú While-LoopÇü½Ä ¹× ´Ü ¼ø LoopÇü½ÄÀÌ ÀÖ´Ù. Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
¡ß [ ·¹À̺í ] : for ·çÇÁº¯¼ö in º¯¼ö¹üÀ§ loop
¼øÂ÷ 󸮹®; -- º¯¼ö ¹üÀ§¸¸Å ¹Ýº¹
end loop [ ·¹À̺í ];
¡ß [ ·¹À̺í ] : while Á¶°Ç loop
¼øÂ÷ 󸮹®; -- Á¶°ÇÀÌ ÂüÀÏ ¶§±îÁö ¹Ýº¹
end loop [ ·¹À̺í ];
¡ß [ ·¹À̺í ] : loop
¼øÂ÷ 󸮹®; -- ¹«ÇÑ ¹Ýº¹
end loop [ ·¹À̺í ];
|
¢Â For-LoopÇü½Ä
For-Loop¹®Àº ·çÇÁº¯¼ö°¡ 1¾¿ Áõ°¡ ¶Ç´Â °¨¼ÒÇϸé¼, ÃÖÁ¾°ª¿¡ µµ´ÞÇÒ ¶§±îÁö Loop¹®¿¡ µÑ·¯½ÎÀÎ ¼øÂ÷ 󸮹®À» ¹Ýº¹Ã³¸®ÇÑ´Ù. ·çÇÁº¯¼ö´Â ¾î¶°ÇÑ °´Ã¼·Îµµ ¼±¾ðµÇÁö ¾Ê¾Æ¾ß µÇ¸ç, ¿ÀÁ÷ For-LoopÀÇ ·çÇÁº¯¼ö·Î¸¸ »ç¿ëµÇ¾î¾ß ÇÑ´Ù.
¿¹) entity and_logic is
port ( a, b : in std_logic_vector( 3 downto 0 );
y : out std_logic_vector( 3 downto 0 ) );
end and_logic;
architecture sample of and_logic is
begin
process( a, b )
begin
for I in 3 downto 0 loop
y(i) <= a(i) and b(i); -- º¯¼ö i¿¡ ´ëÇØ¼ 4¹ø ¹Ýº¹
end loop;
end process;
end sample;
¢Â While-LoopÇü½Ä
While (Á¶°Ç) Loop¹®Àº Á¶°ÇÀÌ ÂüÀ̸é loop¿¡ µÑ·¯½ÎÀÎ ¼øÂ÷ 󸮹®À» ¹Ýº¹¼öÇàÇÑ´Ù. While-Loop¹®ÀÇ Á¶°ÇÀº ¹Ýº¹È½¼ö°¡ ¸íÈ®È÷ °áÁ¤µÇÁö ¾ÊÀ¸¸é, ³í¸®ÇÕ¼ºÀ» ÇÒ ¼ö ¾øÀ¸¹Ç·Î ÁÖÀÇÇØ¾ß ÇÑ´Ù.´Ü¼ø Loop¹®Àº ¹«ÇÑÈ÷ ¹Ýº¹ÇϹǷΠLoop¸¦ ºüÁ® ³ª¿À±â À§Çؼ exit¹®ÀÌ ÇÊ ¿äÇϸç, While¹®ÀÇ °æ¿ì¿Í °°ÀÌ ¹Ýº¹È½¼ö°¡ Á¤ÇØÁöÁö ¾ÊÀ» °æ¿ì¿¡´Â VHDL ³í¸®ÇÕ¼ºÀÌ µÉ ¼ö ¾ø´Ù. ´ëºÎºÐÀÇ VHDL ÇÕ¼º±â´Â While-Loop¹®°ú ´Ü¼ø Loop¹®À» Áö¿øÇÏÁö ¾Ê´Â´Ù.
2. º´Çà 󸮹®
Çϵå¿þ¾î ȸ·Î¿¡¼´Â ÀԷ¼±·Î¿¡¼ Ãâ·Â¼±·Î·Î ½ÅÈ£°¡ Àü´ÞµÇ¾î ó¸®µÉ ¶§ ¼øÂ÷󸮵Ǵ °ÍÀÌ ¾Æ´Ï¶ó º´Çà󸮵ȴÙ. µû¶ó¼ Çϵå¿þ¾î ±¸Á¶¸¦ ±â¼úÇÏ´ÂVHDLÀÇ ¹®ÀåÀº º´Çà󸮿¡ ±â¹ÝÀ» µÎ°í ÀÖ´Ù°í º¼ ¼ö ÀÖ´Ù. Architecture¹® ³»ºÎ¿¡ Ç¥ÇöµÇ´Â ¸ðµç VHDL ¹®ÀåÀº Process¹®ÀÇ ³»ºÎ¸¦ Á¦¿ÜÇϰí´Â ¸ðµÎ°¡ ¼ø¼¿¡ ¹«°üÇÏ´Â º´Çà 󸮹®ÀÌ´Ù. ÀÌ·¯ÇÑ º´Çà ó ¸®¹®¿¡´Â Á¶°ÇÀû º´Çà󸮹®(When~Else)°ú ¼±ÅÃÀû º´Çà 󸮹®(With~Select)ÀÌ ÀÖ´Ù.
¨ç Á¶°ÇÀû º´Çà 󸮹® :: ¼øÂ÷󸮹®ÀÎ if¹®°ú À¯»çÇÏ´Ù.
signal_À̸§ <= ÆÄÇü1 when (Á¶°Ç1) else
ÆÄÇü2 when (Á¶°Ç2) else
ÆÄÇün-1 when (Á¶°Çn-1) else
ÆÄÇün;
|
¿¹) entity logic is
port ( a, b, c, d : in std_logic;
y : out std_logic );
end logic;
architecture sample of logic is
begin
y <= '0' when d='0' else
'0' when c='1' else
'0' when ( a='1' ) and ( b='1' ) else
'1';
end sample;
¨è ¼±ÅÃÀû º´Çà 󸮹® :: withÀÌÇÏÀÇ ¼ö½Ä°ª¿¡ ÀÇÇØ ÆÇ´ÜÇϸç, Case¹®°ú À¯»çÇÏ´Ù.
with (¼ö½Ä) select
signal_À̸§ <= ÆÄÇü1 when (¼±Åðª1),
ÆÄÇü2 when (¼±Åðª2),
ÆÄÇün-1 when (¼±Åðªn-1) else
ÆÄÇün when others;
|
¿¹) entity logic is
port ( x : in std_logic_vector( 1 downto 0 );
y : out std_logic_vector( 3 downto 0 ) );
end logic;
architecture sample of logic is
begin
with x select
y <= "0001" when "00",
"0010" when "01",
"0100" when "10",
"1000" when others;
end sample;
|