VHDLÀÇ ÀÚ·áÇü(data types)

±¹ÀÏÈ£


VHDL¿¡¼­ »ç¿ëÇÏ´Â ÀÚ·áÇü (data type)°ú °´Ã¼µé, ±×¸®°í º¸°í ÇÕ¼º °¡´ÉÇÑ ÀÚ·áÇü¿¡ ´ëÇÏ¿© »ìÆì º¸±â·Î ÇÑ´Ù.
  1. 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¿¡ Á¤ÀǵǾî ÀÖ´Â ¿­°ÅÇüÀÇ ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù.

IEEE 1164¿¡ std_ulogicÀº ´ÙÀ½°ú °°ÀÌ ¿­°ÅÇüÀ¸·Î Á¤ÀÇ µÇ¾î ÀÖ´Ù.

'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)¿¡¼­ »óŸ¦ ³ªÅ¸³»´Â °æ¿ì¿¡ ¸¹ÀÌ ÀÌ¿ëµÇ´Â ¹æ¹ýÀÌ´Ù. ´ÙÀ½°ú °°Àº ¿¹¸¦ »ìÆ캸ÀÚ.

¿Í °°ÀÌ Á¤ÀÇµÈ ÀÚ·áÇü ¡°state¡±ÀÇ °æ¿ì binary¿Í One-Hot encoding µÇ¾úÀ» ¶§ Â÷ÀÌ´Â ±×¸² 2¿Í °°´Ù.

¿¹Á¦¿¡¼­¿Í °°ÀÌ ¿­°ÅÇü ¡°state¡±´Â 3°³ÀÇ ¿ä¼Ò¸¦ °¡Áö¹Ç·Î Binary encodingÇϸé 2ºñÆ®°¡ ÇÊ¿äÇÑ ¹Ý¸é On-Hot encodingÇÏ´Â °æ¿ì °¢ ¿ä¼Ò¸¶´Ù 1°³ÀÇ ºñÆ®¸¦ ÇÒ´çÇÏ¿© 3ºñÆ®·Î Ç¥ÇöµÈ´Ù.

VHDL¿¡¼­ Çü °Ë»ç(type checking)°¡ Ä¡¹ÐÇÑ ÀÌÀ¯ Áß Çϳª°¡ À§¿Í °°Àº ¿­°ÅÇüÀ» ÁÖ·Î ´Ù·ç±â ¶§¹®À̶ó°í ÇÒ ¼ö ÀÖ´Ù. °¢Á¾ ¿¬»êÀÚ È¤Àº ÇÒ´ç(assignment)ÀÇ °æ¿ì ±âº»ÀûÀ¸·Î ¿­°ÅÇüÀ¸·Î ÀÌ·ç¾îÁø ¼­·Î ´Ù¸¥ µÎ ŸÀÔÀº ºñÆ® Æø¿¡¼­ºÎÅÍ ´Ù¸£±â ¶§¹®ÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ bit Çü°ú std_logicÇüÀÇ ÇÒ´ç¹®ÀÇ °æ¿ì ¿¹¸¦ »ìÆ캸ÀÚ.

¿Í °°ÀÌ Á¤ÀÇµÈ µÎ°³ÀÇ ½Ã±×³Î,

À» »ç¿ëÇÑ ÇÒ´ç¹®,

Àº Çϵå¿þ¾îÀûÀÎ ¿¬°áÀÇ Àǹ̸¦ °í·ÁÇØ º¼ ¶§ ÇÒ´ç¹®Àº ¼º¸³ÇÒ ¼ö ¾ø´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù.

1-2 Á¤¼öÇü (Integer Type)

IEEE 1076¿¡ Á¤ÀÇµÈ Á¤¼öÇüÀÇ ±âº»ÀûÀÎ ºñÆ® Æø(bit-width)Àº 32ºñÆ®·Î µÇ¾î ÀÖ´Ù.

