VHDL приведение пользовательского целого числа со знаком типа к std_logic_vector - PullRequest
0 голосов
/ 28 апреля 2020

Привет У меня есть сигнал, который используется во многих местах и ​​может быть изменен в будущем. Поэтому, чтобы упростить обслуживание, я сделал TYPE-декларацию с именем T_RowInt.

Я сделал два сигнала «типизированный» и «нетипизированный», оба из которых равны целому диапазону от -63 до 63, чтобы продемонстрировать проблему.

Код следующий:

type T_RowInt is range -63 to 63;
signal typed : T_RowInt;
signal untyped : integer range -63 to 63;

signal text_col : integer range 0 to 127 := 0;
signal bank : std_logic_vector(2 downto 0) := "111";
signal page : std_logic_vector(3 downto 0) := "0000";

Я использую вышеупомянутое в следующих выражениях:

addr_r_dram(19 downto 0)<= bank & page & std_logic_vector(to_unsigned(typed,6)) & std_logic_vector(to_unsigned(text_col, 7));

Это не проходит проверку синтаксиса с "to_unsigned не может иметь такие операнды в этом контексте" Однако , это выражение:

addr_r_dram(19 downto 0)<= bank & page & std_logic_vector(to_unsigned(untyped,6)) & std_logic_vector(to_unsigned(text_col, 7));

В порядке

Есть ли способ форсировать преобразование пользовательского сигнала TYPED?

Спасибо

Отметить

1 Ответ

2 голосов
/ 28 апреля 2020

Если вы используете type, то вы определили полностью новый тип, что касается VHDL. Однако как насчет использования подтипа , например,

subtype T_RowInt is integer range -63 to 63;

, тогда VHDL не будет рассматривать T_RowInt как совершенно другой тип. Ваш сигнал untyped фактически использует подтип, так называемый _anonymous subtype`:

signal untyped : integer range -63 to 63;

Возможно, вы видите сходство между этими двумя строками кода?

...