Types VHDL将自定义类型有符号整数转换为标准逻辑向量
嗨,我有一个信号机,在很多地方使用,并可能在赛道上被改变。为了简化维护,我做了一个类型声明,名为T_RowInt 我制作了两个信号“类型化”和“非类型化”,这两个信号都相当于一个整数范围-63到63来演示这个问题 代码如下:Types VHDL将自定义类型有符号整数转换为标准逻辑向量,types,casting,vhdl,Types,Casting,Vhdl,嗨,我有一个信号机,在很多地方使用,并可能在赛道上被改变。为了简化维护,我做了一个类型声明,名为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 t
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));
addr\u r\u dram(19到0)如果使用type
,那么就VHDL而言,您已经定义了一个全新的类型。但是,使用子类型如何,例如
<0> VHDL将不会考虑<代码> TyRoNt> <代码>作为完全不同的类型。您的信号非类型化
实际上使用了一个子类型,即所谓的“匿名子类型”:
signal untyped : integer range -63 to 63;
也许您可以看到这两行代码之间的相似性?如果您使用类型
,那么就VHDL而言,您已经定义了一个全新的类型。但是,使用子类型如何,例如
<0> VHDL将不会考虑<代码> TyRoNt> <代码>作为完全不同的类型。您的信号非类型化
实际上使用了一个子类型,即所谓的“匿名子类型”:
signal untyped : integer range -63 to 63;
也许您可以看到这两行代码之间的相似性?请提供一个例子,您的代码片段令人困惑。所有数字类型(包括整数类型T_RowInt)都是密切相关的,这意味着的值可以进行到另一个整数类型的类型转换(例如,integer(typed)
,其中integer
是无符号
索引类型的基本类型)。注意,您还必须执行一些偏移算法,以使其进入子类型natural
的范围。类型是一系列值和一组操作。其中一些操作是预定义的或基本的操作。请提供一个示例,您的代码片段令人困惑。所有数字类型(包括整数类型T_RowInt)都是密切相关的,这意味着的值可以进行到另一个整数类型的类型转换(例如,integer(typed)
,其中integer
是无符号
索引类型的基本类型)。注意,您还必须执行一些偏移算法,以使其进入子类型natural
的范围。类型是一系列值和一组操作。其中一些操作是预定义的或基本的操作。基类型的负值integer
超出了由包数值\u std函数转换为无符号
到复合数组类型无符号
所转换的自然
范围。使用转换有符号
并键入convert tostd_logic_vector
或将63添加到to_unsigned
第一个参数。这三种数组类型密切相关,具有相同的元素子类型(std_logic
),可以进行类型转换。OP似乎希望添加63以维持DRAM地址顺序。片段不清楚。很抱歉混淆了。这个应用程序非常大,我想这些行就足够了。在转换为std_逻辑_向量之前,所有元素都将是+ve,这就是为什么我去掉了MSB(因为它总是为零)。不管怎么说,Matthew的回答证实了我的怀疑,即创建的类型确实与转换库无关,并且使用子类型修复了这一点。:)基类型整数
的负值超出了由包数值\u std函数转换为无符号
到复合数组类型无符号
所转换的自然
范围。使用转换有符号
并键入convert tostd_logic_vector
或将63添加到to_unsigned
第一个参数。这三种数组类型密切相关,具有相同的元素子类型(std_logic
),可以进行类型转换。OP似乎希望添加63以维持DRAM地址顺序。片段不清楚。很抱歉混淆了。这个应用程序非常大,我想这些行就足够了。在转换为std_逻辑_向量之前,所有元素都将是+ve,这就是为什么我去掉了MSB(因为它总是为零)。不管怎么说,Matthew的回答证实了我的怀疑,即创建的类型确实与转换库无关,并且使用子类型修复了这一点。:)
signal untyped : integer range -63 to 63;