Á¤¼öÇüÀº »ê¼ú¿¬»êÀÌ °¡´ÉÇϸç 2ÀÇ º¸¼öÇüÅ·ΠÀÌ·ç¾îÁø´Ù. ¶ÇÇÑ Á¤¼öÇüÀº ÇÕ¼ºÀÌ °¡´ÉÇÏ¸ç ¹üÀ§¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ» °æ¿ì 32ºñÆ®°¡ µÈ´Ù. µû¶ó¼­ °úµµÇÑ ºñÆ® ÆøÀ» °®´Â ¿¬»ê±âÀÇ ÇÕ¼ºÀ» ÇÇÇÏ·Á¸é Á¤¼öÀÇ ¹üÀ§¸¦ ÁöÁ¤Çؼ­ »ç¿ëÇϵµ·Ï ÇÑ´Ù. ´ÙÀ½ÀÇ ¿¹´Â 4ºñÆ® ½Ã±×³ÎÀ» ¼±¾ðÇÑ ¿¹ÀÌ´Ù.

µðÁöÅРȸ·Î·Î ÇÕ¼º µÇ¾úÀ» ¶§ Á¤¼öÇüÀÇ ºñÆ®¸Ê ÇüÅ´ ±×¸² 3°ú °°´Ù.

1-3 ½Ç¼öÇü (Real, Floating-Point Type)

½Ç¼öÇü(real type)Àº ÇÕ¼º°¡´ÉÇÏÁö ¾Ê´Ù. ½Ã½ºÅÛ ¸ðµ¨¸µ À̳ª ¾Æ³¯·Î±× ȸ·ÎÀÇ ¸ðµ¨¸µ µî¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. IEEE 1076ÀÇ ½Ç¼öÇüÀÇ Á¤ÀÇ´Â ´ÙÀ½°ú °°´Ù.

´ÙÀ½Àº ½Ç¼öÇüÀ¸·Î ¾Æ³¯·Î±× ȸ·ÎÀÇ ÇÑ¿¹·Î¼­ A/D º¯È¯±â¸¦ ±â¼úÇÑ ¿¹ÀÌ´Ù.

 

    function ADC_8b_10v_bipolar ( analog_in : in real ) return byte is
    constant max_digital_value : integer := 256;
    constant max_analog_value : real := 5.0;
    variable digitized_signal : integer;
    variable digital_out : byte;
    begin

      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

 

¾Æ³¯·Î±× ÀÔ·Â °ªÀ» ½Ç¼öÇüÀ¸·Î ÀÔ·Â ¹ÞÀºÈÄ µðÁöÅÐ º¯È¯À» ¼öÇàÇÑ´Ù.

À̶§ °è»êµÈ °ªÀº Á¤¼öÇü µ¥ÀÌÅÍÀ̸ç À̸¦ µðÁöÅÐ ½Ã½ºÅÛÀ¸·Î ÀÎÅÍÆäÀ̽º Çϱâ À§ÇÏ¿© Á¤¼öÇüÀ» ¡°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
    constant y_length : integer := width;
    constant a_threshold : integer := 2 ** (width-1);
    variable y_ref : integer;
    variable y : integer;
    variable y_std_logic_vector : std_logic_vector(y_length-1 downto 0);
    begin

      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 ÇüÀ¸·ÎºÎÅÍ Á¤ÀÇÇÏ¿© »ç¿ëÇÏ¿´´Ù.

1-4. Physical Type

¹°¸®·®ÀÇ ´ÜÀ§(unit)¿Í ¹è¼ö °ü°è¸¦ Á¤ÀÇÇÑ °ÍÀ̸ç ÇÕ¼º °¡´ÉÇÏÁö ¾Ê´Ù. IEEE 1076¿¡´Â ½Ã°£¿¡ ´ëÇÑ Á¤ÀÇ°¡ Àִµ¥ ´ÙÀ½°ú °°´Ù.

 

    type time is range -2147483647 to 2147483647
    units

      fs;
      ps = 1000 fs;
      ns = 1000 ps;
      us = 1000 ns;
      ms = 1000 us;
      sec = 1000 ms;
      min = 60 sec;
      hr = 60 min;

    end units;

