[½ÇÀü °ÀÇ½Ç VHDL]
|
|
Çϵå¿þ¾î ¼³°è, ÀÌÁ¦´Â ÇÁ·Î±×·¡¹ÖÀ¸·Î! 2
¿Ïº®ÇÑ Çϵå¿þ¾î ±â¼ú ¾ð¾î, VHDL
Áö³ È£¿¡¼ Çϵå¿þ¾î¸¦ µðÀÚÀÎÇÏ´Â ´Ù¾çÇÑ ¹æ¹ý¿¡ ´ëÇØ »ìÆìºÃ´Ù. ƯÈ÷ ÁÖ¹®Çü ¹ÝµµÃ¼¸¦ ÀÌ¿ëÇÑ ±¸Çö ¹æ¹ý Áß¿¡¼µµ ¹ÝÁÖ¹®Çü ¹æ½ÄÀÇ ÇÁ·Î±×·¡¹Ö °¡´ÉÇÑ ¼ÒÀÚ¸¦ ÀÌ¿ëÇÑ ±¸Çö ¹æ¹ý¿¡ ´ëÇØ º¸´Ù ÀÚ¼¼È÷ ¾Ë¾ÆºÃ´Ù. ÀÌÁ¦ º»°ÝÀûÀ¸·Î Çϵå¿þ¾î ±â¼ú ¾ð¾î¸¦ ÀÌ¿ëÇÑ µðÁöÅÐ ½Ã½ºÅÛÀÇ ±¸Çö ¹æ¹ýÀ» ¾Ë¾Æ º¼ Â÷·Ê´Ù. À̹ø È£¿¡¼´Â ´ëÇ¥ÀûÀÎ Çϵå¿þ¾î ±â¼ú ¾ð¾î¶ó ÇÒ ¼ö ÀÖ´Â VHDLÀÇ ¹®¹ý°ú ÇÁ·Î±×·¡¹Ö ¹æ¹ýÀ» ¼³¸íÇÏ°í, °£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ ±× »ç¿ë¹ýÀ» ÀÍÇôº¸ÀÚ.
¿¬Àç¼ø¼
|
|
|
1ȸ 2002.8 | ÃÖ»óÀÇ Çϵå¿þ¾î ¼³°è ¹æ¹ýÀ» ã¾Æ¶ó
|
2ȸ 2002.9 | ¿Ïº®ÇÑ Çϵå¿þ¾î ±â¼ú¾ð¾î, VHDL
|
3ȸ | ³ªÀÇ Ã¹ Çϵå¿þ¾î ÇÁ·Î±×·¡¹Ö, ÀÚÆDZ⠼³°è ÇÁ·ÎÁ§Æ®
|
|
¿¬Àç°¡À̵å
|
|
|
¿î¿µÃ¼Á¦ | À©µµ¿ì 98 ÀÌ»ó
|
°³¹ßµµ±¸ | Xilinx Foundation (PC & UNIX)
|
±âº»Áö½Ä | ³í¸® ȸ·Î, µðÁöÅÐ ½Ã½ºÅÛ
|
ÀÀ¿ëºÐ¾ß | µðÁöÅРȸ·ÎÀÇ ¼³°è, ASIC/FPGAÀÇ ¼³°è
|
|
|
°ûÁ¾¿í celot@naver.com
|
|
Çϵå¿þ¾î¸¦ µðÀÚÀÎÇÒ ¼ö ÀÖ´Â ¾ð¾î VHDL°ú Verilog ÇÁ·Î±×·¡¹Ö¿¡ °ü½ÉÀ» °®°í ÀÖÀ¸¸ç, ¸µ ±â¹Ý °í¼º´É ´ëÇü ÄÄÇ»ÅÍ °³¹ß ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÑ ¹Ù ÀÖ´Ù. ÀÚ½ÅÀ» Çϵå¿þ¾î ¿£Áö´Ï¾î¶ó°í ¼Ò°³ÇÏ´Â ÇÊÀÚ´Â ÀÌ ±ÛÀ» ÅëÇØ µðÁöÅÐ ½Ã½ºÅÛ ¼³°è¿Í Çϵå¿þ¾î ±â¼ú ¾ð¾î¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹Ö¿¡ °ü½ÉÀ» °®´Â µ¶ÀÚ°¡ ¸¹¾ÆÁö±â¸¦ ¹Ù¶õ´Ù°í.
|
¿ì¸®´Â Áö³ È£¿¡¼ Çϵå¿þ¾î ±â¼ú ¾ð¾î°¡ ¹«¾ùÀ̸ç, À̸¦ ¾î¶² ¿ëµµ¿¡ ¾î¶² ¹æ½ÄÀ¸·Î »ç¿ëÇϴ°¡¿¡ ´ëÇØ ¼³¸íÇß´Ù. ÀÌÁ¦ Á»´õ ÀÚ¼¼È÷ ¾Ë¾Æ º¼ Â÷·Ê·Î À̹ø È£¿¡¼´Â Çϵå¿þ¾î ±â¼ú ¾ð¾î·Î¼ÀÇ VHDL¿¡ ´ëÇÑ ¹®¹ý°ú ±âº»ÀûÀÎ »ç¿ë ¹æ¹ý, ±×¸®°í ½ÇÁ¦ ÇÁ·Î±×·¡¹ÖÇÒ ¶§ ÇÊ¿äÇÑ VHDLÀÇ ´Ù¾çÇÑ Ç¥Çö ¹æ¹ý¿¡ ´ëÇØ »ìÆ캻´Ù.
VHDLÀÇ ¼¼°è
VHDLÀº ±âº»ÀûÀ¸·Î ASIC°ú °°Àº ´ë±Ô¸ð ÁýÀû ȸ·ÎÀÇ ¼³°è½Ã ÁÖ·Î »ç¿ëµÇ´Â ¾ð¾î·Î¼, ±âÁ¸ÀÇ Çϵå¿þ¾î ¼³°è½Ã ÇÊ¿äÇÑ È¸·Îµµ ÀÔ·ÂÀÇ ¹ø°Å·Î¿òÀ» ´ë½ÅÇØ ´Ü¼øÈ÷ ÄÚµù ÇüÅÂÀÇ ÅؽºÆ®¸¦ ÀÔ·ÂÇÔÀ¸·Î½á Çϵå¿þ¾îÀÇ µ¿ÀÛÀ» ¹¦»çÇÒ ¼ö ÀÖ°Ô²û ¼³°èµÈ Çϵå¿þ¾îÀû Ãø¸éÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î¶ó ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ VHDLÀº ȸ·ÎÀÇ ¿¬°á Á¤º¸¸¦ Æ÷ÇÔ ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ±âÁ¸ÀÇ C ¾ð¾î¿Í °°Àº ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î¼ÀÇ ¼º°Ýµµ °¡Áö°í ÀÖ¾î ¸Å¿ì ´Ù¾çÇÑ Çϵå¿þ¾î ±â¼ú ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ¶ÇÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¿ÜÇ⸸ µûÁöÀÚ¸é ¼ÒÇÁÆ®¿þ¾î ÇÁ·Î±×·¡¸Óµé¿¡°Ô´Â °¡Àå Ä£¼÷ÇÏ´Ù°í ÇÒ ¼ö ÀÖ´Â C ¾ð¾î¿Í À¯»çÇÑ ÇüŸ¦ ³ªÅ¸³½´Ù. Â÷ÀÌ°¡ ÀÖ´Ù¸é C ¾ð¾î´Â ¼ÒÇÁÆ®¿þ¾îÀÇ Æ¯¼º»ó ¸ðµç ¹®ÀåÀÌ ¼øÂ÷ ±¸¹®À¸·Î¸¸ ±¸¼ºµÈ ¹Ý¸é VHDLÀº ¼øÂ÷ ±¸¹® ÀÌ¿Ü¿¡ º´·Ä ±¸¹®°ú Çϵå¿þ¾î ƯÀ¯ÀÇ ½Ã°£(timing) °³³äÀÌ ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â ºñ´Ü VHDL¸¸ÀÇ Æ¯¼ºÀ̶ó ÇÒ ¼ö ¾øÀ¸¸ç ÀÏ¹Ý Çϵå¿þ¾î ±â¼ú ¾ð¾î´Â ¸ðµÎ ÀÌ¿Í °°Àº ±âº»ÀûÀΠƯ¡À» °¡Áö°í ÀÖ´Ù. ±×·³ VHDLÀÇ Æ¯Â¡¿¡ ´ëÇØ ÀÚ¼¼È÷ »ìÆ캸ÀÚ.
- Çϵå¿þ¾î ±â¼ú ¾ð¾î·Î¼ÀÇ Ç¥ÁØÈµÈ ÇüÅ Á¦°ø : ±âÁ¸ÀÇ ¿©·¯ Çϵå¿þ¾î ±â¼ú ¾ð¾îµéÀÌ Á¸ÀçÇÏ´Â °¡¿îµ¥ ȸ»ç¸¶´Ù °¢°¢ ´Ù¸£°Ô ¼³°èÇÏ´ø ´Ù¾ç¼ºÀ» Ç¥ÁØÈµÈ VHDLÀÌ µîÀåÇÔÀ¸·Î½á ÀÚ·á ±³È¯, º¸°ü, ¹®¼È µîÀ» ÅëÀÏÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.
- ƯÁ¤ ÇÁ·Î¼¼½º ±â¼ú¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â ±â¼ú µ¶¸³Àû ÇüŸ¦ Á¦°ø : ƯÁ¤ ¼³°è ±â¼úÀ̳ª Á¦Á¶ °øÁ¤°ú´Â ¹«°üÇÏ°Ô Á¦Ç°À» ¼³°èÇÒ ¼ö ÀÖ´Ù.
- »óÀ§ ·¹º§ ¾ð¾î ÇüÅÂÀÇ Á¦°ø : VHDLÀº °í±Þ ÇÁ·Î±×·¡¹Ö ¾ð¾î(HLL, High Level Language)¿Í °°Àº ¿ø¸®¿¡ ¹ÙÅÁÀ» µÎ¸é¼ Çϵå¿þ¾îÀû Ư¡À» ºÎ°¡ÇÏ¿© Ç¥Çö ´É·ÂÀ» È®Àå½ÃÄ×´Ù.
- ±¤¹üÀ§ÇÑ ¼³°è ¹üÀ§ÀÇ Áö¿ø : °£´ÜÇÑ Çϵå¿þ¾î ¸ðµâÀÇ ±¸Çö¿¡¼ »Ó¸¸ ¾Æ´Ï¶ó VLSI ¼öÁØÀÇ °í¹Ðµµ ÁýÀû ȸ·ÎÀÇ ¼³°è½Ã¿¡µµ ¿ëÀÌÇÏ°Ô »ç¿ëµÈ´Ù.
- ÇÏÇâ½Ä(Top-Down) ¼³°è ¹æ¹ýÀÇ Áö¿ø : ÇÏÇâ½Ä ÇüÅÂÀÇ ¼³°è ¹æ½ÄÀ» Áö¿øÇØ º¸´Ù º¹ÀâÇÑ È¸·Î¿¡ ´ëÇÑ ¼³°è ±â°£À» ÁÙÀÌ°í, ¼³°è °úÁ¤¿¡¼ ¹ß»ýÇϱ⠽¬¿î ¿À·ù¿¡ ´ëÇÑ ¼öÁ¤ ÀÛ¾÷À» ½±°Ô ÇØÁØ´Ù.
- ¿©·¯ °¡ÁöÀÇ ¼³°è ±â¹ýÀÇ ±¸Çö : ´ë±Ô¸ðÀÇ µðÁöÅÐ ½Ã½ºÅÛ¿¡ ´ëÇÑ ¸í¼¼ÀÇ ±â¼ú, ¼³°è, ½Ã¹Ä·¹ÀÌ¼Ç µîÀÇ ÇÁ·Î±×·¥ÀÌ °¡´ÉÇؼ ¿©·¯ °¡Áö ¼³°è ±â¹ýÀ» Àû¿ëÇÒ ¼ö ÀÖ´Ù. Áï °èÃþÀû ¼³°èÀÇ Áö¿ø, µ¿±â½Ä/ºñµ¿±â½Ä ¼³°è µîÀÌ °¡´ÉÇÏ´Ù.
- Æø ³ÐÀº ±â¼ú ¹üÀ§ : ½Ã½ºÅÛ ·¹º§¿¡¼ºÎÅÍ ³í¸®È¸·Î ·¹º§±îÁö ÇϳªÀÇ ¾ð¾î·Î¼ ¸ðµÎ ±â¼úÀÌ °¡´ÉÇÏ´Ù.
- º¹¼ö ¼³°è ±×·ì¿¡ ÀÇÇÑ °øµ¿ °³¹ß °¡´É : °øµ¿ ¶óÀ̺귯¸®ÀÇ ±¸Ãà, °èÃþÀû ¼³°èµîÀ» ÀÌ¿ëÇϹǷΠ´Ù¼öÀÇ ±×·ìÀÌ Æ÷ÇÔµÈ °øµ¿ÀÇ °³¹ßÀÌ °¡´ÉÇÏ´Ù.
ÇÏÁö¸¸ ÀÌ¿Í °°Àº Ư¡¿¡µµ ºÒ±¸ÇÏ°í VHDLÀÇ ¹®Á¦Á¡µµ ÀÖ´Ù. ÇÏÁö¸¸ ´ÙÀ½¿¡ »ìÆ캼 ¹®Á¦Á¡ ¶ÇÇÑ VHDL ³»ÀûÀÎ ¿äÀÎÀ̱⺸´Ù´Â ¼³°èÀÚ³ª ¼³°èȯ°æ°ú ¿¬°üµÈ ¿ÜÀû ¿äÀÎÀÌ ¸¹´Ù. VHDLÀÇ »ç¿ë»óÀÇ ³Á¡À̶ó¸é ´ÙÀ½°ú °°Àº °ÍµéÀ» µé ¼ö ÀÖ´Ù.
- ¹®¹ýÀÇ º¹À⼺ : VHDLÀº ºñ±³Àû º¹ÀâÇÑ ¾ð¾îÀÌ´Ù. ÀÌ´Â ¼ÒÇÁÆ®¿þ¾î ¾ð¾îÀû °üÁ¡¿¡¼ º¸¸é Å« ¹®Á¦´Â ¾È µÇÁö¸¸ ±âÁ¸ÀÇ Çϵå¿þ¾î Á¦ÀÛÀÚÀÇ ÀÔÀå¿¡¼´Â »õ·Î¿î ¾ð¾î¸¦ ÀÍÈ÷´Â °ÍÀÌ ²Ï ¹ø°Å·Î¿î ÀÏÀÌ µÉ ¼ö ÀÖ´Ù.
- ±Þ°ÝÇÑ ¼³°è ¹æ½ÄÀÇ º¯È ¿ä±¸ : ±âÁ¸ÀÇ »óÇâ½Ä(Bottom-Up) ¼³°è¿¡ Àͼ÷ÇÑ Á¦ÀÛÀÚ¿¡°Ô´Â ±ÞÀÛ½º·± ¼³°è ¹æ½ÄÀÇ º¯È¿¡ ¹«¸®°¡ µû¸¦ ¼ö ÀÖ´Ù. ÀÌ´Â »õ·Î¿î ¼³°è ȯ°æÀÇ µµÀÔÀÌ ÇÊ¿äÇÔÀ» ÀǹÌÇϸç, ¶ÇÇÑ ¼³°è ¹æ¹ýÀÇ ±³À°°ú °°Àº ÀÌÂ÷Àû ºñ¿ëÀÌ Ãß°¡ÀûÀ¸·Î ¹ß»ýÇÒ ¼ö ÀÖÀ½À» ¶æÇÑ´Ù.
- ÃÖÀûÈ µµ±¸ÀÇ Áö¿ø ÇÊ¿ä : VHDLÀº Çϵå¿þ¾î¸¦ ±â¼úÇØ À̸¦ ½Ã¹Ä·¹À̼ÇÇϱâ À§ÇØ ¸¸µé¾îÁø ¾ð¾îÀ̹ǷΠ¼³°èÀÚµéÀÇ ¶Ç ´Ù¸¥ °ü½É»ç¶ó ÇÒ ¼ö ÀÖ´Â Á¤È®ÇÑ Å¸À̹ÖÀÇ ¿¹Ãø ¹× ÀÓ°è °æ·Î µîÀÇ °è»êÀÌ ¾î·Æ´Ù´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ´Ù½Ã ¸»ÇØ VHDLÀº ÇϳªÀÇ ¾ð¾î·Î¼ÀÇ °¡Ä¡°¡ ÀÖÀ» »Ó Á¤ÀÛ ±× ¾ð¾î°¡ »ç¿ëµÉ ȯ°æÀÌ ÃæºÐÈ÷ Áö¿øµÇÁö ¾Ê´Â´Ù¸é ºû ÁÁÀº °³»ì±¸¿¡ ºÒ°úÇÏ´Ù´Â °ÍÀÌ´Ù. ¼³°è¿¡ ÇÊ¿äÇÑ ÇÕ¼º µµ±¸¿Í ÃÖÀûÈ µµ±¸ÀÇ Áö¼ÓÀû Áö¿øÀÌ ÇÊ¿äÇÏ´Ù´Â ¶æÀÌ´Ù.
- ºñÈ¿À²Àû ȸ·ÎÀÇ »ý¼º °¡´É¼º : VHDL·Î ¼³°èÇÑ ÈÄ, CAD ÅøÀÌ ÇÕ¼ºÇÑ ³í¸®È¸·Î´Â »ç¶÷ÀÌ Á÷Á¢ ¼³°èÇÑ °ÔÀÌÆ® ·¹º§ÀÇ È¸·Îº¸´Ù ±× ±Ô¸ð¸é¿¡¼ Å« °æ¿ì°¡ Á¾Á¾ ¹ß»ýÇÑ´Ù. ÀÌ ¿ª½Ã ÃÖÀûÈ µµ±¸ÀÇ Áö¼ÓÀûÀÎ ¹ßÀü°ú Áö¿øÀÌ ÇÊ¿äÇÑ ºÎºÐÀÌ´Ù.
<±×¸² 1>Àº VHDLÀ» ÀÌ¿ëÇÑ ¼³°è¿Í ±âÁ¸ÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ ÀÌ¿ëÇÑ ¼ÒÇÁÆ®¿þ¾î Á¦ÀÛ¿¡ ÀÖ¾î ¼³°è»óÀÇ Â÷ÀÌÁ¡°ú À¯»çÁ¡À» ³ªÅ¸³»´Â °ÍÀÌ´Ù. VHDLÀ» ÀÌ¿ëÇÑ Çϵå¿þ¾î µðÀÚÀεµ ÀÏ¹Ý ¼ÒÇÁÆ®¿þ¾î ¾ð¾îÀûÀΠƯ¡À» °¡Áö°í ÀÖ¾î ±× Ã³¸® °úÁ¤ÀÌ ¼ÒÇÁÆ®¿þ¾îÀÇ ±×°Í°ú ºñ±³ÇØ º¼ ¶§ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö°ú ¿ë¾îÀûÀÎ Â÷ÀÌ°¡ ÀÖÀ»»Ó ¼³°è»óÀÇ ÀýÂ÷¸¦ ºñ±³Çϸé Å©°Ô Â÷À̳ªÁö ¾Ê´Â´Ù.
ÀÏ´Ü ÀýÂ÷Àû ¼³°è ¹æ½ÄÀ¸·Î ÀÛ¼ºÇÑ VHDL ÄÚµå´Â ¼ÒÇÁÆ®¿þ¾î Àû Ãø¸é¿¡¼ º¼ ¶§ ÇÁ·Î±×·¡¹Ö ÀÌÈÄ ÄÄÆÄÀÏ °úÁ¤À» °ÅÄ¡µíÀÌ Çϵå¿þ¾îÀûÀÎ Àüó¸® ÇÕ¼º(pre-synthesis) °úÁ¤À» °ÅÄ£´Ù. ÀÌ·¸°Ô Çؼ »ý±ä °á°ú¹°Àº °ÔÀÌÆ®¿Í RTL ·¹º§ÀÇ ±¸Á¶Àû ÇüÅÂÀÇ ÄÚµåÀÌ´Ù. ÀÌ ºÎºÐÀº ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö ºÎºÐÀÇ ¾î¼Àºí¸® ÇÁ·Î±×·¡¹Ö¿¡ ÇØ´çµÇ´Â ºÎºÐÀ̶ó ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×¸®°í À̸¦ ¾î¼Àºí·¯¸¦ ÅëÇØ ½ÇÁ¦ Çϵå¿þ¾î°¡ ÀνÄÇÒ ¼ö ÀÖ´Â ±â°è¾î·Î ¹Ù²ãÁØ´Ù. ÀÌ¿¡ ´ëÀÀÇÏ´Â VHDLÀ» ÀÌ¿ëÇÑ Çϵå¿þ¾î µðÀÚÀο¡¼´Â ÀÌ·¯ÇÑ °ÔÀÌÆ® ·¹º§ÀÇ Äڵ带 º» ÇÕ¼º °úÁ¤À» °Åó ³×Æ®¸®½ºÆ®(netlist)·Î °á°ú¹°À» ¸¸µé°í À̸¦ ÀÌ¿ëÇØ ·¹À̾ƿô¿¡¼ ½ÇÁ¦ ±¸Çö ÀÛ¾÷À» ¼öÇàÇÑ´Ù.
ÇÑ °¡Áö ºÎ¿¬ÇÏÀÚ¸é VHDL¿¡¼´Â óÀ½ ÃʱâÀÇ ÄÚµù ´Ü°è·Î¼ ÀýÂ÷Àû ¸í¼¼(behavioral description)¿¡ ÀÇÇÑ ÇÁ·Î±×·¡¹ÖÀ» ¼öÇàÇÏ°í À̸¦ ´Ù½Ã °ÔÀÌÆ®¿Í RTL ·¹º§ÀÇ ±¸Á¶Àû ¸í¼¼(structural description)¿¡ ÀÇÇÑ ÇÁ·Î±×·¡¹ÖÀ¸·Î º¯È¯ÇßÁö¸¸, »ç½Ç VHDLÀ» ÀÌ¿ëÇØ Á÷Á¢ óÀ½ºÎÅÍ ±¸Á¶Àû ¸í¼¼¿¡ ÀÇÇÑ °ÔÀÌÆ®¿Í RTL ·¹º§ÀÇ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ¼ÒÇÁÆ®¿þ¾îÀû Ãø¸é¿¡¼ º¼ ¶§ C/C++¿Í °°Àº »óÀ§ ¾ð¾î¸¦ ÀÌ¿ëÇÏÁö ¾Ê°í ÀÏ¹Ý 80×86 ½Ã¸®ÁîÀÇ ¾î¼Àºí¸® ¾ð¾î¸¦ Á÷Á¢ »ç¿ëÇØ ÇÁ·Î±×·¡¹ÖÇÏ´Â °Í°ú °°ÀÌ ¼·Î ºñ±³ÇØ ¼³¸íµÉ ¼ö ÀÖ´Ù. ÀÌ ¶ÇÇÑ Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ºÐ¾ßÀÇ ÇÁ·Î±×·¡¹Ö ¹æ½ÄÀÇ À¯»ç¼ºÀ» º¸¿©ÁÖ´Â ÁÁÀº ¿¹¶ó ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Áö±Ý±îÁö ¿ì¸®´Â VHDLÀÌ °¡Áö´Â ÀåÁ¡°ú ³ª¸§´ë·ÎÀÇ ¹®Á¦Á¡, ±×¸®°í ¼ÒÇÁÆ®¿þ¾îÀÇ ±×°Í°ú ºñ±³ÇßÀ» ¶§ÀÇ Â÷ÀÌÁ¡°ú À¯»çÁ¡¿¡ ´ëÇØ ¾Ë¾ÆºÃ´Ù. ÀÌ¿Í °°Àº ±âº»ÀûÀÎ VHDLÀÇ Æ¯Â¡À» ÀÌÇØÇßÀ¸¸®¶ó º¸°í, ÀÌÁ¦ ´ÙÀ½À¸·Î ÇϳªÀÇ ¾ð¾î·Î¼ÀÇ VHDL¿¡ ´ëÇؼ º»°ÝÀûÀ¸·Î ¾Ë¾Æº¸ÀÚ.
¾ð¾î·Î¼ÀÇ VHDL
Áö±ÝºÎÅÍ ¾ð¾î·Î¼ÀÇ VHDLÀ» »ìÆ캸ÀÚ. Áï, ½ÇÁ¦ VHDLÀ» »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ ±âº»ÀûÀÎ »çÇ×À» »ç¿ë ¹æ¹ý°ú ÁÖÀÇ »çÇ× À§ÁÖ·Î ¾Ë¾Æº¸±â·Î ÇÑ´Ù. ¸ÕÀú VHDL¿¡¼ »ç¿ëÇÏ´Â ½Äº°¾î(identifier), ¿¹¾à¾î(reserved word), ±×¸®°í ÁÖ¼®(comment)¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ÀÌÁ¦ ¼³¸íÇÒ ¼¼ °¡Áö ¿ë¾î´Â ÀÏ¹Ý ¼ÒÇÁÆ®¿þ¾î ÇÁ·Î±×·¡¹Ö¿¡¼µµ ÇüÅÂ¿Í »óȲÀº ´Ù¸£Áö¸¸ °°Àº Àǹ̸¦ °¡Áø´Ù. Âü°í·Î VHDL¿¡¼´Â ¾ËÆĺªÀÇ ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾Ê´Â´Ù.
½Äº°¾î
½Äº°¾î´Â ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼¿Í ¸¶Âù°¡Áö Àǹ̸¦ Áö´Ñ´Ù. VHDL¿¡¼´Â ¿£ÅÍƼ(entity) À̸§, ¾ÆÅ°ÅØó ¸öü(architecture body), Æ÷Æ®(port) ±×¸®°í ÇÔ¼ö(function) µîÀ» Á¤ÀÇÇϱâ À§ÇØ »ç¿ëµÈ´Ù. ÀÌÁ¦ ¸· ³ª¿ÇÑ ±¸Ã¼ÀûÀÎ ¿ë¾î¿¡ ´ëÇؼ´Â º» ¿¬ÀçÀÇ µÞ ºÎºÐ¿¡¼ Çϳª¾¿ ¾Ë¾Æ º¼ °ÍÀÌ´Ù. ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ±×°Í°ú ¸¶Âù°¡Áö·Î VHDLµµ ½Äº°¾îÀÇ Ã¹ ¹ø° ¹®ÀÚ´Â ¹Ýµå½Ã ¿µ¹®À¸·Î ½ÃÀÛÇÏ¸ç µÎ ¹ø° ¹®ÀÚºÎÅÍ ¿µ¹®ÀÚ ¹× ¼ýÀÚ ±×¸®°í ¾ð´õ¹Ù(_)µîÀÌ ¿Ã ¼ö ÀÖ´Ù.
¿¹¾à¾î ¶Ç´Â Å°¿öµå
¿¹¾à¾î´Â VHDL ±¸¹®¿¡¼ ¹Ì¸® ±× Àǹ̰¡ ÁöÁ¤µÇ¾î ÀÖ´Â ¹®ÀÚ¿·Î¼ ¿¹¾à¾î´Â ½Äº°¾î·Î »ç¿ëÇÒ ¼ö ¾ø´Ù. º¸Åë »ç¿ëÀÚ´Â ÇÁ·Î±×·¥ ÆíÁý±â¿¡¼ ÀÌ·¯ÇÑ ¿¹¾à¾î¿Í ½Äº°¾î¸¦ ±¸ºÐÇϱâ À§ÇØ ½Äº°¾î´Â ´ë¹®ÀÚ·Î, ¿¹¾à¾î´Â ¼Ò¹®ÀÚ·Î »ç¿ëÇÏ´Â ¹æ½ÄÀÇ ³ª¸§´ë·ÎÀÇ ÅëÀϼºÀ» °¡Áö°í ÇÁ·Î±×·¡¹ÖÇϱ⵵ ÇÏ°í ƯÈ÷ CPLD³ª FPGA Á¦Á¶È¸»ç¿¡¼ Á¦°øÇÏ´Â ¹®¼ ÆíÁý±â¸¦ ÀÌ¿ëÇÒ °æ¿ì ½Ã°¢ÀûÀ¸·Î ¼·Î ´Ù¸¥ »ö±òÀ» »ç¿ëÇÔÀ¸·Î½á À̸¦ ±¸ºÐÇØ ÁÖ´Â °æ¿ìµµ ÀÖ´Ù. <Ç¥ 1>¿¡ ¿¹¾à¾î°¡ ¾ËÆĺª ¼ø¼·Î Á¤·ÄµÇ¾î ÀÖ´Ù.
<Ç¥ 1> VHDLÀÇ ¿¹¾à¾î
abs
|
access
|
after
|
alias
|
all
|
and
|
architecture
|
array
|
assert
|
attribute
|
|
|
begin
|
block
|
body
|
buffer
|
bus
|
|
case
|
component
|
configuration
|
constant
|
|
|
disconnect
|
|
downto
|
|
|
|
else
|
elsif
|
end
|
entity
|
exit
|
|
file
|
for
|
function
|
|
|
|
generate
|
generic
|
guarded
|
|
|
|
if
|
in
|
inout
|
is
|
|
|
label
|
library
|
linkage
|
loop
|
|
|
map
|
mod
|
|
|
|
|
nand
|
new
|
nor
|
not
|
null
|
|
of
|
on
|
open
|
or
|
others
|
out
|
package
|
port
|
procedure
|
|
process
|
|
range
|
record
|
register
|
rem
|
report
|
return
|
select
|
severity
|
signal
|
|
subtype
|
|
then
|
to
|
transport
|
type
|
|
|
unit
|
until
|
use
|
|
|
|
variable
|
|
|
|
|
|
wait
|
when
|
while
|
|
with
|
|
xor
|
|
|
|
|
|
ÁÖ¼®
VHDL¿¡¼ ÁÖ¼®Àº - - ·Î Ç¥½ÃµÈ´Ù. ¿©´À ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼¿Í ¸¶Âù°¡Áö·Î ÀÌ·¯ÇÑ ÁÖ¼®¹®Àº VHDLÀÇ ¼öÇà¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù. ÇÁ·Î±×·¡¹Ö¿¡¼ÀÇ ½À°üÀ̶ó°í ÇÒ ¼ö ÀÖ°ÚÀ¸³ª ÇÁ·Î±×·¡¸Ó³ª ¼³°èÀÚ¿¡ µû¶ó¼ ÁÖ¼®À» È°¿ëÇÏ´Â ºÎ·ù¿Í ±×·¸Áö ¾Ê´Â ºÎ·ùÀÇ »ç¶÷µéÀÌ È®¿¬È÷ ±¸ºÐµÇ¾îÁö´Â °æ¿ì°¡ Á¾Á¾ ÀÖ´Ù. ¿Ã¹Ù¸¥ ÇÁ·Î±×·¡¹Ö ½À°üÀº °¡±ÞÀû ÁÖ¼®¹®À» ¸¹ÀÌ È°¿ëÇØ À̸¦ ¹®¼¿¡ Æ÷ÇÔÅä·Ï ÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â ÇÁ·Î±×·¡¹ÖÀÇ ¾çÀÌ ¹æ´ëÇØÁö°í ¶Ç °³¹ß ±â°£ÀÌ ±æ¾îÁü¿¡ µû¶ó ¹®¼È¿¡µµ µµ¿òÀÌ µÅ ÇÁ·Î±×·¡¹ÖÇÒ ¶§ ÀÌÁ¡À¸·Î ÀÛ¿ëÇÑ´Ù.
±âŸ VHDLÀ» »ç¿ëÇÒ ¶§´Â ´ÙÀ½°ú °°Àº ÁÖÀÇ »çÇ×µéÀÌ ÀÖ´Ù.
- ¸ðµç ¾ËÆĺªÀº ´ë¹®ÀÚ¿Í ¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾Ê°í ¶È°°ÀÌ Ãë±ÞÇÑ´Ù. µû¶ó¼ º¯¼ö ¼±¾ðÀ̳ª »ç¿ë½Ã¿¡ ÀÌ¿¡ ´ëÇÑ È¥¶õÀÌ ¾øµµ·Ï ÇÑ´Ù.
- ÁÖ¼®Àº ¸¶À̳ʽº(-) µÎ °³·Î ½ÃÀÛÇϸç, ±× ÁÙ ³¡±îÁö¸¸ À¯È¿ÇÏ´Ù.
- ÇÑ ¹®ÀåÀº ¼¼¹ÌÄÝ·Ð(;)À¸·Î ³¡³ª¾ß ÇÑ´Ù.
- ½Äº°¾î°¡ ÇÑ ¶óÀÎÀ» ³Ñ±æ ¼ö ¾ø´Ù.
- ½Äº°¾î Áß°£¿¡ °ø¹éÀ» »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, ¿©·¯ °³ÀÇ ½Äº°¾î ³ª¿½Ã¿¡´Â ÄÞ¸¶(,)·Î¼ ±¸ºÐÇÑ´Ù.
- ½Äº°¾îÀÇ Ã³À½ ºÎºÐ¿¡ ¾ð´õ¹Ù(_)¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, ¿¬¼ÓµÈ µÎ °³ÀÇ ¾ð´õ¹Ù, ¸¶Áö¸· ¹®ÀÚ·ÎÀÇ ¾ð´õ¹Ù¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.
VHDLÀÇ ±âº» ±¸¼º
º¸Åë CAD ÅøÀ» ÀÌ¿ëÇØ È¸·Î¸¦ ¼³°èÇÒ ¶§´Â <±×¸² 2>¿Í °°ÀÌ ¸î¸î ½Éº¼µéÀ» »ç¿ëÇØ Á¦ÀÛÇÑ´Ù. ÀÌ·¯ÇÑ CAD·Î µðÀÚÀÎÇÑ È¸·Îµµ¿¡¼ º¼ ¶§ ½Éº¼¿¡ ÇØ´çÇÏ´Â ºÎºÐ, Áï ÀÔÃâ·ÂÀÇ ¼³°è¿¡ ÇØ´çÇÏ´Â ºÎºÐÀÌ VHDL¿¡¼´Â ¿£ÅÍƼ¸¦ ¼±¾ðÇÏ´Â ºÎºÐÀÌ µÈ´Ù. ±×¸®°í ÀÌ·¯ÇÑ ¿£ÅÍƼÀÇ ³»ºÎ ¼³°è, Áï ½Éº¼ÀÇ ³»ºÎ ȸ·Îµµ¿¡ ÇØ´çÇÏ´Â ºÎºÐÀÌ ¾ÆÅ°ÅØó ¸öü¿¡ ÇØ´çÇϸç ÀÌ ¸öü ³»ºÎ¿¡¼ ½ÇÁ¦ ±× ¸ðµâÀÇ ±¸ÇöÀÌ ÀÌ·ïÁø´Ù. ÀÌ¿Í °°ÀÌ VHDLÀº ±× ±âº» °ñ°ÝÀ¸·Î ¿£ÅÍƼ¿Í ¾ÆÅ°ÅØó ¸öü¸¦ °¡Áø´Ù. º¸´Ù ´õ Á÷°üÀûÀÎ ºí·° ÇüÅ·ΠÀ̸¦ µµ½ÄÈÇÑ °ÍÀÌ <±×¸² 3>ÀÌ´Ù.
ÀÌ·¯ÇÑ <±×¸² 3>°ú °°Àº ±âº» °ñ°ÝÀ» º¸´Ù ´õ ÀÚ¼¼È÷ ÀÌÇØÇϱâ À§ÇØ °£´ÜÇÑ ÇüÅÂÀÇ VHDL Äڵ尡 ´ÙÀ½°ú °°ÀÌ Á¦½ÃµÅ ÀÖ´Ù. ¿ì¸®°¡ »ìÆ캼 ù ¹ø° VHDL ÄÚµåÀÌ´Ù. ÀÌ ÄÚµå´Â <±×¸² 2>¿¡ ÇØ´çÇϴ ȸ·Î¸¦ ¹¦»çÇÑ ÄÚµåÀÌ´Ù. ÄÚµù ¹æ¹ýÀû Ãø¸é¿¡¼ÀÇ ¼³¸íÀº Â÷Â÷ À̾߱âÇÒ °ÍÀÌ¸ç ¿ì¼± ±× °ñ°ÝÀ» ´«¿©°Üº¸±â ¹Ù¶õ´Ù.
-- <±×¸² 2>¸¦ VHDL·Î ¹¦»çÇÑ ÄÚµå library ieee; use ieee.std_logic_1164.all; -- ÀÌ»ó »ç¿ëÇÒ ¶óÀ̺귯¸®ÀÇ ¼±¾ð entity SELECTOR is -- SELECTOR´Â ¿£ÅÍƼÀÇ À̸§ port( A,B : in std_logic; -- »ç¿ëÇÒ ÇɵéÀÇ Á¤ÀÇ SEL : in std_logic; Y : out std_logic ); end SELECTOR;
architecture DATAFLOW of SELECTOR is --DATAFLOW´Â ¾ÆÅ°ÅØó À̸§ begin Y <= (SEL and A) or (not SEL and B); -- ±¸ÇöÇÏ°íÀÚ ÇÏ´Â ±â´É -- ÀÇ ³í¸®½Ä end DATAFLOW;
ù ¹ø° VHDL ¿¹Á¦ÀÌ´Ï ¸¸Å ¼Ò½º Äڵ忡 ´ëÇØ °£´ÜÈ÷ ¾Ë¾Æº¸ÀÚ. ¿ì¼± library¶ó´Â ¿¹¾à¾î°¡ ÀÖ´Ù. ÀÌ´Â C ÇÁ·Î±×·¡¹ÖÀÇ include¹®°ú ºñ½ÁÇÑ °ÍÀ¸·Î º» ¿¹Á¦¿¡¼´Â ieee¿¡ ÇØ´çÇÏ´Â ¶óÀ̺귯¸®¸¦ ÄÚµå ³»¿¡ ºÒ·¯¿Í »ç¿ëÇÏ°Ú´Ù´Â ÀǹÌÀÌ´Ù. Áï ¶óÀ̺귯¸®¸¦ ¼±¾ðÇÏ´Â ºÎºÐÀÌ´Ù. ±× ´ÙÀ½¿¡ ³ª¿Í ÀÖ´Â use ¹®ÀåÀº ÀÌ ¶óÀ̺귯¸®ÀÇ »ç¿ë ¹üÀ§¸¦ ¼³¸íÇÏ´Â ¹®ÀåÀÌ´Ù. Áï ÇØ´ç ¶óÀ̺귯¸®ÀÇ ¹«¾ùÀ» °¡Á®¿Í »ç¿ëÇÒÁö¸¦ ³ªÅ¸³½´Ù. ÀÌ·¯ÇÑ ¿£ÅÍƼ ¾Õ¿¡ ¾²¿©Áø libraryÀÇ ¼±¾ðÀº ÇϳªÀÇ ¿£ÅÍƼ ¼±¾ð, ȤÀº ±×¿¡ ºÎ¼ÓµÇ¾î ÀÖ´Â ¾ÆÅ°ÅØó, ±¸¼º(configuration)±îÁö ¿µÇâÀ» ¹ÌÄ£´Ù. ¶ÇÇÑ use¹®Àº ÇϳªÀÇ ÆÄÀÏ ³»¿¡ µÎ °³ ÀÌ»óÀÇ ¿£ÅÍƼ ¼±¾ðÀÌ ÀÖ´Â °æ¿ì¿¡µµ ÇÊ¿äÇÏ´Ù.
´Ù½Ã ÄÚµå·Î µ¹¾Æ°¡ÀÚ. ±× ´ÙÀ½À¸·Î ³ª¿Í ÀÖ´Â °ÍÀÌ ¹Ù·Î ¿£ÅÍƼÀÌ´Ù. ¿©±â¼´Â SELECTOR¶ó´Â ¿£ÅÍƼ¸¦ ¼±¾ðÇÏ°í ÀÖ´Ù. Áï SELECOTR°¡ ¿£ÅÍƼÀÇ À̸§ÀÎ °ÍÀÌ´Ù. ±×¸®°í ±× ¿£ÅÍƼ ³»ºÎ¿¡´Â A, B, SEL, Y¶ó´Â Æ÷Æ®µéÀÌ Á¸ÀçÇÑ´Ù. ±×¸®°í ºñ·Î¼Ò ¾ÆÅ°ÅØó ³»ºÎ¿¡ ÀÌ SELECTOR¶ó´Â ¿£ÅÍƼ ¸ðµâÀÌ ¼öÇàÇÏ´Â µ¿ÀÛÀÌ ¹¦»çµÇ¾î ÀÖ´Ù. Áï ÄÚµå ³»ºÎÀÇ ±¸ÇöÇÏ°íÀÚ ÇÏ´Â ±â´ÉÀÇ ³í¸®½ÄÀÌ ¿©±â¿¡ ÇØ´çµÈ´Ù.
Áö±Ý±îÁö ¿ì¸®´Â VHDLÀÇ Ã¹ ¹ø° ¿¹Á¦·Î¼ <±×¸² 2>¸¦ VHDL·Î ±¸ÇöÇÑ Äڵ带 ¾Ë¾ÆºÃ´Ù. ¾ÆÁ÷±îÁö´Â ´ëÃæ ÀÌ·± °Å±¸³ª Á¤µµ·Î¸¸ ÀÌÇØÇÏ°í ³Ñ¾î°¡µµ ¹«³ÇÏ´Ù. Áö±ÝºÎÅÍ Çϳª¾¿ VHDLÀÇ ¼¼ºÎ ¿ä¼Ò¿¡ ´ëÇؼ ¼³¸íÇÒ °ÍÀÌ´Ù. VHDLÀ» ÀÌ¿ëÇØ Çϵå¿þ¾îÀûÀ¸·Î Ç¥ÇöÇϱâ À§Çؼ´Â ¾Õ¼ ¼³¸íÇÑ ¿£ÅÍƼ¿Í ¾ÆÅ°ÅØó ÀÌ¿Ü¿¡ ¸î °¡ÁöÀÇ ±¸¼º ¿ä¼Ò°¡ ´õ ÀÖ´Ù. ¿£ÅÍƼ¿Í ¾ÆÅ°ÅØó ÀÌ¿Ü¿¡ °ÍÀ» ÇÔ²² ºñ±³ÇØ ³ª°¡¸é¼ »ìÆ캸ÀÚ.
¿£ÅÍƼ ¼±¾ð ´ÜÀ§
¾Õ¼ ¼³¸íÇßµíÀÌ ¿£ÅÍƼ ¼±¾ð(entity declaration)Àº ¼³°è ȸ·ÎÀÇ ÀÔÃâ·Â°ú ¸ðµâÀÇ ¿ÜºÎ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÑ´Ù. ÇϳªÀÇ È¸·Î¿¡´Â ÇϳªÀÇ ¿£ÅÍƼ ¼±¾ð¸¸ÀÌ Á¸ÀçÇÏ´Â ¹Ý¸é¿¡ Ç¥ÇöÇÏ´Â ¹æ¹ý¿¡ µû¶ó¼ ¿©·¯ °³ÀÇ ¾ÆÅ°ÅØó ¸öü°¡ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. Áö³ ¿¬Àç¿¡¼ ¼³¸íÇßµíÀÌ ±âº»ÀûÀ¸·Î ¸öü ³»ºÎ¿¡¼´Â ÀýÂ÷Àû ¸ðµ¨¸µ°ú ±¸Á¶Àû ¸ðµ¨¸µÀÌ °¡´ÉÇÏ¸ç ±×¸®°í À̹ø È£¿¡¼ ¼Ò°³ÇÒ ÀÚ·á È帧Àû ¸ðµ¨¸µµµ ÇÒ ¼ö ÀÖ´Ù. °¢°¢ÀÇ ¸ðµ¨¸µ ±â¹ý¿¡ ´ëÇÑ ¿¹Á¦´Â µÚ¿¡¼ »ìÆì º¸±â·Î ÇÑ´Ù.
-- ¿£ÅÍƼ ¼±¾ð¹®ÀÇ Çü½Ä entity ¿£ÅÍƼ_À̸§ is [generic (¹ü¿ë¹®_Ç¥½ÃÀÚ);] [port (Æ÷Æ®_¸®½ºÆ®);] {¼±¾ð¹®} { begin(¹®Àå) } end [¿£ÅÍƼ_À̸§];
¿£ÅÍƼÀÇ ÀÔÃâ·ÂÀ» Á¤ÀÇÇÔ¿¡ ÀÖ¾î VHDL¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ½ÅÈ£ÀÇ Á¾·ù´Â ÃÑ ´Ù¼¸ °¡Áö°¡ ÀÖ´Ù. <±×¸² 4>¿¡¼¿Í °°ÀÌ ³ªÅ¸³ ½ÅÈ£ÀÇ È帧Àº ´ÙÀ½°ú °°´Ù.
- in : ½ÅÈ£°¡ ÇØ´ç ¿£ÅÍƼ·Î ÀԷµǴ °æ¿ì¿¡ »ç¿ëµÈ´Ù.
- out : ÇØ´ç ¿£ÅÍƼ¿¡¼ ½ÅÈ£°¡ Ãâ·ÂµÇ´Â °æ¿ì¿¡ »ç¿ëµÈ´Ù.
- inout : ½ÅÈ£°¡ ÇØ´ç ¿£ÅÍƼ·Î µé¾î°¡°í ³ª°¡´Â °æ¿ì¿¡ »ç¿ëÇÑ´Ù. Áï ¾ç¹æÇ⼺ Æ÷Æ®¿¡ »ç¿ëµÈ´Ù. ÀÌ ¶§ ´Ù¼ö °³ÀÇ ¼Ò½º·ÎºÎÅÍÀÇ ¾÷µ¥ÀÌÆ®°¡ °¡´ÉÇÏ´Ù.
- buffer : Ãâ·Â ±â´É¿¡¼ ½ÅÈ£¸¦ ¿£ÅÍƼ ³»¿¡¼ ´Ù½Ã Àд ±â´ÉÀ» Ãß°¡ÇÑ °ÍÀÌ´Ù. Áï Ãâ·ÂÀ» ³»ºÎ¿¡¼ ´Ù½Ã »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÑ °ÍÀÌ´Ù. À̶§ ¾÷µ¥ÀÌÆ® ½ÃÅ°´Â ¼Ò½º´Â Çϳª·Î Á¦ÇѵȴÙ.
- linkage : ´Ü¼øÈ÷ ¿¬°á¸¸ µÇ¾î ÀÖ´Â »óÅÂÀÌ´Ù. À§ÀÇ ¾î´À °æ¿ì¿¡µµ ÇØ´çµÇÁö ¾Ê°í ´ÜÁö Æ÷Æ®·Î¸¸ ¿¬°áµÇ¾î ÀÖ´Â °æ¿ìÀÌ´Ù.
¾ÆÅ°ÅØó ¸öü ´ÜÀ§
¾ÆÅ°ÅØó ¸öü´Â Çϵå¿þ¾î ³»ºÎ¿Í ³»ºÎ ȸ·ÎµéÀÇ ¿¬°á·µ¿ÀÛ·±¸Á¶ µîÀ» Ç¥ÇöÇÑ´Ù. ±×¸®°í ÀÌ ¾ÆÅ°ÅØó ³»¿¡´Â Çϵå¿þ¾î ƯÀ¯ÀÇ º´Ç๮ÀÌ Æ÷ÇԵȴÙ. ÀÌ´Â Çϵå¿þ¾îÀû Ư¡À̶ó ÇÒ ¼ö ÀÖ´Ù. Áï ¾ÆÅ°ÅØó ¸öü ³»¿¡¼ ÇÁ·Î±×·¡¹ÖµÈ º´Ç๮Àº Çϵå¿þ¾î»óÀÇ ³×Æ®¸®½ºÆ®¿Í °°Àº Àǹ̷μ ¼öÇàµÇ±â ¶§¹®¿¡ ÄÚµå ³»ÀÇ À§Ä¡»ó ¼±ÈÄ °ü°è¿Í ½ÇÇà ¼ø¼¿Í´Â ½ÇÁ¦ ¾Æ¹«·± »ó°üÀÌ ¾ø´Ù. ¼ÒÇÁÆ®¿þ¾î ÇÁ·Î±×·¡¹Ö°úÀÇ Áß¿äÇÑ Â÷ÀÌÁ¡À̶ó ÇÏ°Ú´Ù. ÀÌ¿Ü¿¡µµ VHDLÀº Çϵå¿þ¾î ±â¼ú ¾ð¾îÀÓ¿¡µµ ºÒ±¸ÇÏ°í ÀÏ¹Ý ¾ð¾î¿¡¼¿Í ¸¶Âù°¡Áö·Î ¼øÂ÷¹®À» Áö¿øÇÏ°í ÀÖ´Ù. ÀÌ·¯ÇÑ ¼øÂ÷¹®Àº ÇÁ·Î¼¼½º¹® ³»¿¡¼¸¸ ±â¼úµÉ ¼ö ÀÖ´Ù.
-- ¾ÆÅ°ÅØó ¸öüÀÇ ±¸¼º Çü½Ä architecture ¾ÆÅ°ÅØó_À̸§ of ¿£ÅÍƼ_À̸§ is {¼±¾ð¹®} begin ¹®Àå ³»ºÎÀÇ µ¿ÀÛÀû Ç¥Çö; end [¾ÆÅ°ÅØó_À̸§];
ÆÐÅ°Áö ¼±¾ð ´ÜÀ§¿Í ¸öü ´ÜÀ§
VHDL¿¡¼ ÀÚ·áÇü°ú ºÎ ÇÁ·Î±×·¥ µîÀ» ÇϳªÀÇ ÆÄÀÏ·Î ¸¸µå´Â °ÍÀ» ÆÐÅ°Áö¶ó°í ÇÑ´Ù. ÀÌ·¯ÇÑ ÆÐÅ°Áö´Â ÀÚ·áÇü°ú ÇÔ¼ö, ÇÁ·Î½ÃÀúµîÀ» Áߺ¹À¸·Î ¼±¾ðÇϰųª ±â¼úÇÏÁö ¾Ê°í Çѹø¸¸ ±â¼úÇÏ¿© À̸¦ ¿©·¯ ¼³°è¿¡¼ °øµ¿À¸·Î »ç¿ëÅä·Ï ¸ð¾Æ µÐ °ÍÀ» ÀǹÌÇÑ´Ù. ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¶óÀ̺귯¸® ¹× Çì´õ ÆÄÀÏ°ú °°Àº °³³äÀ̶ó°í Çصµ µÉ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÆÐÅ°Áöµµ ¿£ÅÍƼ¿Í ¾ÆÅ°ÅØóó·³ °¢°¢ ¼±¾ð°ú ¸öüÀÇ ´ÜÀ§·Î ±¸ºÐµÈ´Ù.
ÆÐÅ°Áö ¼±¾ð(package declaration)¿¡¼´Â ¿ÜºÎ¿¡¼ ÇÊ¿äÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀ̳ª ºÎ ÇÁ·Î±×·¥ µîÀ» ¼±¾ðÇÏ´Â °ÍÀÌ°í, ¸öü´Â ÆÐÅ°Áö ¼±¾ð ºÎºÐ¿¡¼ Á¤ÀÇÇÑ ºÎ ÇÁ·Î±×·¥ÀÇ ±¸ÇöÀ» ´ã´çÇÏ´Â ºÎºÐÀÌ´Ù.
-- ÆÐÅ°Áö ¼±¾ð package ÆÐÅ°Áö_À̸§ is {¼±¾ð¹®} end ÆÐÅ°Áö_À̸§ -- ÆÐÅ°Áö ¸öü package body ÆÐÅ°Áö_À̸§ is {±¸Çö ¹®Àå} end ÆÐÅ°Áö_À̸§;
±¸¼º ¼±¾ð ´ÜÀ§
³¡À¸·Î ¾Ë¾Æº¼ ´ÜÀ§´Â ±¸¼º ¼±¾ð(configuration declaration) ´ÜÀ§ÀÌ´Ù. ±¸¼º ¼±¾ð ´ÜÀ§¿¡¼´Â ±âº»ÀûÀ¸·Î ¿£ÅÍƼ¿Í ¾ÆÅ°ÅØó °£¿¡ »óÈ£ ¿¬°áÀ» Ç¥ÇöÇÑ´Ù. º¸Åë ÇϳªÀÇ ¿£ÅÍƼ´Â ¿©·¯ °³ÀÇ ¾ÆÅ°ÅØó¸¦ °¡Áú ¼ö ÀÖÀ¸¸ç, °¢°¢ÀÇ ¾ÆÅ°ÅØó´Â ¿©·¯ ÇüÅÂÀÇ µ¿ÀÛ Ç¥ÇöÀ¸·Î ±¸¼ºµÉ ¼ö ÀÖ´Ù. ÀÌ·± µ¿ÀÛÀÇ Æ¯¼ºÀ» µû·Î Ç¥ÇöÇϰųª ÇöÀçÀÇ ÆÄÀÏ¿¡¼ »ç¿ëÇÑ µ¿ÀÛÀÇ Ç¥ÇöÀ» ±â¼úÇÒ ¼ö ÀÖ°Ô ¸¸µç °ÍÀÌ ±¸¼ºÀÌ´Ù. ÀÌ·¯ÇÑ ±¸¼º ¼±¾ðÀº ¼³°èÇÑ È¸·ÎÀÇ »óŸ¦ °£´ÜÈ÷ ¼³¸íÇØ ÁÖ¸ç, ÀÌ Æ¯¼ºÀ» ÀÌ¿ëÇØ °èÃþ ±¸Á¶ Çü½ÄÀÇ ÇÏÇâ½Ä ¼³°è ȸ·Î¸¦ ½Ã¹Ä·¹À̼ÇÀ̳ª ÇÕ¼º½Ã ÀÌ¹Ì º°µµ·Î ÇÕ¼ºµÈ ´Ù¸¥ ÆÄÀÏ°ú ¿¬°á½ÃÄÑ ÁÖ´Â ¿ªÇÒµµ ÇÑ´Ù. ¸µÄ¿(linker)¿Í ºñ½ÁÇÑ ¿ªÇÒÀ̶ó ÇÒ °ÍÀÌ´Ù.
-- ±¸¼º ¼±¾ð Çü½Ä configuration ±¸¼º_À̸§ of ¿£ÅÍƼ_À̸§ is [use °ü·Ã¹® | Attribute ÁöÁ¤] block_configuration end [configuration] [±¸¼º_À̸§];
Áö±Ý±îÁö ¿ì¸®´Â VHDLÀÇ ±âº» ±¸¼º¿¡ ´ëÇØ »ìÆìºÃ´Ù. ù ¿¹Á¦¸¦ ÅëÇØ VHDL ÇÁ·Î±×·¡¹ÖÀÇ ¸Àº¸±â¸¦ ÇßÀ¸¸ç, À̸¦ ¹ÙÅÁÀ¸·Î VHDLÀÇ ±âº»ÀûÀÎ ¼³°è ´ÜÀ§±îÁö ¾Ë¾ÆºÃ´Ù. À̻󿡼 ¼³¸íÇÑ °¢°¢ÀÇ ¼³°èÀÇ ´ÜÀ§¸¦ ÀüüÀûÀÎ °üÁ¡¿¡¼ º¸¸é <±×¸² 5>¿Í °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖ´Ù. Áï ¼³°èÀÇ ´ÜÀ§¸¦ 1Â÷ ´ÜÀ§¿Í 2Â÷ ´ÜÀ§·Î Å©°Ô ±¸ºÐÇßÀ» °æ¿ì, 1Â÷ ¼³°è ´ÜÀ§·Î ÆÐÅ°Áö¿Í ¿£ÅÍƼ ±×¸®°í ±¸¼º ºÎºÐÀÇ ¼±¾ðÀ» ÇØ ÁØ´Ù. ±×¸®°í °¢°¢ÀÇ ¼±¾ð ´ÜÀ§¿¡ ÇØ´çÇÏ´Â ºÎºÐÀ» 2Â÷ ´ÜÀ§ÀÎ ¸öü ºÎºÐ¿¡¼ ±¸ÇöÇØ ³ª°¡°Ô µÈ´Ù.
°´Ã¼¿Í ¿¬»êÀÚ
¼³°èÀÇ °¢ ´ÜÀ§¸¦ ¾Ë¾ÆºÃÀ¸´Ï ÀÌÁ¦ ´ÙÀ½À¸·Î VHDL¿¡¼ Á¦°øÇÏ´Â °´Ã¼(object)¿Í ¿¬»êÀÚ(operator)¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. °´Ã¼´Â ÁÖ¾îÁø ƯÁ¤ ÀÚ·áÇü(data type)ÀÇ °ªÀ» °¡Áú ¼ö ÀÖ´Â ´ë»óÀÌ µÇ´Â °ÍÀ¸·Î¼, VHDL¿¡¼´Â Å©°Ô ½Ã±×³Î(signal), »ó¼ö(constant), º¯¼ö(variable)ÀÇ 3°¡Áö Á¾·ùÀÇ °´Ã¼°¡ ÀÖ´Ù. °¢°¢Àº ¼·Î ´Ù¸¥ Ư¡À» ³ªÅ¸³»¹Ç·Î Àß ±¸ºÐÇØ »ç¿ëÇØ¾ß ÇÑ´Ù. ½Ã±×³ÎÀº ¿ì¼± Æ÷Æ®¿Í ºñ±³ÇØ ÀÌÇØÇØ¾ß ÇÑ´Ù(<±×¸² 6>). Æ÷Æ®¿Í ½Ã±×³ÎÀº ±× ±âÁØÀÌ ³»ºÎ ½ÅÈ£Àΰ¡ ¿ÜºÎ ½ÅÈ£Àΰ¡¿¡ µû¶ó ±¸ºÐµÈ´Ù. Áï ¸ðµâ ¿ÜºÎ¿¡¼ »ç¿ëÇÒ °æ¿ì´Â Æ÷Æ®·Î ¼±¾ðÇØ¾ß ÇÏ¸ç ³»ºÎ¿¡¼¸¸ »ç¿ëµÉ °æ¿ì´Â ½Ã±×³Î·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. ÀÌ ¹Û¿¡ ½Ã±×³ÎÀº º¯¼ö/»ó¼ö¿Í ºñ±³ÇßÀ» ¶§ ½Ã°£ÀÇ °³³äÀÌ ÀÖ´Ù´Â °Íµµ Áß¿äÇÑ Æ¯Â¡ÀÌ´Ù.
±× ¿Ü¿¡ º¯¼ö¿Í »ó¼ö´Â ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ±×°Í°ú µ¿ÀÏÇÏ´Ù. »ó¼ö´Â ÇÑ ¹ø Á¤ÀÇµÇ¸é ½Ã¹Ä·¹ÀÌ¼Ç µµÁßÀÇ ±× °´Ã¼ÀÇ °ª¿¡ º¯°æÀ» ºÒÇãÇÏ´Â °´Ã¼ÀÌ´Ù. ÀÌ¿¡ ¹ÝÇØ º¯¼ö´Â °ªÀÇ °è»ê°ú µ¿½Ã¿¡ ±× °ªÀÌ º¯°æµÇ´Â °´Ã¼¸¦ ÀǹÌÇÑ´Ù. '°ªÀÌ º¯ÇÑ´Ù'´Â °Í°ú 'µ¿½Ã'¿¡¶ó´Â °ÍÀÌ º¯¼öÀÇ Áß¿ä Ư¡ÀÌ´Ù. ¿Ö³ÄÇÏ¸é º¯¼ö¿Í ºñ±³Çؼ ½Ã±×³ÎÀº °ªÀÌ º¯Çϱâ´Â Ç쵂 Çϵå¿þ¾îÀÇ Æ¯¼º»ó ÀÏÁ¤ÇÑ ÀüÆÄ Áö¿¬(propagation delay) ½Ã°£ÀÇ °ªÀ» °¡Áø ÈÄ¿¡ ±× °ªÀÌ º¯Çϱ⠶§¹®ÀÌ°í º¯¼ö´Â ÀÌ·¯ÇÑ Áö¿¬ ½Ã°£¿¡ ´ëÇÑ °³³äÀÌ ¾ø´Ù´Â °ÍÀÌ´Ù. Áö±Ý±îÁöÀÇ ¼³¸íÀÌ <Ç¥ 2>¿¡ ¿ä¾àµÅ ÀÖ´Ù.
<Ç¥ 2> VHDLÀÇ °´Ã¼Çü°ú ±× Ư¡
°´Ã¼Çü
|
ÀǹÌ
|
º¯°æ °¡´É
|
½Ã°£ °³³ä
|
¼±¾ðÇÒ ¼ö ÀÖ´Â Àå¼Ò
|
signal
|
½ÅÈ£ÀÇ ¼±¾ð
|
°¡´É
|
ÀÖ½¿
|
architecture, package, entity
|
variable
|
º¯¼öÀÇ ¼±¾ð
|
°¡´É
|
¾ø½¿
|
process, function, procedure
|
constant
|
»ó¼öÀÇ ¼±¾ð
|
ºÒ°¡´É
|
¾ø½¿
|
architecture, package, entity, process, function, procedure
|
ÀÌÁ¦ ´ÙÀ½À¸·Î VHDL¿¡¼ Á¦°øÇÏ´Â ¿¬»êÀÚ¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ¿¬»êÀÚ´Â <Ç¥ 3>¿¡¼ º¸´Â ¹Ù¿Í °°ÀÌ Å©°Ô ³í¸® ¿¬»êÀÚ, »ê¼ú ¿¬»êÀÚ, °ü°è ¿¬»êÀÚ·Î ³ª´¶´Ù. ±× ¿Ü¿¡ Ư¼ö ¿¬»êÀڷμ ¿¬°á ¿¬»êÀÚ, ºÎÈ£ ¿¬»êÀÚ, ±âŸ ¿¬»êÀÚ µîÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ ¿¬»êÀÚµé »çÀÌ¿¡´Â ±×µé °£ÀÇ ¿ì¼±¼øÀ§°¡ Á¸ÀçÇÑ´Ù. ¿ª½Ã ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í À¯»çÇÑ °³³äÀ̶ó ÇÒ ¼ö ÀÖ´Ù. <Ç¥ 3>¿¡¼´Â ³í¸® ¿¬»êÀÚ°¡ °¡Àå ¿ì¼± ¼øÀ§°¡ ³ô´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
<Ç¥ 3> VHDLÀÇ ¿¬»êÀÚ
±¸ºÐ
|
|
Á¾·ù
|
¿ì¼±¼øÀ§
|
³í¸® ¿¬»êÀÚ (logical operator)
|
and
|
Logical AND
|
6
|
or
|
Logical OR
|
nand
|
Logical NAND
|
nor
|
Logical NOR
|
xor
|
Logical Exclusive OR
|
°ü°è ¿¬»êÀÚ (relational operator)
|
=
|
Equal
|
5
|
/=
|
Not Equal
|
<
|
Less Than
|
<=
|
Less Than or Equal
|
>
|
Greater Than
|
>=
|
Greater Than or Equal
|
¿¬°á ¿¬»êÀÚ (concatenation operator)
|
&
|
Concatenation
|
4
|
»ê¼ú ¿¬»êÀÚ (arithmetic operator)
|
+
|
Addition
|
-
|
Subtraction
|
ºÎÈ£ ¿¬»êÀÚ (sign operator)
|
+
|
Unary Plus
|
3
|
-
|
Unary minus
|
*
|
multiplication
|
»ê¼ú ¿¬»êÀÚ (arithmetic operator)
|
/
|
Division
|
2
|
mod
|
Modulus
|
rem
|
Remainder
|
±âŸ ¿¬»êÀÚ
|
**
|
Exponentiation
|
1
|
abs
|
Absolute Value
|
not
|
Complement
|
ÀÌ ¹Û¿¡µµ VHDL¿¡¼´Â 4°³ÀÇ ½ÃÇÁÆ®(shift) ¿¬»êÀÚ¿Í 2°³ÀÇ È¸Àü(rotate) ¿¬»êÀÚ¸¦ Á¦°øÇÑ´Ù. SLL(Shift Left Logical)/SRL(Shift Right Logical)/SLA(Shift Left Arithmetic)/SRA(Shift Right Arithmetic)°¡ 4°¡Áö ½ÃÇÁÆ® ¿¬»êÀÚ¿¡ ÇØ´çÇÑ´Ù. À̶§ ³í¸® ½ÃÇÁÆ®¿Í »ê¼ú ½ÃÇÁÆ®ÀÇ Â÷ÀÌ´Â À̵¿ ¿¬»êÀ¸·Î ÀÎÇØ Àß·Á ³ª°¡´Â(truncate) ºñÆ® ¹Ý´ëÂÊÀÇ »õ·Î »ý±â´Â ºÎºÐ¿¡ ¹«½¼ °ªÀ» ä¿ö ³Ö´À³Ä¿¡ µû¶ó ±¸ºÐµÈ´Ù. À̶§ 0À» ä¿ö ³Ö´Â °æ¿ì ³í¸® ½ÃÇÁÆ® ¿¬»ê¿¡ ÇØ´çµÇ¸ç, »õ·Î »ý±ä ±× ÀÌÀü ÀÚ¸®ÀÇ °ªÀ» ±×´ë·Î ä¿ö ³ÖÀ¸¸é »ê¼ú ½ÃÇÁÆ®¿¡ ÇØ´çÇÑ´Ù. ±× ¿Ü ROL(Rotate Left Logical)/ROR(Rotate Right Logical)ÀÇ 2°¡Áö ȸÀü ¿¬»êÀÚ°¡ ÀÖ´Ù.
µ¿½Ã 󸮹®°ú ¼øÂ÷ 󸮹®
VHDLÀº ±âº»ÀûÀ¸·Î Çϵå¿þ¾î¸¦ ±â¼úÇϱâ À§ÇÑ ¾ð¾îÀÌ´Ù. ÀÌ·¯ÇÑ Çϵå¿þ¾î ±â¼ú ¾ð¾î°¡ °¡Áö´Â °¡Àå Å« Ư¡ Áß Çϳª°¡ µ¿½Ã 󸮹®ÀÌ´Ù. ÀÌ´Â ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼¸¸ Á¸ÀçÇÏ´Â ¼øÂ÷ 󸮹®°ú´Â »ó´çÇÑ Â÷ÀÌ°¡ Àִ ó¸® ¹æ½ÄÀÌ´Ù. ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼´Â ƯÁ¤ ºí·°, °¡·É 'begin ~ end'»çÀÌ¿¡ ÀÖ´Â ¹®ÀåµéÀÌ <±×¸² 7>ÀÇ ¨Î¿¡¼ º¸´Â ¹Ù¿Í °°ÀÌ °¢°¢ ¼øÂ÷ÀûÀ¸·Î ¼öÇàµÈ´Ù. ÀÌ´Â ¾î¼¸é ´ç¿¬ÇÑ ÀÏÀÎÁöµµ ¸ð¸¥´Ù. ÇÏÁö¸¸ µ¿½Ã 󸮹®Àº <±×¸² 7>ÀÇ ¨Í¿¡¼ º¸´Â ¹Ù¿Í °°ÀÌ ¸ðµç ¹®ÀåµéÀÌ µ¿½Ã¿¡ 󸮵ȴÙ. VHDL¿¡¼ÀÇ ´ëÇ¥Àû µ¿½Ã 󸮹®À¸·Î 'with select'¹®°ú 'when else'¹®ÀÌ ÀÖ´Ù.
¼øÂ÷ 󸮹®Àº Àΰ£ÀÇ »ç°í¹æ½Ä°ú À¯»çÇÑ Æ¯Â¡ÀÌ ÀÖ´Ù. ±×·¡¼ ¾î¼¸é µ¿½Ã 󸮹®À» Áö¿øÇÏ´Â Çϵå¿þ¾îÀÇ ÇÁ·Î±×·¡¹ÖÀÌ ¾î·Á¿î °ÍÀÎÁöµµ ¸ð¸£°Ú´Ù. ±×¸®°í ÀÌ´Â Çϵå¿þ¾î °ü·Ã ÇÁ·Î±×·¡¹Ö ÀÛ¾÷À» ¼öÇàÇÒ °æ¿ì ¸·¿¬È÷ ȸ·ÎÀÇ µ¿ÀÛ¿¡ ´ëÇÑ ³í¸®Àû ¹¦»ç¸¸À¸·Î´Â ¿ì¸®°¡ ¿øÇÏ´Â ÀûÀýÇÑ Çϵå¿þ¾îÀÇ ±¸ÇöÀ» º¸ÀåÇÏÁö ¸øÇÑ´Ù´Â Àǹ̰¡ µÈ´Ù. Çϵå¿þ¾îÀÇ °¢ ¸ðµâµéÀº ÀϹÝÀûÀ¸·Î Ŭ·°¿¡ µ¿±âȵǾî ÀÖ´Ù. ±×¸®°í ±× Ŭ·°ÀÇ µ¿ÀÛ¿¡ ¸ÂÃç °¢ ¸ðµâÀÌ ÇÊ¿äÇÒ °æ¿ì °¢°¢ ÀûÀýÇÑ ÇൿÀ» ÃëÇÑ´Ù. ÀÌ °æ¿ì °¢ ¸ðµâµéÀº µ¿½Ã¿¡ ÇൿÀ» ÃëÇÏ°Ô µÇ´Â °ÍÀÌ´Ù. Áï °¢°¢ÀÇ ¸ðµâµéÀÌ º´·ÄÀûÀ¸·Î µ¿ÀÛÇÑ´Ù´Â ÀǹÌÀÌ´Ù. ±×¸®°í ÀÌ´Â °¢ ¸ðµâ»Ó¸¸ÀÌ ¾Æ´Ï¶ó ¸ðµâ ³»ºÎ¿¡¼µµ ¾ó¸¶µçÁö º´·ÄÀûÀ¸·Î ¼öÇàÇÒ °¡´É¼ºÀÌ ÀÖÀ½À» ³ªÅ¸³½´Ù.
¼øÂ÷ 󸮹®Àº ¾Õ¼ ¼³¸íÇßµíÀÌ ¹®ÀåÀÌ ³ª¿µÈ ¼ø¼´ë·Î ó¸®µÇ¸ç ¼øÂ÷ 󸮹®ÀÇ Ã³À½¿¡´Â ¹Ýµå½Ã¡®process¡¯¹®À» »ç¿ëÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ ¼øÂ÷ 󸮹®¿¡´Â Sensitivity List¶ó´Â °ÍÀÌ Æ÷ÇԵŠÀÖ´Ù. ¹ø¿ªÇÏ¸é ½ÅÈ£ °¨Áö ¸ñ·ÏÀ̶ó´Â Ç¥ÇöÀÌ ÀûÀýÇÒ °ÍÀÌ´Ù. ÀÌ´Â ¼øÂ÷ 󸮹®¿¡¼ ¼öÇàÀ» °¨ÁöÇÒ ½ÅÈ£ÀÇ ¸ñ·ÏÀ» °¡Áö°í ÀÖ´Â ¸®½ºÆ®·Î¼, ÀÌ Sensitivity List °´Ã¼ Áß Çϳª¶óµµ ±× °ªÀÌ º¯ÈµÇ¸é process¹®ÀÌ ¼öÇàµÇ´Â °ÍÀÌ´Ù. ÀÌ ¶§ process¹®Àº ù ¹®ÀåºÎÅÍ process³»ÀÇ ¸¶Áö¸· ¹®Àå±îÁö ÄÚµù»óÀÇ ¼ø¼´ë·Î ÇÑ ¹ø¸¸ ¼öÇàÇÑ ÈÄ ´Ù½Ã óÀ½À¸·Î µ¹¾Æ°¡´Â Çü½ÄÀ» ¶í´Ù. ÀÌ·¯ÇÑ process¹® ³»¿¡¼´Â ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼¿Í °°ÀÌ if¹®, case¹®, for¹® µîÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
Process¹®¿¡ ´ëÇÑ °£´ÜÇÑ ¿¹Á¦¸¦ »ìÆ캸ÀÚ. ´ÙÀ½ ¿¹Á¦¿¡¼´Â ¿ì¼± process¹® ³»ºÎÀÇ Sensitivity List·Î X. Y, Z, C¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. Áï ÀÌ 4°¡Áö °´Ã¼ÀÇ °ª Áß Çϳª¶óµµ º¯°æµÉ °æ¿ì ÀÌ process¹®ÀÌ ¼öÇàµÊÀ» ÀǹÌÇÑ´Ù. ÀÌ ¶§ process¹®ÀÇ Æ¯Â¡¿¡ µû¶ó beginend »çÀ̸¦ ¼ø¼´ë·Î ¼öÇàÇÑ´Ù.
process(X,Y,Z,C) -- X,Y,Z,C¸¦ Sensitivity List·Î »ç¿ë begin C <= X; -- being°ú end »çÀ̸¦ ¼øÂ÷ ½ÇÇà A <= X+C; A <= Y; B <= X+C; end process; -- end±îÁö ¼öÇàÇÏ¸é ´Ù½Ã Ã¹ ¶óÀÎÀ¸·Î
°æ¿ì¿¡ µû¶ó¼´Â Senstivity List°¡ ¾ø´Â process¹®µµ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì´Â ´ÙÀ½ÀÇ ¿¹Á¦¿¡¼Ã³·³ process¹®ÀÇ µ¿ÀÛÀ» Á¤Áö½ÃÅ°±â À§ÇØ Çϳª ÀÌ»óÀÇ wait ¹®ÀåÀ» Æ÷ÇÔÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù. ±× ¹Û¿¡ process¹®Àº ¹Ýµå½Ã ¾ÆÅ°ÅØó ³»ºÎ¿¡¼¸¸ Á¸ÀçÇØ¾ß ÇÑ´Ù´Â Á¦¾àÀÌ ÀÖ´Ù. ¶ÇÇÑ ÇϳªÀÇ ¾ÆÅ°ÅØó ³»ºÎ¿¡¼µµ ¿©·¯ °³ÀÇ process¹®ÀÌ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. º¸Åë process¹®À» ÇÑ °³¸¸ »ç¿ëÇÒ °æ¿ì´Â processÀÇ À̸§À» »ý·«Çصµ »ó°ü¾ø´Ù. ÇÏÁö¸¸ ¿©·¯ °³ÀÇ process¹®À» »ç¿ëÇÒ °æ¿ì¿¡´Â À̵é process¹®À» »óÈ£ ±¸º°Çϱâ À§ÇØ process¹®¿¡ À̸§À» ½á ÁÖ´Â °ÍÀÌ ÁÁ´Ù.
architecture arch_name of entity_name is begin process_name : process -- ÇÁ·Î¼¼¼ÀÇ À̸§ ¼±¾ð¹® begin ¼øÂ÷ 󸮹® wait until(Á¶°Ç); -- wait ¹®Àå ¼øÂ÷ 󸮹® . . . wait for(½Ã°£) -- wait ¹®ÀåÀÇ ¶Ç ´Ù¸¥ ÇüÅ . . . end process; end;
ÀýÂ÷Àû·±â´ÉÀû·µ¥ÀÌÅÍ È帧Àû ¸ðµ¨¸µ
VHDL¿¡¼ ƯÁ¤ ¸ðµâ¿¡ ´ëÇÑ µ¿ÀÛÀÇ Ç¥ÇöÀº Å©°Ô ÀýÂ÷Àû Ç¥Çö°ú ±â´ÉÀû Ç¥Çö, ±×¸®°í µ¥ÀÌÅÍ È帧Àû Ç¥ÇöÀ¸·Î ±¸ºÐµÉ ¼ö ÀÖ´Ù. ¿ì¼± ÀýÂ÷Àû Ç¥ÇöÀº C ÇÁ·Î±×·¥¿¡¼Ã³·³ ¼³°èÇÏ°íÀÚ ÇÏ´Â µðÁöÅРȸ·Î¸¦ Çϵå¿þ¾îÀÇ ±¸Á¶¿Í´Â Á÷Á¢ÀûÀÎ °ü°è°¡ ¾øÀÌ ´Ü¼øÈ÷ ½Ã½ºÅÛÀÇ µ¿ÀÛÀ» ¾Ë°í¸®Áò ·¹º§¿¡¼ ³ªÅ¸³½ °ÍÀ» ¸»ÇÑ´Ù. ÀÌ·¯ÇÑ ÀýÂ÷Àû Ç¥ÇöÀº ÀϹÝÀûÀ¸·Î ¾Õ¼ ¼³¸íÇÑ process¹® ³»¿¡¼ ÁÖ·Î »ç¿ëµÇ¸ç °¡Àå ³ôÀº ¼öÁØÀÇ Ãß»óÀû ¼³°è¸¦ °¡´ÉÄÉ ÇÑ´Ù. Áï ÀÏ¹Ý ¼öÇÐÀû ¾Ë°í¸®ÁòÀ» »ç¿ëÇØ ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÑ ¸ðµ¨¸µ ±â¹ýÀÌ´Ù. ±â´ÉÀûÀÎ ¸ðµ¨¸µÀº °èÃþÀû ¼³°è¿¡¼ À¯¿ëÇÏ°Ô »ç¿ëµÇ´Â ¹æ½ÄÀ¸·Î ÇÏÀ§ ¸ðµâÀ» È£ÃâÇϱ⵵ ÇÏ°í, ·ÎÁ÷ °ÔÀÌÆ®¸¦ Á÷Á¢ Ç¥ÇöÇϱ⵵ ÇÑ´Ù. 3°¡Áö ¸ðµ¨¸µ ±â¹ý Áß °¡Àå Çϵå¿þ¾î¿Í °¡±î¿î ¸ðµ¨¸µ ±â¹ýÀ̶ó ÇÒ ¼ö ÀÖ´Ù. Áï °ÔÀÌÆ®, ¹ö½º µîÀ» ºñ·ÔÇÑ °¢°¢ÀÇ Çϵå¿þ¾î ÄÄÆ÷³ÍÆ®µé °£ÀÇ Á÷Á¢ÀûÀÎ ¿¬°áÀ» ÇÁ·Î±×·¡¹ÖÀ» ÅëÇØ ¼öÇàÇÑ´Ù.
³¡À¸·Î µ¥ÀÌÅÍ È帧Àû ¸ðµ¨¸µ ±â¹ýÀÌ ÀÖ´Ù. ÀÌ´Â ÀýÂ÷Àû ¹æ½Ä°ú ±â´ÉÀû ¹æ½ÄÀÇ Áß°£ ´Ü°è Á¤µµ¿¡ ÇØ´çÇÏ´Â ¸ðµ¨¸µ ¹æ¹ýÀ¸·Î¼ ÀÚ·áÀÇ È帧À» ³ªÅ¸³»µíÀÌ ½Ã½ºÅÛÀÇ ±â´ÉÀ» ³ªÅ¸³½´Ù. ¸» ÀÚü°¡ ÀǹÌÇÏ´Â ¹Ù¿Í °°ÀÌ ½ÅÈ£ ¹× ÀÚ·áÀÇ Á¦¾î È帧ÀÇ Ç¥Çö¿¡ ÃÊÁ¡À» ¸ÂÃß´Â ¼³°è¹æ½ÄÀÌ´Ù. ÁÖ·Î ¿¬»êÀÚ³ª ÇÔ¼ö µîÀ» »ç¿ëÇØ Ç¥ÇöµÇ¸ç, º´Çà ½ÅÈ£ ÇÒ´ç¹®¿¡ ÀÇÇØ ±â¼úµÈ´Ù.
ÀÌ»óÀÇ ¼³¸íÀ» ¹ÙÅÁÀ¸·Î ¶Ç ÇϳªÀÇ ¿¹Á¦¸¦ ÅëÇØ ÀÌµé ¸ðµ¨¸µ ±â¹ý°£ÀÇ »óÈ£ Â÷ÀÌ¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.
¿¹¸¦ µé¾î <±×¸² 8>°ú °°Àº ȸ·Î°¡ ÀÖ´Ù°í ÇÏÀÚ. A, B, CÀÇ 3°¡Áö ÀԷ°ú YÀÇ Ãâ·ÂÀ» °¡Áö¸ç, °£´ÜÇÏ°Ô ³í¸®Àû and¿Í or ¿¬»êÀ» ¼öÇàÇϴ ȸ·ÎÀÌ´Ù. ±×¸®°í ÀÌ¿¡ ´ëÇÑ Áø¸®Ç¥°¡ <Ç¥ 4>¿¡ ³ªÅ¸³ª ÀÖ´Ù. À̸¦ °¡Áö°í Áö±Ý±îÁö ¼³¸íÇÑ °¢°¢ÀÇ ¸ðµ¨¸µ ±â¹ýÀ» »ç¿ëÇØ ±¸ÇöÇØ º¸µµ·Ï ÇÑ´Ù.
<Ç¥ 4> ³í¸® ȸ·ÎÀÇ Áø¸®Ç¥
A
|
B
|
C
|
Y
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
0
|
1
|
0
|
0
|
0
|
1
|
1
|
1
|
1
|
0
|
0
|
0
|
1
|
0
|
1
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
1
|
1
|
-- ÀýÂ÷Àû ¸ðµ¨¸µ ±â¹ýÀ» ÀÌ¿ëÇÑ ±¸Çö library ieee; use ieee.std_logic_1164.all;
entity AND_OR is -- entity ¼±¾ð ºÎºÐ port (A,B,C : in bit; Y : out bit); end AND_OR;
architecture behavioral of AND_OR is -- architecture ºÎºÐ begin process(A,B,C) begin if C='1'or (A = '1'and B = '1') then Y <= '1'; else Y <= '0'; end if end process; end behavioral;
¸ÕÀú ÀýÂ÷Àû ¸ðµ¨¸µ ±â¹ýÀÌ´Ù. ÀÌ ¿¹Á¦¿¡¼´Â ÀýÂ÷Àû ¸í¼¼¸¦ À§ÇØ ¾ÆÅ°ÅØóÀÇ process¹® ³»ºÎ¿¡ ¿øÇϴ ȸ·ÎÀÇ µ¿ÀÛÀ» ±â¼úÇß´Ù. process¹®ÀÇ begin°ú end »çÀÌÀÇ ¹®ÀåµéÀ» Â÷·Ê´ë·Î ¼öÇàÇÏ¸é¼ Senstivity List A, B, C¿¡ º¯È°¡ ÀÖÀ» ¶§¸¶´Ù À̸¦ ¼öÇàÇÏ´Â Çü½ÄÀÌ´Ù. ÀÌ ¶§ ÁÖÀÇÇØ¾ß ÇÒ °ÍÀº ÇÁ·Î±×·¡¹Ö¿¡¼ º¸ÀÌ´Â 'and'³ª 'or'´Â ³í¸®Àû ÀǹÌÀÇ ¿¬»êÀÚ¶ó´Â »ç½ÇÀ» ±â¾ïÇØ¾ß ÇÑ´Ù.
-- ±â´ÉÀû ¸ðµ¨¸µ ±â¹ýÀ» ÀÌ¿ëÇÑ ±¸Çö library ieee; use ieee.std_logic_1164.all; entity AND is port(A,B : in std_logic; Y : out std_logic); end AND; architecture B_AND of AND is begin Y <= A and B; end B_AND; ----------------------------------------------------- library ieee; use ieee.std_logic_1164.all; entity OR is port(A,B : in std_logic; Y : out std_logic); end OR; architecture B_OR of OR is begin Y <= A or B; end B_OR; ----------------------------------------------------- library ieee; use ieee.std_logic_1164.all; entity AND_OR is port(A,B,C : in std_logic; Y : out std_logic); end AND_OR; architecture structural of AND_OR is signal temp : bit; component AND port(A,B : in bit; Y : out bit); end component; component OR port(A,B : in bit, Y : out bit); end component; begin ANDgate : AND port map(A,B, temp); ORgate : OR port map(temp, C, Y); end structural;
±â´ÉÀû ¸ðµ¨¸µ ±â¹ýÀ» ÀÌ¿ëÇÑ ±¸Çö ¹æ¹ýÀÌ´Ù. Äڵ忡¼ º¸±â¿¡ ÀÌ ¹æ¹ýÀº Ãʱ⿡ AND¿Í OR¿¡ ÇØ´çÇÏ´Â ÄÄÆ÷³ÍÆ® ¼±¾ð°ú ÀÌ¿¡ ´ëÇÑ »ç·ÊÈ(instantiation) ºÎºÐÀÌ ÇÊ¿äÇϹǷΠÄÚµå ÀÚü°¡ Á¶±Ý ±æ¾îÁø °æÇâÀÌ ÀÖÁö¸¸, Äڵ忡¼ Á¦ÀÏ ¾Æ·§ ºÎºÐÀÇ ¾ÆÅ°ÅØó ¸öü¸¦ ºñ±³ÇÏ¸ç »ìÆ캸±â ¹Ù¶õ´Ù. ³í¸®Àû and¿Í orÀÇ µ¿ÀÛÀ» °¡´ÉÄÉ ÇÏ´Â AND¿Í OR¶ó´Â °ÔÀÌÆ®¸¦ Á÷Á¢ ÀÌ¿ëÇØ ÀÌ¿¡ ´ëÇÑ Æ÷Æ® ¸ÊÀ» ÅëÇÑ È¸·Î¸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù.
-- µ¥ÀÌÅÍ È帧Àû ¸ðµ¨¸µ ±â¹ýÀ» ÀÌ¿ëÇÑ ±¸Çö library ieee; use ieee.std_logic_1164.all;
entity AND_OR is -- entity ¼±¾ð ºÎºÐ port (A,B,C : in bit; Y : out bit); end AND_OR;
architecture dataflow of AND_OR is -- architecture ºÎºÐ begin Y <= (A and B) or C; end dataflow;
³¡À¸·Î µ¥ÀÌÅÍ È帧Àû ¸ðµ¨¸µ ±â¹ýÀ» »ìÆ캸ÀÚ. ÀýÂ÷Àû ¸ðµ¨¸µ ±â¹ý°ú À¯»çÇÏÁö¸¸ A, B, CÀÇ µ¥ÀÌÅÍ ÀÚ·áÀÇ È帧¿¡ ÁßÁ¡À» µÎ¾î Ç¥ÇöÇß´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ¾Õ¼ ¸»ÇÑ ¹Ù¿Í °°ÀÌ ÀÌ ±â¹ýÀº ½ÇÁ¦ °ÔÀÌÆ® ¸ÊÇÎÀ» ÅëÇÑ ±â´ÉÀû ¹æ¹ý°ú ´ÙºÐÈ÷ ¾Ë°í¸®ÁòÀûÀÎ ÀýÂ÷Àû ¹æ¹ýÀÇ Áß°£ ÇüÅÂÀÇ ¸ðµ¨¸µÀ̶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¿¹Á¦¸¦ ±â´ëÇϸç
Áö±Ý±îÁö 2ȸ¿¡ °ÉÃļ¡®Çϵå¿þ¾î ±â¼ú ¾ð¾î¸¦ ÀÌ¿ëÇÑ µðÁöÅÐ ½Ã½ºÅÛ ¼³°è¡¯¸¦ »ý°¢Çß´Ù. ½ÇÁ¦·Î µðÁöÅÐ ½Ã½ºÅÛ ¼³°è¶ó´Â ¹æ´ëÇÑ ÁÖÁ¦·Î ÇÑÁ¤µÈ Áö¸é¿¡¼ 2ȸ Á¤µµÀÇ ºÐ·®À¸·Î ¿ÏÀüÇÑ ÀÌÇظ¦ ±â´ëÇÏ´Â °ÍÀº ¹«¸®´Ù. ÇÏÁö¸¸ ÀÌ ±ÛÀ» ÅëÇØ µðÁöÅÐ ½Ã½ºÅÛÀ» ¼³°èÇÏ´Â ´Ù¾çÇÑ ¹æ¹ýÀ» ¼Ò°³ÇßÀ¸¸ç, ƯÈ÷ ´Ù¾çÇÑ ¼³°è ¹æ¹ý Áß¿¡¼ Çϵå¿þ¾î ±â¼ú ¾ð¾î¸¦ ÀÌ¿ëÇÑ ¼³°è ¹æ½Ä¿¡ ÃÊÁ¡À» ¸ÂÃç ¼³¸íÇß´Ù. ±×¸®°í ÀÌ·¯ÇÑ Çϵå¿þ¾î ±â¼ú ¾ð¾îÀÇ ´ëÇ¥ÀûÀÎ ¿¹¶ó°í ÇÒ ¼ö ÀÖ´Â VHDLÀ» »ìÆìºÃ´Ù. ÀÌÁ¦ ¸¶Áö¸· ¿¬Àç¿¡¼´Â Áö±Ý±îÁö ¾Ë¾Æº» ¼³°è ¹æ¹ý°ú VHDL¿¡ ´ëÇÑ ÀÌÇظ¦ ¹ÙÅÁÀ¸·Î ½ÇÁ¦ ÀÀ¿ëÀ» ÅëÇÑ ¿¹Á¦¸¦ ´Ù·ê °ÍÀÌ´Ù. mas o
Á¤¸® : À§À±Èñ iwish@sbmedia.co.kr
Âü°íÀÚ·á
- 'HDL Chip Design' A Practical Guide for Designing, Synthesizing and Simulating ASICs and FPGAs using VHDL or Verilog, Douglas J. Smith, Doone Publications
- Xilinx FoundationÀ» ÀÌ¿ëÇÑ µðÁöÅÐ ½Ã½ºÅÛ ¼³°è, ÀÌÁؼº ¿Ü, º¹µÎ ÃâÆÇ»ç
- VHDLÀ» ÀÌ¿ëÇÑ CPLD/FPGA ¼³°è, Â÷¿µ¹è ÆíÀú, ´Ù´Ù¹Ìµð¾î
- µðÁöÅРȸ·Î ±â¼ú ¾ð¾î ÀÔ¹®, ³í¸®¼³°è¿Í HDLÀÇ ±âÃÊ, Á¤Èñ¼º ¿Ü, È«¸ª °úÇÐ ÃâÆÇ»ç
- ÁÖ¹®Çü ¹ÝµµÃ¼ ¼³°è ASIC DESIGN, ÃÖ¸í·Ä, ÇÏÀÌÅ×Å©Á¤º¸
|
¹Ú½º±â»ç
¿¹¾à¾î¿Í Å°¿öµå
¿äÁò ¿¹¾à¾î(reserved word)¿Í Å°¿öµå(keyword)°¡ ÁÖ·Î °°Àº Àǹ̷Π»ç¿ëµÇ´Â °æ¿ì°¡ ¸¹´Ù. ±×¸®°í »ç½Ç ÀÌ°ÍÀÌ Æ²¸° ¸»Àº ¾Æ´Ï´Ù. ÇÏÁö¸¸ ¾ö¹ÐÇÑ Àǹ̿¡¼ º¸¸é ÀÌ µÎ ¿ë¾î »çÀÌ¿¡´Â ºÐ¸íÇÑ Â÷ÀÌ°¡ ÀÖ´Ù. ¿¹¾à¾î´Â ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§¿¡ ¹Ì¸® ±× '»ç¿ëó'°¡ Á¤ÇØÁ® ÀÖ¾î À̸¦ ½Äº°¾î·Î¼ »ç¿ëÇÒ ¼ö ¾øÀ½À» ³ªÅ¸³½´Ù. ÀÌ¿¡ ¹ÝÇØ Å°¿öµå´Â ÇØ´ç ¾ð¾î¿¡¼ ±× 'ÀǹÌ'°¡ ¹Ì¸® Á¤ÇØÁ® ÀÖ´Â ¹®ÀÚ¿À» ¶æÇÑ´Ù. Áï Å°¿öµåÀÇ °æ¿ì Àǹ̸¸ ÁöÁ¤µÇ¾î ÀÖÀ» »ÓÀÌÁö ±× »ç¿ëó°¡ ¹Ì¸® Á¤ÇØÁ® ÀÖ´Ù´Â ¸»Àº ¾Æ´Ï´Ù. µû¶ó¼ Å°¿öµå´Â ½Äº°¾î·Î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é 'if'¶ó´Â °ÍÀÌ ¿¹¾à¾î°¡ ¾Æ´Ñ Å°¿öµå·Î »ç¿ëµÉ °æ¿ì º¯¼öÀÇ À̸§À¸·Îµµ »ç¿ëµÉ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ÇÏÁö¸¸ »ó½ÄÀûÀ¸·Î »ý°¢ÇØ º¼ ¶§ Å°¿öµå¸¦ ¿¹¾à¾î·Î ÀÎÁ¤ÇÏÁö ¾ÊÀ» °æ¿ì ÇÁ·Î±×·¡¹ÖÀÇ °¡µ¶¼ºÀ» ¶³¾î¶ß·Á »ó´çÈ÷ Àб⠳ÇØÇÑ ÄÚµå ÇüÅ°¡ µÉ °ÍÀÌ´Ù. µû¶ó¼ ¿äÁîÀ½ ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îµéÀº ÀÌ·¯ÇÑ Å°¿öµå¸¦ ¿¹¾à¾î·Î¼ »ç¿ëÇϱ⠶§¹®¿¡ Á¤ÀÇ »ó ÀÌµé »çÀÌ¿¡´Â Â÷À̱â ÀÖ±ä Çϳª ¿À´Ã³¯ µÎ ¿ë¾î¸¦ °ÅÀÇ °°Àº Àǹ̷Π»ç¿ëÇÏ°í ÀÖ´Ù.
|
|