¿ù°£ ¸¶ÀÌÅ©·Î ¼ÒÇÁÆ®¿þ¾î...


 


[½ÇÀü °­ÀÇ½Ç 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

 

Âü°íÀÚ·á

  1. 'HDL Chip Design' A Practical Guide for Designing, Synthesizing and Simulating ASICs and FPGAs using VHDL or Verilog, Douglas J. Smith, Doone Publications
  2. Xilinx FoundationÀ» ÀÌ¿ëÇÑ µðÁöÅÐ ½Ã½ºÅÛ ¼³°è, ÀÌÁؼº ¿Ü, º¹µÎ ÃâÆÇ»ç
  3. VHDLÀ» ÀÌ¿ëÇÑ CPLD/FPGA ¼³°è, Â÷¿µ¹è ÆíÀú, ´Ù´Ù¹Ìµð¾î
  4. µðÁöÅРȸ·Î ±â¼ú ¾ð¾î ÀÔ¹®, ³í¸®¼³°è¿Í HDLÀÇ ±âÃÊ, Á¤Èñ¼º ¿Ü, È«¸ª °úÇÐ ÃâÆÇ»ç
  5. ÁÖ¹®Çü ¹ÝµµÃ¼ ¼³°è ASIC DESIGN, ÃÖ¸í·Ä, ÇÏÀÌÅ×Å©Á¤º¸

 

¹Ú½º±â»ç

¿¹¾à¾î¿Í Å°¿öµå

¿äÁò ¿¹¾à¾î(reserved word)¿Í Å°¿öµå(keyword)°¡ ÁÖ·Î °°Àº Àǹ̷Π»ç¿ëµÇ´Â °æ¿ì°¡ ¸¹´Ù. ±×¸®°í »ç½Ç ÀÌ°ÍÀÌ Æ²¸° ¸»Àº ¾Æ´Ï´Ù. ÇÏÁö¸¸ ¾ö¹ÐÇÑ Àǹ̿¡¼­ º¸¸é ÀÌ µÎ ¿ë¾î »çÀÌ¿¡´Â ºÐ¸íÇÑ Â÷ÀÌ°¡ ÀÖ´Ù. ¿¹¾à¾î´Â ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§¿¡ ¹Ì¸® ±× '»ç¿ëó'°¡ Á¤ÇØÁ® ÀÖ¾î À̸¦ ½Äº°¾î·Î¼­ »ç¿ëÇÒ ¼ö ¾øÀ½À» ³ªÅ¸³½´Ù. ÀÌ¿¡ ¹ÝÇØ Å°¿öµå´Â ÇØ´ç ¾ð¾î¿¡¼­ ±× 'ÀǹÌ'°¡ ¹Ì¸® Á¤ÇØÁ® ÀÖ´Â ¹®ÀÚ¿­À» ¶æÇÑ´Ù. Áï Å°¿öµåÀÇ °æ¿ì Àǹ̸¸ ÁöÁ¤µÇ¾î ÀÖÀ» »ÓÀÌÁö ±× »ç¿ëó°¡ ¹Ì¸® Á¤ÇØÁ® ÀÖ´Ù´Â ¸»Àº ¾Æ´Ï´Ù. µû¶ó¼­ Å°¿öµå´Â ½Äº°¾î·Î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é 'if'¶ó´Â °ÍÀÌ ¿¹¾à¾î°¡ ¾Æ´Ñ Å°¿öµå·Î »ç¿ëµÉ °æ¿ì º¯¼öÀÇ À̸§À¸·Îµµ »ç¿ëµÉ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ÇÏÁö¸¸ »ó½ÄÀûÀ¸·Î »ý°¢ÇØ º¼ ¶§ Å°¿öµå¸¦ ¿¹¾à¾î·Î ÀÎÁ¤ÇÏÁö ¾ÊÀ» °æ¿ì ÇÁ·Î±×·¡¹ÖÀÇ °¡µ¶¼ºÀ» ¶³¾î¶ß·Á »ó´çÈ÷ Àб⠳­ÇØÇÑ ÄÚµå ÇüÅ°¡ µÉ °ÍÀÌ´Ù. µû¶ó¼­ ¿äÁîÀ½ ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îµéÀº ÀÌ·¯ÇÑ Å°¿öµå¸¦ ¿¹¾à¾î·Î¼­ »ç¿ëÇϱ⠶§¹®¿¡ Á¤ÀÇ »ó ÀÌµé »çÀÌ¿¡´Â Â÷À̱â ÀÖ±ä Çϳª ¿À´Ã³¯ µÎ ¿ë¾î¸¦ °ÅÀÇ °°Àº Àǹ̷Π»ç¿ëÇÏ°í ÀÖ´Ù.

  Send to a colleague | Print this document