VHDL 将自定义类型有符号整数转换为 std_logic_vector

VHDL casting a custom Type signed integer to a std_logic_vector

你好,我有一个在很多地方使用的信号,并且可能会在轨道上被改变。因此,为了简化维护,我做了一个名为 T_RowInt.

的 TYPE 声明

我已经制作了两个信号 "typed" 和 "untyped",它们都等于整数范围 -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 can not have such operands in this context" 语法检查失败 但是,这个表达式:

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

可以

有没有办法强制转换自定义 TYPED 信号?

谢谢

马克

如果您使用 type 那么就 VHDL 而言,您已经定义了一个完整的 new 类型。但是,使用 子类型 怎么样,例如

subtype T_RowInt is integer range -63 to 63;

那么 VHDL 不会将 T_RowInt 视为完全不同的类型。您的信号 untyped 实际上使用了一个子类型,即所谓的 _anonymous 子类型`:

signal untyped : integer range -63 to 63;

或许你能看出这两行代码的相似之处?