VHDLÀÇ ÀÚ·áÇü(data types)
VHDLÀÇ ÀÚ·áÇüÀº ½ºÄ®¶ó Çü (scalar type)°ú º¹ÇÕ Çü(composite type)À¸·Î ³ª´µ¾î Áø´Ù. VHDL¿¡¼ »ç¿ëÇÏ´Â ÀÚ·áÇüÀº ±×¸² 1¿¡¼ ³ªÅ¸³»¾ú´Ù.
VHDL¿¡¼ ÀÚ·áÇü °Ë»ç´Â ¸Å¿ì ¾ö°ÝÇϸç Á¤ÀÇµÈ ÀÚ·áÇü¿¡ µû¶ó »ç¿ëÇÒ ¼ö ÀÖ´Â ¿¬»êÀÚ ¶ÇÇÑ °¢°¢ Á¤ÀÇ µÇ¾î¾ß ÇÑ´Ù. ÇÕ¼º±â(synthesizer)¿¡ µû¶ó ¼·Î Áö¿øÇÏ´Â µ¥ÀÌÅÍÇüÀÌ ´Ù¸¦ °æ¿ì VHDL ¼Ò½º »çÀÌÀÇ È£È¯¼º¿¡ ½É°¢ÇÑ ¹®Á¦¸¦ ÀÏÀ¸Å°¸ç ¸¹Àº ÀÚ·áÇü º¯È¯ ÇÔ¼ö¿Í ŸÀÔ Ä³½ºÆà ¹æ¹ýÀÌ Á¸ÀçÇÏ°Ô µÈ´Ù. ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÏ¿© 87³â IEEE 1076 VHDLÀÇ Ç¥ÁØ¿¡ À̾î 1991³â¿¡ IEEE 1164·Î¼ µðÁöÅРȸ·ÎÀÇ ÇÕ¼º °¡´ÉÇÑ ÀÚ·áÇü¿¡ ´ëÇÑ Ç¥ÁØÀÌ Á¦Á¤µÇ±â¿¡ À̸£·¶´Ù. IEEE 1164´Â µðÁöÅРȸ·Î¿¡ ´ëÇÏ¿© 9 °¡Áö °ª(standard 9-valued logic)À» °®´Â µ¥ÀÌÅÍ Çü ¡°std_logic¡±À» Á¤ÀÇÇÏ¿´°í ÀÌ´Â IEEE 1076 ÀÇ ¡°bit¡± ÇüÀ» È®ÀåÇÑ °ÍÀÌ´Ù. IEEE 1076¿¡´Â VHDLÀÇ ¾ð¾î¿¡ ´ëÇÑ Ç¥ÁØ°ú ¾Æ¿ï·¯ µ¥ÀÌÅÍ Å¸ÀÔ ¹× °¢Á¾ ¿¬»ê¿¡ ´ëÇÑ Ç¥ÁØÀÌ Á¤ÇØÁ® ÀÖ´Ù. IEEE 1076¿¡´Â µðÁöÅРȸ·ÎÀÇ ºñÆ®(bit) Çü°ú Á¤¼ö ¹× ½Ç¼öÇü ¹®ÀÚÇü µîÀÌ ÀÖÀ¸¸ç ÀÌÁß bit¿Í Á¤¼öÇüÀÌ ÇÕ¼º °¡´ÉÇÏ´Ù. IEEE 1164ÀÇ ¡°std_logic¡±Àº bitÀÇ ¡®1¡¯°ú ¡®0¡¯ÀÌ¿Ü¿¡ Pull-up, Pull-down¿¡ ÇØ´çÇÏ´Â ¡®H¡¯ (Weak-High), ¡®L¡¯ (Weak-Low)¿Í ¡®Z¡¯(high-impedance), ¡®U¡¯(uninitialize), ¡®X¡¯ (unknown), ¡®-¡®(Don¡¯t care)µîÀ» Á¤ÀÇÇØ ³õÀ½À¸·Î½á µðÁöÅРȸ·ÎÀÇ ÇÕ¼º»Ó¸¸ ¾Æ´Ï¶ó ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ¹è·Á¸¦ Çصξú´Ù.
1-1. ¿°ÅÇü (Enumeration type )
¡¡
±âº»ÀûÀ¸·Î VHDL¿¡¼ »ç¿ëÇÏ´Â ´ëºÎºÐÀÇ ÀÚ·áÇüÀº ´ëºÎºÐ ¿°ÅÇü (enumeration type) ÀÌ´Ù. IEEE 1076ÀÇ stanandard package¿¡ Á¤ÀǵǾî ÀÖ´Â ¿°ÅÇüÀÇ ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù.
type boolean is (false,true);
type bit is ('0', '1');
IEEE 1164¿¡ std_ulogicÀº ´ÙÀ½°ú °°ÀÌ ¿°ÅÇüÀ¸·Î Á¤ÀÇ µÇ¾î ÀÖ´Ù.
TYPE std_ulogic IS ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-' );
'U'´Â ÃʱâÈ µÇÁö ¾ÊÀº »óÅÂ(Uninitialized)¸¦ ÀǹÌÇϸç 'X'´Â UnknownÀ¸·Î¼ µðÁöÅÐ °ªÀÇ Ãæµ¹µî°ú °°Àº ¿¡·¯»óŸ¦ ³ªÅ¸³½´Ù. '0' °ú '1'Àº µðÁöÅÐ °ª¿¡ ÇØ´çÇϸç 'Z'Àº High Impedance, 'W', ¡®L¡¯, ¡®H¡¯´Â °¢°¢ Weak Unknown, Weak 0, Weak 1·Î¼ Pull-upȤÀº Pull-downµÈ µðÁöÅÐ °ªÀ» ³ªÅ¸³½´Ù. ³¡À¸·Î ¡®-¡®Àº ÇÕ¼º ½Ã ³í¸® ÃÖÀûÈ¿¡ Don't care·Î¼ ÀÌ¿ëµÈ´Ù.
¿°ÅÇüÀ» ÀÌ¿ëÇÏ¸é »ç¿ëÀÚ´Â ¾ðÀçµçÁö ÀÚ·áÇüÀÇ Á¤ÀÇ°¡ °¡´ÉÇÏ´Ù. ¶ÇÇÑ ¿°ÅÇüÀ¸·Î Á¤ÀÇµÈ °æ¿ì ÀÎ ÄÚµù(encoding) ¹æ¹ýÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÎ ÄÚµù ¹æ¹ýÀ¸·Î´Â 2Áø Äڵ忡 ÀÇÇÑ ¹æ¹ý(binary)°ú One-Hot EncodingÀÌ ÀÖ´Ù. One-Hot encoding ¹æ¹ýÀº À¯ÇÑ»óÅ ¸Ó½Å(FSM : Finite State Machine)¿¡¼ »óŸ¦ ³ªÅ¸³»´Â °æ¿ì¿¡ ¸¹ÀÌ ÀÌ¿ëµÇ´Â ¹æ¹ýÀÌ´Ù. ´ÙÀ½°ú °°Àº ¿¹¸¦ »ìÆ캸ÀÚ.
type state is (IDLC, RECEIVE, SEND);
¿Í °°ÀÌ Á¤ÀÇµÈ ÀÚ·áÇü ¡°state¡±ÀÇ °æ¿ì binary¿Í One-Hot encoding µÇ¾úÀ» ¶§ Â÷ÀÌ´Â ±×¸² 2¿Í °°´Ù.
¿¹Á¦¿¡¼¿Í °°ÀÌ ¿°ÅÇü ¡°state¡±´Â 3°³ÀÇ ¿ä¼Ò¸¦ °¡Áö¹Ç·Î Binary encodingÇϸé 2ºñÆ®°¡ ÇÊ¿äÇÑ ¹Ý¸é On-Hot encodingÇÏ´Â °æ¿ì °¢ ¿ä¼Ò¸¶´Ù 1°³ÀÇ ºñÆ®¸¦ ÇÒ´çÇÏ¿© 3ºñÆ®·Î Ç¥ÇöµÈ´Ù.
VHDL¿¡¼ Çü °Ë»ç(type checking)°¡ Ä¡¹ÐÇÑ ÀÌÀ¯ Áß Çϳª°¡ À§¿Í °°Àº ¿°ÅÇüÀ» ÁÖ·Î ´Ù·ç±â ¶§¹®À̶ó°í ÇÒ ¼ö ÀÖ´Ù. °¢Á¾ ¿¬»êÀÚ È¤Àº ÇÒ´ç(assignment)ÀÇ °æ¿ì ±âº»ÀûÀ¸·Î ¿°ÅÇüÀ¸·Î ÀÌ·ç¾îÁø ¼·Î ´Ù¸¥ µÎ ŸÀÔÀº ºñÆ® Æø¿¡¼ºÎÅÍ ´Ù¸£±â ¶§¹®ÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ bit Çü°ú std_logicÇüÀÇ ÇÒ´ç¹®ÀÇ °æ¿ì ¿¹¸¦ »ìÆ캸ÀÚ.
Type bit is (¡®0¡¯, ¡®1¡¯);
Type std_logic is ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-' );
¿Í °°ÀÌ Á¤ÀÇµÈ µÎ°³ÀÇ ½Ã±×³Î,
Signal A : bit;
Signal B : std_logic;
À» »ç¿ëÇÑ ÇÒ´ç¹®,
A <= B;
Àº Çϵå¿þ¾îÀûÀÎ ¿¬°áÀÇ Àǹ̸¦ °í·ÁÇØ º¼ ¶§ ÇÒ´ç¹®Àº ¼º¸³ÇÒ ¼ö ¾ø´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù.
1-2 Á¤¼öÇü (Integer Type)
IEEE 1076¿¡ Á¤ÀÇµÈ Á¤¼öÇüÀÇ ±âº»ÀûÀÎ ºñÆ® Æø(bit-width)Àº 32ºñÆ®·Î µÇ¾î ÀÖ´Ù.
type integer is range -2147483648 to 2147483647;
Á¤¼öÇüÀº »ê¼ú¿¬»êÀÌ °¡´ÉÇϸç 2ÀÇ º¸¼öÇüÅ·ΠÀÌ·ç¾îÁø´Ù. ¶ÇÇÑ Á¤¼öÇüÀº ÇÕ¼ºÀÌ °¡´ÉÇÏ¸ç ¹üÀ§¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ» °æ¿ì 32ºñÆ®°¡ µÈ´Ù. µû¶ó¼ °úµµÇÑ ºñÆ® ÆøÀ» °®´Â ¿¬»ê±âÀÇ ÇÕ¼ºÀ» ÇÇÇÏ·Á¸é Á¤¼öÀÇ ¹üÀ§¸¦ ÁöÁ¤Çؼ »ç¿ëÇϵµ·Ï ÇÑ´Ù. ´ÙÀ½ÀÇ ¿¹´Â 4ºñÆ® ½Ã±×³ÎÀ» ¼±¾ðÇÑ ¿¹ÀÌ´Ù.
Signal count : integer range 0 to 15;
µðÁöÅРȸ·Î·Î ÇÕ¼º µÇ¾úÀ» ¶§ Á¤¼öÇüÀÇ ºñÆ®¸Ê ÇüÅ´ ±×¸² 3°ú °°´Ù.
1-3 ½Ç¼öÇü (Real, Floating-Point Type)
½Ç¼öÇü(real type)Àº ÇÕ¼º°¡´ÉÇÏÁö ¾Ê´Ù. ½Ã½ºÅÛ ¸ðµ¨¸µ À̳ª ¾Æ³¯·Î±× ȸ·ÎÀÇ ¸ðµ¨¸µ µî¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. IEEE 1076ÀÇ ½Ç¼öÇüÀÇ Á¤ÀÇ´Â ´ÙÀ½°ú °°´Ù.
type real is range -1.0E308 to 1.0E308;
´ÙÀ½Àº ½Ç¼öÇüÀ¸·Î ¾Æ³¯·Î±× ȸ·ÎÀÇ ÇÑ¿¹·Î¼ A/D º¯È¯±â¸¦ ±â¼úÇÑ ¿¹ÀÌ´Ù.
function ADC_8b_10v_bipolar ( analog_in : in real ) return byte is if (analog_in < 0.0) then digitized_signal := 0; else digitized_signal := integer(analog_in * ( real(max_digital_value) / max_analog_value) ); if (digitized_signal > (max_digital_value - 1)) then digitized_signal := max_digital_value - 1; end if; end if; digital_out := byte(to_std_logic_vector(digitized_signal,8)); return digital_out; end |
¾Æ³¯·Î±× ÀÔ·Â °ªÀ» ½Ç¼öÇüÀ¸·Î ÀÔ·Â ¹ÞÀºÈÄ µðÁöÅÐ º¯È¯À» ¼öÇàÇÑ´Ù.
digitized_signal := integer(analog_in * ( real(max_digital_value) / max_analog_value) );
À̶§ °è»êµÈ °ªÀº Á¤¼öÇü µ¥ÀÌÅÍÀ̸ç À̸¦ µðÁöÅÐ ½Ã½ºÅÛÀ¸·Î ÀÎÅÍÆäÀ̽º Çϱâ À§ÇÏ¿© Á¤¼öÇüÀ» ¡°std_logic¡±ÇüÀ¸·Î º¯È¯ÇϱâÀ§ÇÑ ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. Á¤¼ö·ÎºÎÅÍ ¡°std_logic_vector¡±·Î Çü º¯È¯ (type conversion)À» ¼öÇàÇϱâ À§ÇÑ ÇÔ¼ö ¡°to_std_logic_vector¡±´Â ´ÙÀ½°ú °°´Ù.
function to_std_logic_vector ( a : integer; width : integer ) return std_logic_vector is y := a; if (a >= 0) then y_ref := a_threshold; for i in y_length-1 downto 0 loop if (y < y_ref) then y_std_logic_vector(i) := '0'; else y := y - y_ref; y_std_logic_vector(i) := '1'; end if; y_ref := y_ref / 2; end loop; else for i in y_length-1 downto 0 loop y_std_logic_vector(i) := '0'; end loop; end if; return y_std_logic_vector; end to_std_logic_vector; |
A/Dº¯È¯ °ªÀ» ¹ÝȯÇϱâ À§ÇÏ¿© ¡°byte¡± ÇüÀ» std_logic ÇüÀ¸·ÎºÎÅÍ Á¤ÀÇÇÏ¿© »ç¿ëÇÏ¿´´Ù.
type byte is array (7 downto 0) of std_logic;
1-4. Physical Type
¹°¸®·®ÀÇ ´ÜÀ§(unit)¿Í ¹è¼ö °ü°è¸¦ Á¤ÀÇÇÑ °ÍÀ̸ç ÇÕ¼º °¡´ÉÇÏÁö ¾Ê´Ù. IEEE 1076¿¡´Â ½Ã°£¿¡ ´ëÇÑ Á¤ÀÇ°¡ Àִµ¥ ´ÙÀ½°ú °°´Ù.
type time is range -2147483647 to 2147483647 fs; end units; |
¡¡
À§¿¡¼ º¼ ¼ö ÀÖµíÀÌ VHDLÀÇ Ãּҽ𣠴ÜÀ§´Â fs (femto second, 10E-15) ÀÌ´Ù.
1-5 ¹è¿Çü (Array Type)
VHDL¿¡¼ ¹è¿ÇüÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÏ Â÷¿ø ¹è¿ÇüÀÇ °æ¿ì ´ëºÎºÐ ÇÕ¼º±â¿¡¼ Áö¿ø ÇÏÁö¸¸ 2Â÷¿ø ¹è¿À» Áö¿øÇÏÁö ¾Ê´Â ÇÕ¼º±âµµ ¸¹´Ù. µðÁöÅРȸ·ÎÀÇ ±âº» µ¥ÀÌÅÍ ´ÜÀ§´Â ¡°bit¡± ÀÌ´Ù. À̸¦ ¹ö½ºÇüÅ·ΠÁ¤ÀÇÇϱâ À§Çؼ ¡°bit_vector¡±ÇüÀ» »ç¿ëÇÑ´Ù. Áï ¹ö½º¸¦ Á¤ÀÇÇÏ´Â °ÍÀº ¡°bit¡±ÀÇ ÀÏ Â÷¿ø ¹è¿ÀÌ´Ù. ¹è¿ÇüÀ» Á¤ÀÇ ÇÒ ¶§ ±× Å©±â¸¦ ÁöÁ¤ÇÏ´Â °æ¿ì°¡ ÀÖ°í ÀÓÀÇÀÇ ¹è¿ Å©±â¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.
type byte is array ( 7 downto 0) of bit;
ÀÏ Â÷¿ø ¹è¿·Î 8-ºñÆ® Å©±âÀÇ µ¥ÀÌÅÍ Å¸ÀÔ ¡°byte¡± À» Á¤ÀÇÇÑ °ÍÀÌ´Ù.
TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <> ) OF std_logic;
"std_logic" ÇüÀ¸·Î ÀÏ Â÷¿ø ¹è¿Çü ¡°std_logic_vector¡±¸¦ ¼±¾ðÇÑ °ÍÀÌ´Ù. À̶§ ¹è¿ÀÇ Å©±â¸¦ Á¦ÇÑ ½ÃÅ°Áö ¾ÊÀº °ÍÀ¸·Î¼ ½Ã±×³ÎÀ» ¼±¾ðÇÒ ¶§ ±× Å©±â¸¦ Á¤ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹è¿ÇüÀÇ ¼±¾ðÇÑ ¿¹´Â ´ÙÀ½°ú °°´Ù.
Signal byte_a : byte;
Signal count : std_logic_vector( 7 downto 0);
1-6 ·¹ÄÚµå Çü(Record Type)
VHDL¿¡¼´Â ·¹ÄÚµåÇüÀ» Áö¿øÇÑ´Ù. µðÁöÅРȸ·Î¿¡¼ÀÇ ·¹ÄÚµåÇü »ç¿ë ¿¹´Â ±â°è¾î ¸í·ÉÀÇ ºñÆ®¸Ê Ç¥Çö µî¿¡ ÀÌ¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ·¹ÄÚµå ÇüÀÇ »ç¿ë ¿¹ÀÌ´Ù.
type month_name is (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dev); type date is day : integer range 1 to 31; end record; constant my_birthday : date := (21, nov, 1963); SIGNAL my_birthday : date;
my_birthday.year <= 1963; |
¡¡
VHDL¿¡¼ÀÇ ÆÄ»ýÇü(subtype)À» Á¤ÀÇÇÒ ¼ö ÀÖÀ¸¸ç ´ÙÀ½ÀÇ ¿¹´Â Á¤¼ö·ÎºÎÅÍ ÀÏÁ¤ÇÑ Å©±â¸¦ °®´Â ÆÄ»ý Á¤¼öÇüÀ» Á¤ÀÇÇÑ ¿¹ÀÌ´Ù.
type big_integer is range 0 to 1023;
subtype small_integer is big_integer range 0 to 7;
¡¡
¡°small_integer¡±´Â ¡°big_integer¡±ÀÇ ÆÄ»ýÇüÀ¸·Î Á¤ÀǵǾú´Ù. ÀÌ °æ¿ì ÆÄ»ýÇü ¡°small_integer¡±ÀÇ Àǹ̴ 10-ºñÆ® Å©±âÀÇ ¡°big_integer¡±ÀÇ ÇÏÀ§ 4-ºñÆ®¸¦ Â÷ÁöÇϵµ·Ï Á¤·ÄµÈ´Ù´Â Àǹ̷μ µÎ µ¥ÀÌÅÍ ÇüÀÇ È£È¯µÊÀ» ³ªÅ¸³½´Ù. ´ÙÀ½ÀÇ ¿¹´Â VHDL¿¡¼ ÀÚ·áÇü °Ë»ç(type checking)ÀÇ ¾ö°ÝÇÔÀ» º¸¿©ÁØ´Ù.
type big_integer is range 0 to 1000;
type small_integer is range 0 to 7;
signal intermediate : small_integer;
signal final : big_integer;
final <= intermediate * 5; -- type mismatch error
À§ÀÇ ¿¹¿¡¼ ¡°big_integer¡±¿Í ¡°small_integer¡± ÇüÀº ºñ·Ï ¼·Î Á¤¼öÇü À̱ä ÇÏÁö¸¸ ¼·Î ȣȯ µÅÁö ¾Ê´Â´Ù. ÀÌ·¯ÇÑ °æ¿ì ¡°small_integer¡±¸¦ ÆÄ»ýÇüÀ¸·Î Á¤ÀÇ ÇÔÀ¸·Î¼ Çü ºÒÀÏÄ¡(type mismatch) ¿¡·¯¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
type big_integer is range 0 to 1000;
subtype small_integer is big_integer range 0 to 7;
signal intermediate : small_integer;
signal final : big_integer;
final <= intermediate * 5;
¶Ç ´Ù¸¥ ¹æ¹ýÀ¸·Î type castingÀ» ÀÌ¿ëÇÒ ¼ö Àִµ¥ ÀÌ °æ¿ì´Â ±âº»ÀûÀ¸·Î µÎ ÇüÀÇ ±âº»ÇüÀÌ °°¾Æ¾ß ÇÑ´Ù.
type big_integer is range 0 to 1000;
type small_integer is big_integer range 0 to 7;
signal intermediate : small_integer;
signal final : big_integer;
final <= big_integer(intermediate * 5);
¸¸ÀÏ Á¤¼öÇü°ú ¡°std_logic_vector¡±ÇüÀ¸·Î º¯È¯Çϱâ À§Çؼ´Â µÎ µ¥ÀÌÅÍ Å¸ÀÌÀÇ ±âº»ÇüÀÌ ÀüÇô ´Ù¸£¹Ç·Î Çü º¯È¯ ÇÔ¼ö(type conversion function)¸¦ »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. Çü º¯È¯ ÇÔ¼ö´Â »ç¿ëÀÚ°¡ ÀÓÀÇ·Î ¸¸µé¾î ¾µ ¼ö ÀÖÀ¸³ª IEEE 1164ÀÇ »ê¼ú ÆÐÅ°Áö(numeric_std, numeric_bit)¿¡´Â Á¤¼ö¿Í ¡°std_logic_vector¡±, ¡°bit¡± »çÀÌÀÇ Çü º¯È¯À» À§ÇÑ ÇÔ¼ö¸¦ ´Ù¼ö °¡Áö°í ÀÖÀ¸¹Ç·Î °¡±ÞÀû À̸¦ ÀÌ¿ëÇϵµ·Ï ±ÇÀåÇÑ´Ù. IEEE 1164 ¶óÀ̺귯¸®ÀÇ »ê¼ú¿¬»ê°ú Çü º¯È¯ ÇÔ¼ö´Â ÇÕ¼º °¡´ÉÇÑ »ê¼ú ¿¬»êÀ» ´Ù·ç¸é¼ ÀÚ¼¼È÷ »ìÆì º¸±â·Î ÇÑ´Ù. ´ÙÀ½ÀÇ ¿¹´Â »ê¼ú¿¬»ê°ú Çü º¯È¯ ÇÔ¼öÀÇ ÀÌ¿ë¿¡ ´ëÇÑ °ÍÀÌ´Ù.
package my_type is type big_integer is range 0 to 1023; end package; library ieee; entity subtype_test is port ( a : in small_integer; end subtype_test; architecture behave of subtype_test is t_int <= a + b; end; |
¡¡
À§ÀÇ ¿¹´Â Á¤¼ö ÀÔ·ÂÀ» ¹Þ¾Æ¼ ¿¬»êÀ» ¼öÇàÇÑ ÈÄ À̸¦ 10 ºñÆ® Å©±âÀÇ ¡°std_logic_vector¡± ·Î Ãâ·ÂÇÏ´Â °æ¿ìÀÌ´Ù. ÀÔ·ÂµÈ 2°³ÀÇ Á¤¼öÇü(¡°small_integer¡±) a,b¸¦ °è»êÇÏ¿© ¡°big_integer¡±·Î ÇÒ´çÇÑ´Ù.
t_int <= a + b;
»ç¿ëÀÚ Á¤ÀÇÇü ¡°big_integer¡±ÀÎ ¡°t_int¡±·Î ºÎÅÍ std_logic_vector¡±·Î º¯È¯ÇÏ´Â °úÁ¤Àº ¾à°£ º¹ÀâÇÏ°Ô º¸ÀÌÁö¸¸ ÀÌ·¯ÇÑ º¯È¯°úÁ¤ÀÌ ½Ã½ºÅÛ ¼³°è¿Í ¼·Î ´Ù¸¥ ¸ðµâ»çÀÌÀÇ ÀÎÅÍÆäÀ̽º ÇÒ ¶§ ÀÚÁÖ Á÷¸éÇÏ°Ô µÇ´Â ¹®Á¦À̹ǷΠÀß ÀÌÇØÇØµÑ ÇÊ¿ä°¡ ÀÖ´Ù.
c <= std_logic_vector(to_unsigned(natural(t_int), 10));
Numeric_std package¿¡ Á¤¼ö-unsigned º¯È¯ ÇÔ¼ö°¡ to_unsigned()·Î Á¦°øµÇ°í ÀÖ´Ù. ÀÌ ÇÔ¼öÀÇ argument°¡ naturalÀ̹ǷΠ»ç¿ëÀÚ Á¤ÀÇÇüÀ¸·ÎºÎÅÍ Á¤¼öÇü(natural)À¸·Î type-casting ÇÑ´Ù. Unsigned ÇüÀ¸·Î º¯È¯ÇÒ °ÍÀ̹ǷΠinteger°¡ ¾Æ´Ñ natural·Î type-casting ÇÑ °ÍÀÌ´Ù. Á¤¼öÇüÀ» std_logic_vector·Î Á÷Á¢ º¯È¯ÇÏ´Â ÇÔ¼ö¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù. µû¶ó¼ to_unsigned() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© Á¤¼ö¸¦ 10ºñÆ® unsigned·Î º¯È¯ ÇÑÈÄ ´Ù½Ã type-casting ÇÏ¿© ¡°std_logic_vector¡±ÀÎ Ãâ·Â Æ÷Æ®¿¡ ¿¬°áÇÑ °ÍÀÌ´Ù. unsigned´Â IEEE 1164ÀÇ numeric_std¿¡ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇ µÇ¾î ÀÖÀ¸¹Ç·Î type-castingÀÌ °¡´ÉÇÏ´Ù.
type UNSIGNED is array (NATURAL range <>) of STD_LOGIC;
type SIGNED is array (NATURAL range <>) of STD_LOGIC;
ÀÌ º¯È¯ °úÁ¤À» º¸¸é ¾Ë ¼ö ÀÖµíÀÌ °°Àº ±âº»ÇüÀ¸·ÎºÎÅÍ ÆÄ»ýµÈ ÀÚ·áÇüÀº type-casting ÇÒ ¼ö ÀÖÁö¸¸ ±âº»ÇüÀÌ ´Ù¸¥ °æ¿ì Çü º¯È¯ ÇÔ¼ö¸¦ ½á¾ß ÇÑ´Ù. ±×·¯³ª ¡°t_int <= a + b;¡± ¿¡¼¿Í °°ÀÌ ±âº»ÇüÀÌ °°Àº ÆÄ»ýÇü(subtype)ÀÇ °æ¿ì¿¡´Â º¯È¯À» ¼öÇàÇÒ ÇÊ¿ä°¡ ¾ø´Ù. À§ÀÇ ¿¹¸¦ ÇÕ¼ºÇÑ °á°ú´Â ±×¸² 4¿Í °°´Ù. 0~7±îÁöÀÇ ¹üÀ§¸¦ °®´Â µÎ°³ÀÇ ¡°small-integer¡±Çü ÀÔ·ÂÀÌ 4ºñÆ®·Î ¿¬»ê±â·Î ÇÕ¼ºµÈ ÈÄ 10ºñÆ® Ãâ·ÂÀÇ ÇÏÀ§ 4ºñÆ®·Î Ãâ·Â µÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù.
3. ³¡À¸·Î..
VHDLÀÇ ÀÚ·áÇü(data type)°ú Çü º¯È¯¿¡ ´ëÇÏ¿© »ìÆ캸¾Ò´Ù. ´ÙÀ½¿¡´Â VHDL ÀÇ °´Ã¼(Objects)¿Í SIGNAL-VARIABLEÀÇ Â÷ÀÌ, ÇÕ¼º °¡´ÉÇÑ ±¸¹®µé¿¡ ´ëÇؼ »ìÆ캸°í ÇÕ¼º °á°ú¸¦ ºñ±³ÇØ º¸±â·Î ÇÑ´Ù.
mailto:goodkook@csvlsi.kyunghee.ac.kr
CSA & VLSI Design Lab. Kyunghee Univ.