8051
AVR
EZLab
PIC
80C196KC
DSP
ARM
VHDL
MicroMouse
Robot Soccer
Battle Robot
Robot Contest
Humanoid
Embeded Linux
HW/SW Lecture
RTOS
 
 
 

VHDL(VHSIC Hardware Description Language)......

1) ¹è°æ                                              (ALTERA»ç¿ë¼³¸í¼­)   

VHDLÀº 80³â´ëÃÊ ¹Ì ±¹¹æ¼º(DoD; Department of Depense)ÀÇ ¿ä±¸¿¡ µû¶ó ¿¬±¸µÇ±â ½ÃÀÛÇÏ¿© 1987³â 12¿ù¿¡ IEEE 1076 Ç¥ÁؾÈÀ¸·Î ¹ßÇ¥µÇ¾î 1992³â¿¡ Ç¥ÁØÈ­ µÇ¾ú´Ù. ¹Ì ±¹¹æ¼º¿¡¼­ Çϵå¿þ¾î ±â¼ú ¾ð¾î¸¦ °³¹ßÇÏ°í Ç¥ÁØÈ­ ÇØ¾ß ÇÒ Çʿ伺À» ´À³¢±â ½ÃÀÛÇÑ °ÍÀº ¹«±â üÁ¦¿¡ ä¿ëµÇ´Â ÀüÀÚÀåºñÀÇ °³¼±°ú À¯Áöº¸¼ö Çϴµ¥ °úµµÇÑ °æºñÀÇ ÁöÃâÀÌ ¿ä±¸µÇ¾ú±â ¶§¹®ÀÌ´Ù. ÃֽŠ¹«±âüÁ¦ÀÇ °³¹ßÀº º¸Åë 2-30³âÀÌ ¼Ò¿äµÇ¸ç °³¹ßµµÁß ¹ßÀüµÈ ±â¼úÀ» ä¿ëÇϱâ À§Çؼ­´Â ±× ÀÌ»óÀÇ ½Ã°£ÀÌ °É¸®´Â °ÍÀÌ º¸ÅëÀ̾ú´Ù. °á°úÀûÀ¸·Î »õ±â¼úÀ» ä¿ëÇÏ°í À¯ÁöÇϴµ¥ µå´Â ºñ¿ëÀº óÀ½¿¡ ¿¹»óÇß´ø °Íº¸´Ù »ó»ó¿Ü·Î °úµµÇÑ°ÍÀÌ µÇ¾î ¹ö¸°´Ù. »õ±â¼úÀ» ºñ·Ï DoD¿¡¼­ ¼ÒÀ¯ ÇÏ´õ¶óµµ ±âÁ¸ÀÇ ¹«±âüÁ¦¿¡ Àû¿ëÇϱâ À§Çؼ­´Â ¸¹Àº ¾î·Á¿òÀ» °Ý°Ô µÇ´Â°ÍÀÌ »ç½ÇÀ̾ú´Ù. ¸¸ÀÏ DoD¿¡¼­ »õ·Ó°Ô °³¹ßµÈ ±â¼úÀ» ±âÁ¸ÀÇ ¹«±âü°è¿¡ µµÀÔÇϱâ·Î °áÁ¤ Çß´Ù¸é ¸î°¡Áö °í·ÁÇÒ »çÇ×ÀÌ ÇÊ¿äÇØ Áø´Ù. ±âÁ¸ÀÇ ¹«±â¿¡ »õ±â¼úÀÌ ÀÌ¿ëµÈ ºÎÇ°À» äÅÃÇÏ·Á¸é ¿ø·¡ÀÇ Àåºñ Á¦ÀÛÀÚ´Â »õºÎÇ°¿¡ ¸Âµµ·Ï °øÁ¤À» »õ·Î ±¸¼ºÇØ¾ß Çϸç, ±âÁ¸ ºÎÇ°ÀÇ ¼ö¸í ±â°£µ¿¾È ¿¹ºñ ºÎÇ°µéÀ» À¯ÁöÇϴµ¥ ÇÊ¿äÇÑ °æºñÀÇ ºÎ´ãÀ» ¾È°Ô µÈ´Ù. ÀÌ·¯ÇÑ ÀÌÁßÀÇ °æºñ ºÎ´ãÀº ºÎÇ°µé »çÀÌ¿¡ Çϵå¿þ¾îÀûÀΠǥÁØÀÌ ÀÌ·ç¾î Áö°í ÀÖÁö ¾Ê±â ¶§¹®¿¡ ¹ß»ýÇÏ´Â °ÍÀÌ´Ù. µû¶ó¼­ DoD´Â Çϵå¿þ¾îÀÇ ±â¼úÇϴµ¥ ÇÊ¿äÇÑ ¾ð¾î¸¦ Ç¥ÁØÈ­ ÇÔÀ¸·Î¼­ ¼­·Î´Ù¸¥ ÀüÀÚÀåÄ¡µéÀ» ¼­·Î °áÇÕÇϴµ¥ Ưº°ÇÑ Çؼ®¾øÀÌ ÀÌ·ç¾îÁöµµ·Ï ÇؾßÇÒ ÇÊ¿ä°¡ ÀÖ¾ú´ø °ÍÀÌ´Ù.

