你好,我有一个信号,它在很多地方使用,并且可能会被修改。所以为了简化维护,我做了一个TYPE声明,叫做T_RowInt。
我做了两个信号 "typeed "和 "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在此上下文中不能有这样的操作数 "然而,这个表达式:
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而言。然而,如何使用一个 亚型譬如
subtype T_RowInt is integer range -63 to 63;
那么VHDL将不考虑 T_RowInt
作为一个完全不同的类型。你的信号 untyped
实际上是在使用一个子类型,一个所谓的_匿名子类型`。
signal untyped : integer range -63 to 63;
也许你能看出这两行代码的相似之处?