Jump to content
    

Преобразования типов в VHDL

Если вам надо целый сконвертировать в bit_vector, то делаете в зависимости от знаковости целого

bit_vector (to_signed (value, width))

или

bit_vector (to_unsigned (value, width)).

 

Соответственно, наоборот:

to_integer (signed (value))

или

to_integer (unsigned (value)).

 

Так а зачем нужно явно подтип конвертировать в базовый тип?

А можно еще использовать при преобразовании к подтипу квалификатор подтипа в виде имени подтипа с апострофом, насколько я помню. Но давно не брал я в руки шашек, уже стало забываться. :)

Share this post


Link to post
Share on other sites

Ну вот, так получше вроде

LIBRARY ieee;
use ieee.numeric_bit.all;

package body UTILS is

  function to_uint(bits: BIT_VECTOR) return integer is
  begin
    return to_integer(unsigned(bits));
  end to_uint;
  
  function To_BitVector32(number : integer) return BIT_VECTOR is
  begin
    return BIT_VECTOR(to_unsigned(number,32));
  end To_BitVector32;
   
end UTILS;

Share this post


Link to post
Share on other sites

Попробуйте на несколько символов меньше:

 

  function To_BitVector32(number : integer) return BIT_VECTOR is
  begin
    return to_unsigned(number,32);
  end To_BitVector32;

 

Share this post


Link to post
Share on other sites

Попробуйте на несколько символов меньше:

 

  function To_BitVector32(number : integer) return BIT_VECTOR is
  begin
    return to_unsigned(number,32);
  end To_BitVector32;

Не так не хочет

Error (10511): VHDL Qualified Expression error at DE2_115.vhdl(20): TO_UNSIGNED type specified in Qualified Expression must match bit_vector type that is implied for expression by context

 

Несколькими постами des00 советовал не использовать bit_vector- забыл спросить а чем плохо?

 

Share this post


Link to post
Share on other sites

Несколькими постами des00 советовал не использовать bit_vector- забыл спросить а чем плохо?

 

Это его личные предпочтения. Не использовать никаких типов, кроме std_logic_vector. Наверное, потому, что придется писать прокладки к генерируемым визардами блокам, из-за упоминавшейся мною ранее вериложности разработчиков тулзов.

 

 

Не так не хочет

Error (10511): VHDL Qualified Expression error at DE2_115.vhdl(20): TO_UNSIGNED type specified in Qualified Expression must match bit_vector type that is implied for expression by context

 

Странно. Сейчас не стоит ISE - не могу проверить.

Но по тексту сообщения об ошибке возникает впечатление, что он считает имя to_unsigned именем типа, а не функции.

Вы не включили случайно numeric_std?

Share this post


Link to post
Share on other sites

Поддержу des00. Есть смысл использовать std_logic тип везде где только можно, потому что синтезируется все таки да в std_logic. И при использовании других типов придется писать те самые "прокладки", чтобы контролировать преобразование типов. Чтобы раз и навсегда забыть про это дело, имеет смысл, работать напрямую с std_logic, кстати это будет и надежнее, потому что проще для синтезатора.

Share this post


Link to post
Share on other sites

Поддержу des00. Есть смысл использовать std_logic тип везде где только можно, потому что синтезируется все таки да в std_logic. И при использовании других типов придется писать те самые "прокладки", чтобы контролировать преобразование типов. Чтобы раз и навсегда забыть про это дело, имеет смысл, работать напрямую с std_logic, кстати это будет и надежнее, потому что проще для синтезатора.

 

Да, и вы - тоже, типичный вериложник по образу мышления. Надежнее не будет, так как вы лишаетесь возможности контролировать свои ошибки при помощи правильно сконструированной системы необходимых типов. Синтезатор ошибается гораздо реже программиста.

Share this post


Link to post
Share on other sites

Синтезатор ошибается гораздо реже программиста.

Золотые слова. А переходить от типа к типу всё равно придётся, они все для чего-то придуманы, в одном месте лучше один, а в другом другой.

Share this post


Link to post
Share on other sites

Вы не включили случайно numeric_std?

И с ним и без него пробовал. Но у меня Quartus 2, может в этом дело. Ну да ладно, так нормально в принципе)

Share this post


Link to post
Share on other sites

Это его личные предпочтения. Не использовать никаких типов, кроме std_logic_vector.

я этого не говорил, не обобщайте. я говорил только про тип bit_vector. использовать который для синтезируемого кода ИМХО не имеет большого смысла, а в некоторых случаях даже вредно.

Share this post


Link to post
Share on other sites

я этого не говорил, не обобщайте. я говорил только про тип bit_vector. использовать который для синтезируемого кода ИМХО не имеет большого смысла, а в некоторых случаях даже вредно.

 

По сравнению c std_logic_vector преимущество просто огромное, так как он не resolved.

По сравнению с std_ulogic_vector преимущество чуть меньшее и заключается в избегании излишних сущностей.

Share this post


Link to post
Share on other sites

По сравнению c std_logic_vector преимущество просто огромное, так как он не resolved.

По сравнению с std_ulogic_vector преимущество чуть меньшее и заключается в избегании излишних сущностей.

вы гуру, вам виднее. свое мнение я высказал.

Share this post


Link to post
Share on other sites

вы гуру, вам виднее. свое мнение я высказал.

 

Не возражаю.

У вас, как я смог заметить, тоже больше двух тыщ постов скопилось. :laughing:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...