¿À´Ã³¯ DoD¿¡¼­ äÅÃÇÑ VHDLÀº ¸Å¿ì ¹ü¿ëÀûÀÎ Çü½ÄÀ» ÃëÇÏ°í Àִµ¥, Çϵå¿þ¾îÀÇ ±â¼ú¿¡ Ç¥ÁØÀ» µÎµµ·Ï ÇÔÀ¸·Î½á Ưº°ÇÑ ¼³°è Åø¿¡ ±¸¾Ö¹ÞÁö ¾ÊÀ¸¸ç ÃÖÁ¾ »óÇ°À» Á¦ÀÛÇϴµ¥ ƯÁ¤ Á¦ÀÛÀÚ¸¦ ¼±Á¤ÇؾßÇÏ´Â Á¦ÇÑÀÌ ÇÊ¿ä ¾øµµ·Ï ÇÑ °ÍÀÌ´Ù.

VHDLÀÇ Ç¥ÁØÈ­´Â DoDÀÇ °í¼Ó ÁýÀûȸ·Î(VHSIC; Very High Speed Integrated Circuit) ÇÁ·Î±×·¥ÀÇ »ê¹°ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥ ¼öÇàÀÚµéÀº »ó´çÈ÷ º¹ÀâÇÑ ÀüÀÚȸ·Î¿¡ ´ëÇؼ­µµ °íµµÀÇ Ãß»óÈ­¸¦ ÅëÇÏ¿© °³¹ßÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â »õ·Î¿î ±â¹ýÀÌ ÇÊ¿äÇß´ø °ÍÀÌ´Ù. ÀÌ·¯ÇÑ °íµµÀÇ Ãß»óÈ­ÀÇ Çʿ伺Àº ¿¹Àü¿¡ ÇϳªÀÇ Àüü ½Ã½ºÅÛÀ¸·Î ¿©°ÜÁö´ø °ÍÀÌ ¿À´Ã³¯¿¡´Â ´ÜÀÏÀÇ ÁýÀûȸ·Î ĨÁ¤µµ·Î °£ÁÖµÇ¾î ¹ö·È±â ¶§¹®ÀÌ´Ù. ¿À´Ã³¯ »õ·Î¿î ½Ã½ºÅÛÀÇ ¼³°è´Â °ú°ÅÀÇ ¼³°è±â¹ýÀ¸·Î ÀûÁ¤ÇÑ ±â°£³»¿¡ ¼öÇàÇÒ ¼ö ¾øÀ» Á¤µµ·Î ¸Å¿ì º¹ÀâÇÏ´Ù. ÀÌ¿Í °°ÀÌ ½Ã½ºÅÛÀÌ ¸Å¿ì º¹ÀâÇØÁöÀÚ VHDLÀÇ ´É·Â¿¡ ´ëÇÑ ¼³°èÀÚµé·ÎºÎÅÍÀÇ ¿ä±¸°¡ ÀÖ´Ù. ¸ÕÀú °³³äÀûÀÎ ½Ã¹Ä·¹ÀÌ¼Ç ´Ü°è¿¡¼­ºÎÅÍ ¼¼ºÎÀûÀΠŸÀ̹ÖÀûÀÎ ½Ã¹Ä·¹À̼ÇÀÌ ÀÌ·ç¾îÁú ¼ö ÀÖ´Â ¸Å¿ì À¶Å뼺ÀÖ´Â ¾ð¾î°¡ ÇÊ¿äÇÏ´Ù. ¶ÇÇÑ ÀÌ·¯ÇÑ ¾ð¾î´Â °íµµÀÇ Ãß»óÈ­ ·¹º§¿¡¼­ ±×º¸´Ù ³·Àº ¼³°è ·¹º§·ÎÀÇ ÀüȯÀÌ ÀÌ·ç¾îÁö¸ç ¾î¶°ÇÑ µðÀÚÀÎ ·¹º§¿¡¼­µµ ½Ã¹Ä·¹À̼ÇÀÌ ¼öÇàµÉ ¼ö ÀÖ¾î¾ß ÇÒ °ÍÀÌ´Ù. VHDLÀº ÀÌ·¯ÇÑ Å¾-´Ù¿î(Top-Down) ¹æ½ÄÀÇ ¼³°è¿¡ ¸Å¿ì ÀûÀýÇÑ ¾ð¾îÀÌ´Ù.