¡¡

À§¿¡¼­ º¼ ¼ö ÀÖµíÀÌ VHDLÀÇ Ãּҽ𣠴ÜÀ§´Â fs (femto second, 10E-15) ÀÌ´Ù.

1-5 ¹è¿­Çü (Array Type)

VHDL¿¡¼­ ¹è¿­ÇüÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÏ Â÷¿ø ¹è¿­ÇüÀÇ °æ¿ì ´ëºÎºÐ ÇÕ¼º±â¿¡¼­ Áö¿ø ÇÏÁö¸¸ 2Â÷¿ø ¹è¿­À» Áö¿øÇÏÁö ¾Ê´Â ÇÕ¼º±âµµ ¸¹´Ù. µðÁöÅРȸ·ÎÀÇ ±âº» µ¥ÀÌÅÍ ´ÜÀ§´Â ¡°bit¡± ÀÌ´Ù. À̸¦ ¹ö½ºÇüÅ·ΠÁ¤ÀÇÇϱâ À§Çؼ­ ¡°bit_vector¡±ÇüÀ» »ç¿ëÇÑ´Ù. Áï ¹ö½º¸¦ Á¤ÀÇÇÏ´Â °ÍÀº ¡°bit¡±ÀÇ ÀÏ Â÷¿ø ¹è¿­ÀÌ´Ù. ¹è¿­ÇüÀ» Á¤ÀÇ ÇÒ ¶§ ±× Å©±â¸¦ ÁöÁ¤ÇÏ´Â °æ¿ì°¡ ÀÖ°í ÀÓÀÇÀÇ ¹è¿­ Å©±â¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.

ÀÏ Â÷¿ø ¹è¿­·Î 8-ºñÆ® Å©±âÀÇ µ¥ÀÌÅÍ Å¸ÀÔ ¡°byte¡± À» Á¤ÀÇÇÑ °ÍÀÌ´Ù.

"std_logic" ÇüÀ¸·Î ÀÏ Â÷¿ø ¹è¿­Çü ¡°std_logic_vector¡±¸¦ ¼±¾ðÇÑ °ÍÀÌ´Ù. À̶§ ¹è¿­ÀÇ Å©±â¸¦ Á¦ÇÑ ½ÃÅ°Áö ¾ÊÀº °ÍÀ¸·Î¼­ ½Ã±×³ÎÀ» ¼±¾ðÇÒ ¶§ ±× Å©±â¸¦ Á¤ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹è¿­ÇüÀÇ ¼±¾ðÇÑ ¿¹´Â ´ÙÀ½°ú °°´Ù.

1-6 ·¹ÄÚµå Çü(Record Type)

VHDL¿¡¼­´Â ·¹ÄÚµåÇüÀ» Áö¿øÇÑ´Ù. µðÁöÅРȸ·Î¿¡¼­ÀÇ ·¹ÄÚµåÇü »ç¿ë ¿¹´Â ±â°è¾î ¸í·ÉÀÇ ºñÆ®¸Ê Ç¥Çö µî¿¡ ÀÌ¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ·¹ÄÚµå ÇüÀÇ »ç¿ë ¿¹ÀÌ´Ù.

 

    type month_name is (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dev);

    type date is
    record

      day : integer range 1 to 31;
      month : month_name;
      year : integer range 0 to 4000;

    end record;

    constant my_birthday : date := (21, nov, 1963);

    SIGNAL my_birthday : date;

     

      my_birthday.year <= 1963;
      my_birthday.month <= nov;
      my_birthday.day <= 21; -- 5-bit
      -- my_birthday(0) : LSB
      -- my_birthday(4) : MSB

¡¡

  • ÆÄ»ýÇü (Subtype)°ú Çü º¯È¯(Type Conversion)
  • 3. ³¡À¸·Î..


    µÚ·Î Back

    mailto:goodkook@csvlsi.kyunghee.ac.kr
    CSA & VLSI Design Lab. Kyunghee Univ.