Jump to content

    

Десятичное представление сигнала

Ничего ненагуглил. решил тут спросить.

бинарная запись

 sig <= "00000011";

шестнадцатиричная

 sig <= X"03";

а есть десятичная? типа

 sig <= D"3";

Edited by Jenya7

Share this post


Link to post
Share on other sites
Ничего ненагуглил. решил тут спросить.

бинарная запись

 sig <= "00000011";

шестнадцатиричная

 sig <= X"03";

а есть десятичная? типа

 sig <= D"3";

Вроде можно так: 10#3#

Share this post


Link to post
Share on other sites

В std_logic_vector напрямую записать целое число нельзя. Нужно использовать функции преобразования типов.

Share this post


Link to post
Share on other sites
Ничего ненагуглил. решил тут спросить.

Для какого языка?

Если для VHDL, то функция conv_std_logic_vector().

Share this post


Link to post
Share on other sites
В std_logic_vector напрямую записать целое число нельзя. Нужно использовать функции преобразования типов.

 

это и удивительно. почему можно записать sig <= X"03"; но нельзя sig <= D"3";

 

Share this post


Link to post
Share on other sites
это и удивительно. почему можно записать sig <= X"03"; но нельзя sig <= D"3";

Потому-что никто кроме Вас не знает какая в итоге нужна разрядность для представления вашего числа. VHDL - строг. Вы сами должны контролировать разрядность чисел.

Share this post


Link to post
Share on other sites
Потому-что никто кроме Вас не знает какая в итоге нужна разрядность для представления вашего числа. VHDL - строг. Вы сами должны контролировать разрядность чисел.
поэтому если Вы запишите sig <= X"003"; строгий VHDL Вас поправит. то же самое может быть с любой записью. любой С компайлер контролирует типы данных.
Edited by Jenya7

Share this post


Link to post
Share on other sites
поэтому если Вы запишите sig <= X"003"; строгий VHDL Вас поправит. то же самое может быть с любой записью. любой С компайлер контролирует типы данных.

Ну Вы сами и ответили :rolleyes:

В случае если:

signal sig : std_logic_vector(7 downto 0);

То действительно выражение sig <= X"003" выдаст ошибу, ибо вы "впихиваете невпихуемое"

Примерно то же и с sig <= 3. Ибо сколько разрядов у Вас - знаете только Вы.

Напишите вот так:

sig  <= std_logic_vector(to_unsigned(3,8));

Т.е явно укажите разрядность при конвертации типа стандартными библиотеками - то VHDL вас поймет.

Share this post


Link to post
Share on other sites
Последний стандарт VHDL понимает

A <= 5d"15";

Спасибо ! Не знал....

А последний вроде VHDL-2008 ?

Share this post


Link to post
Share on other sites
Ну Вы сами и ответили :rolleyes:

В случае если:

signal sig : std_logic_vector(7 downto 0);

То действительно выражение sig <= X"003" выдаст ошибу, ибо вы "впихиваете невпихуемое"

Примерно то же и с sig <= 3. Ибо сколько разрядов у Вас - знаете только Вы.

Напишите вот так:

sig  <= std_logic_vector(to_unsigned(3,8));

Т.е явно укажите разрядность при конвертации типа стандартными библиотеками - то VHDL вас поймет.

 

понял. спасибо. не буду заморачиваться. переведу на калькуляторе в hex.

Share this post


Link to post
Share on other sites
А последний вроде VHDL-2008 ?

Ну он уже поддерживает

 

 

...можно записать sig <= X"03"; ...

Только учтите, что X"03" это восьми битный вектор и если sig , например, пяти или девяти битный, то такое присвоение может не пройти или пройти не так, как вы хотели.

Share this post


Link to post
Share on other sites
Последний стандарт VHDL понимает

A <= 5d"15";

 

да. понимает. а что стоит перейти на 2008?

Share this post


Link to post
Share on other sites
понял. спасибо. не буду заморачиваться. переведу на калькуляторе в hex.

Вот заниматься переводом чисел в калькуляторе это и есть заморачиваться. А преобразовывать типы - это не заморочки. Причем зачем везде писать std_logic_vector ?

Его имеет смысл использовать только на входных\выходных интерфейсах, или на интерфейсах, сопрягаемых с IP корками.

Share this post


Link to post
Share on other sites
Ничего ненагуглил. решил тут спросить.

бинарная запись

 sig <= "00000011";

шестнадцатиричная

 sig <= X"03";

а есть десятичная? типа

 sig <= D"3";

 

sig <= std_logic_vector(to_unsigned(3, sig'LENGTH));

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now