VHDLÀº ¸Å¿ì ³ÐÀº ¹üÀ§ÀÇ ¼³°è¼öÁØ(Design Level)À» Áö¿øÇÑ´Ù. ±× ¿¹·Î¼­ ´ÙÀ½°ú °°Àº ½Â°¡»ê±â(MAC; Multiply Accumulator)¾Ë°í¸®ÁòÀ» »ý°¢ÇØ º¸ÀÚ. MACÀº DSP ÇÁ·Î¼¼¼­¿¡ ³Î¸® ÀÌ¿ëµÇ´Â°ÍÀ¸·Î ¿µ»ó󸮸¦ ºñ·ÔÇÑ µðÁöÅ» ½Åȣ󸮿¡ Æø³Ð°Ô ÀÌ¿ëµÈ´Ù.

FOR i IN 1 TO 1024 LOOP

result := result + a(i)*b(i);

END LOOP

c <= result;

VHDLÀº À§¿Í °°ÀÌ +, -, *, /¿Í °°Àº ¼öÇÐ ¿¬»êÀÚ(mathmatical operator)¸¦ ÀÌ¿ëÇÑ ¸Å¿ì Ãß»óÈ­µÈ ¼öÁØ°ú ¹è¿­ ÇüÅÂÀÇ ±â¼ú(array of modeling)À» Áö¿øÇϹǷμ­ ¼³°èÀÚ·Î ÇÏ¿©±Ý º¹ÀâÇÑ µðÁöÅ» ȸ·Î¸¦ ±¸Ã¼ÀûÀ¸·Î ¼³°èÇϱâ Àü¿¡ »õ ¾ÆÀ̵ð¾î¸¦ ¸Å¿ì ½Å¼ÓÇÏ°Ô µðÁöÅРȸ·Î Ư¼º¿¡ µû¶ó ¸ðÀǽÇÇè(simulation)À» Çس¾ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.

ž-´Ù¿î ¼³°è (Top-Down Design)

ž-´Ù¿î ¼³°è¹æ½ÄÀº °íµµÀÇ Ãß»óÈ­µÈ ¼öÁØ¿¡¼­ ¼¼ºÎÀûÀÎ µðÁöÅ» ȸ·Î·Î ¼¼ºÐÇØ ³ª°¡´Â°ÍÀ» ¸»ÇÑ´Ù. ³ôÀº Ãß»óÈ­ ¼öÁØ(high level of abstraction)¿¡¼­ÀÇ ¸ðÀǽÇÇèÀº °³¹ß Ãʱâ´Ü°è¿¡¼­ ÀÌ·ç¾îÁú °ÍÀ̸ç, À̶§ ±â´ÉÀûÀÎ ¸é(function)¿¡¼­ °ËÁõÀÌ ÀÌ·ç¾î Áú °ÍÀÌ´Ù. VHDLÀÌ Áö¿øÇÏ´Â ³ÐÀº ¹üÀ§ÀÇ ¸ðµ¨¸µ ½ºÅ¸ÀÏÀº ¾î¶² ¾ÆÀ̵ð¾îÀÇ ±¸Çö °¡´É¼ºÀ» °ËÁõÇÏ´Â ´Ü°è¿¡¼­µµ ÀÌ¿ëµÉ ¼ö ÀÖÀ½À» º¸¿©ÁØ´Ù. À§¿¡¼­ ¿¹·Îµç ½Â°¡»ê±â¸¦ ¿¹·Î¼­ ž-´Ù¿î ¹æ½ÄÀÇ ¼³°è°úÁ¤¿¡ ´ëÇÏ¿© »ìÆì º¸±â·Î ÇÑ´Ù. ¸ÇóÀ½ ´Ü°è·Î ½Â°¡»ê±â¸¦ Ãß»óÀûÀ¸·Î ±â¼úÇÏ¿© ±× ±â´ÉÀÇ ÀûÇÕ¼ºÀ» ÆǺ°ÇØ º¸µµ·Ï ÇÑ´Ù. ¾Õ¼­ ÁöÀûÇßµíÀÌ ½Â°¡»ê±â(MAC; Multiply Accumulator)´Â Äܺ¼¹ö(convolver), Ç»¸®¾î º¯È¯(DFT), Çà·Ä °ö¼Àµî¿¡ ÀÌ¿ëµÇ´Â ¸Å¿ì ±âº»ÀûÀ̸鼭 ÀÀ¿ëºÐ¾ß°¡ ¸Å¿ì ³ÐÀº ±â´ÉÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ½Â°¡»ê±â´Â °¡Àå ³ôÀº ¼öÁØ¿¡¼­ ´ÙÀ½°ú °°ÀÌ ±â¼úµÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

c <= multiply_accum(a,b);

À̶§ ½Â°¡»ê±âÀÇ ±â´ÉÀÌ ÀÀ¿ëºÐ¾ß¿¡ ÀûÀýÇÏ´Ù°í ÆǴܵǸé, ´ÙÀ½ÀÇ ³·Àº ´Ü°è·Î ¼³°èÇØ ³»·Á°£´Ù. ÀÌ ´Ü°è¿¡¼­´Â ¾ÆÀ̵ð¾îÀÇ ´Ü°è¿¡¼­ ±¸ÇöÀÇ ´Ü°è·Î ÀüȯµÊÀ» ÀǹÌÇÑ´Ù. ½Â°¡»ê±â ±â´ÉÀÇ µ¥ÀÌŸ ÇÃ·Î¿ì ±â¼ú(dataflow description)Àº ±×¸² 1-2¿Í °°´Ù. µ¥ÀÌŸ È帧ÀÇ Çü½Ä(dataflow format)ÀÌ °áÁ¤µÇ¸é ´ÙÀ½ ´Ü°è·Î °ÔÀÌÆ® ¼öÁØÀÇ ¼³°è°¡ À̾îÁú °ÍÀÌ´Ù. °ÔÀÌÆ® ¼öÁØÀ¸·ÎÀÇ Àüȯ ´Ü°è¿¡¼­´Â ÀÚµ¿ ȤÀº ¼öµ¿ÀÇ ½Åµð½Ã½º(synthesis)°¡ ÀÌ·ç¾îÁö¸ç ±× °á°ú·Î ¾ò¾îÁö´Â °ÔÀÌÆ® ¼öÁØÀÇ È¸·Î´Â ½ÇÁ¦ Á¦ÀÛÀ» À§ÇÑ °ÍÀ¸·Î ¶§¶§·Î Á¦ÀÛ±â¼ú ÁöÇâÀûÀÎ(Technology specific) °ÍÀÌ µÉ¼öµµ ÀÖ´Ù. °ÔÀÌÆ® ¼öÁØÀÇ È¸·Î´Â ±×¸² 1-3°ú °°´Ù.

2) VHDLÀÇ ÀåÁ¡

VHDLÀÇ °¡Àå Å« ÀåÁ¡Àº À§¿¡¼­¿Í °°Àº ¸ðµç ¼öÁØ¿¡¼­ÀÇ ±â¼úÀÌ °¡´ÉÇÏ´Ù´Â Á¡ÀÏ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀåÁ¡Àº °ð ´ÜÀÏ ¾ð¾î¸¦ »ç¿ëÇÑ´Ù´Â °Í »Ó¸¸ ¾Æ´Ï¶ó ¾î¶°ÇÑ ¼³°è´Ü°è¿¡¼­µµ ´ÜÀÏÀÇ ¸ðÀǽÇÇè±â(simulator)¸¦ »ç¿ëÇϹǷμ­ ¼³°è¿À·ù°ËÁõÀº ¹°·Ð ¼öÁ¤µî °ü¸®ÀûÀÎ Ãø¸é¿¡¼­ ¸Å¿ì È¿À²ÀûÀÌ µÉ °ÍÀÌ´Ù. ±âÁ¸ÀÇ µðÁöÅ» ȸ·Î ¼³°è°úÁ¤À» º¸¸é, C ¾ð¾î¿Í °°Àº °í±Þ ¾ð¾î·Î ¾Ë°í¸®ÁòÀÇ °ËÁõ°ú ±â´É ¼öÁØ¿¡¼­ÀÇ ¸ðÀÇ ½ÇÇèÀ» ÇÒ ¼ö ÀÖ¾ú´Ù. ±×¸®°í °íµµ·Î ¼÷·ÃµÈ ¼³°èÀÚÀÏ °æ¿ì¿¡ °ÔÀÌÆ® ¼öÁØÀ¸·ÎÀÇ ¼³°è´Ü°è ÀüȯÀÌ °¡´ÉÇÒ °ÍÀ̸ç ÀÌ¹Ì À̶§ºÎÅÍ Çϵå¿þ¾îÀÇ ±â¼ú¹× Ç¥Çö¹æ¹ýÀº ¹°·Ð ¸ðÀǽÇÇèÀÌ ´Þ¶óÁö°Ô µÇ¸ç ¶§¶§·Î ƯÁ¤ ±â¼ú¿¡ ÀÇÁ¸ÇÏ´Â ¼³°è ¹æ½ÄÀÌ µÇ¾î ¹ö¸°´Ù. ³·Àº ¼öÁØ¿¡¼­ ¹ß°ßµÇ´Â ±â´ÉÀûÀÎ ¿À·ùÀÇ ¼öÁ¤Àº ±×º¸´Ù »óÀ§ ¼öÁØ¿¡¼­ °ü¸®Çϱâ´Â ¸Å¿ì ¾î·Æ°Ô µÇ¸ç, ¶§¶§·Î Á¦ÀÛ±â¼úÀÇ ÀüȯÀº ºÒ°¡´É Çϰųª ¸¹Àº Àη°ú ½Ã°£ÀÌ ¼Ò¿äµÇ´Â ÀÛ¾÷ÀÌ µÇ¾î ¹ö¸°´Ù.

3) ¿ë¾îÀÇ Á¤ÀÇ¿Í Ç¥Çö

È¥¶õÀ» ÇÇÇÏ°í ´É·üÀûÀÎ ³»¿ëÀÇ Àü°³¸¦ À§ÇÏ¿© Àü¹ÝÀûÀ¸·Î »ç¿ëµÇ´Â ¿ë¾îµé°ú Ç¥Çö ¹æ¹ý¿¡ ´ëÇÏ¿© Áý°í ³Ñ¾î °¡±â·Î ÇÑ´Ù.

¤ý±â´ÉÀû ¸ðµ¨(Behavioral Model) - °íµµ·Î Ãß»óÀûÀ¸·Î ±â¼úÇÑ ½Ã¹Ä·¹ÀÌ¼Ç¿ë ¸ðµ¨ÀÌ´Ù. ÀÌ·¯ÇÑ ¸ðµ¨ÀÇ °æ¿ì µðÁöÅ» ȸ·ÎÀÇ ±¸Çö¿¡ ´ëÇÑ ¼¼ºÎÀû ³»¿ëÀº ¾ø´Ù. º¸Åë ¼öÇÐÀûÀÎ ¿¬»êÀÚµéÀÌ ±×´ë·Î »ç¿ëµÈ´Ù.

¤ýµ¥ÀÌŸ ÇÃ·Î¿ì ¸ðµ¨(Dataflow Model) - µðÁöÅ» ȸ·ÎÀÇ ÀÚµ¿ ½Åµð½Ã½º(automatic synthesis) ÅøÀ» °Ü³ÉÇÑ ½Ã¹Ä·¹ÀÌ¼Ç¿ë ¸ðµ¨ÀÌ´Ù. º¸Åë ±âº»ÀûÀÎ ÇÁ·Î½ÃÁ® ±¸Á¶(procedure constructs)³ª, ÇÔ¼öÀûÀÎ ¿¬»êÀÚ(functional operator)µé·Î ±â¼úµÈ´Ù.

¤ý±¸Á¶Àû ¸ðµ¨(Structural Model) - ±¸¼º ÀåÄ¡µé »çÀÌÀÇ ³×Æ® ¸®½ºÆ®(netlist)ÀûÀΠǥÇöÀÌ´Ù.

¤ýÈ¥ÇÕ ¼öÁØ ¸ðµ¨(Mixed-Level Model) - À§¿¡¼­ ¿­°ÅÇÑ ¼¼°¡Áö ¸ðµ¨À» È¥¿ëÇÏ¿© ±â¼úÇÑ °æ¿ìÀÌ´Ù.

¤ýº´Çà ó¸®(Cuncurrent) - ±â¼úµÈ ±¸¹®µéÀÌ ¼­·Î º´Çàó¸®(operate in parallel) µÇ°Å³ª °ü°è ½ÅÈ£ÀÇ º¯È­¿¡ ¹ÝÀÀ(initiate by the signal value changes)ÇÏ¿© 󸮵Ǵ °ÍÀ» ¸»ÇÑ´Ù.

¤ý¼øÂ÷ ó¸®(Sequential) - ±¸¹®µéÀÌ ¼­¼úµÈ ¼ø¼­¿¡ µû¶ó 󸮵Ǵ °ÍÀ» ¸»ÇÑ´Ù. ÀÌ °æ¿ì ´ëºÎºÐÀÇ ÇÁ·Î±×·¥¹Ö ¾ð¾îµé°ú °°Àº ÀÌÄ¡À̳ª ƯÈ÷ VHDL°ú °°Àº Çϵå¿þ¾îÀÇ ±â¼ú¿¡¼­´Â ¼øÂ÷ó¸®ÀÇ ½ÇÇà¼ø¼­´Â ¸Å¿ì Áß¿äÇÏ´Ù.

¤ý±¸µ¿±â(Drivers) - VHDLÀÇ ½ÅÈ£µéÀº ±¸µ¿±â¿¡ °áÇյǾî ÀÖÀ¸¸ç ÀÌ¿¡ ÀÇÇÏ¿© Á¦¾îµÈ´Ù. »õ·Î¿î ½ÅÈ£µéÀº ¸ðµÎ ±¸µ¿±â¸¦ ÅëÇÏ¿© ÀüÆĵȴÙ.

¤ý»ç°Ç(Events) - »ç°ÇÀº ¿¬°áµÈ ½ÅÈ£¼±ÀÇ °ªÀÇ º¯È­À϶§ ¹ß»ýÇÑ´Ù.

¤ýó¸®(Transaction) - ½ÅÈ£¼±¿¡ °ªÀÌ ÁÖ¾îÁú¶§¸¶´Ù 󸮰¡ ÀÌ·ç¾îÁø´Ù°í ÇÑ´Ù. À̶§ °ªÀº º¯È­µÇ¾ú°Å³ª ¶Ç´Â °°Àº °ªÀÏ ¼ö ÀÖ´Ù. Áï, »ç°ÇÀÌ µÉ ¼ö Àְųª ¾Æ´Ò ¼öµµ ÀÖ´Ù.

¤ý°¨ÀÀ ¸®½ºÆ®(Sensitivity List) - »ç°Ç¿¡ µû¶ó ¹ÝÀÀÇÏ°ÔµÉ ½ÅÈ£¼±µéÀÇ ¹­À½ÀÌ´Ù.

 

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°¡ ¾Æ´Ï¶õ °ÍÀ» À¯ÀÇÇÏ ÀÚ. ÆÄÀÏÇüÀº ¿¬°áÇü°ú °°ÀÌ Ãʺ¸ÀÚ¿¡°Ô´Â ¾î·Á¿î Á¡ÀÌ ÀÖÀ¸´Ï À¯ÀÇÇϱ⠹ٶõ´Ù.

ÆÄÀÏÇü (File Type)

FILE

¨è ¼±¾ð ¹æ¹ý

ÀÚ·áÇüÀ» ¼±¾ðÇÒ ¶§´Â 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;

 



  • Address :150-094, 4 floors 8-1,Mullae 4 Dong, YongdungpoGu, Seoul, South Korea / Phone : +82-2-597-8224, Fax : +82-2-2679-8557
    Copyright(C) 2000, Roboblock System Co., Ltd, All Rights Reserved / E-Mail : WebMaster