Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types VHDL将自定义类型有符号整数转换为标准逻辑向量_Types_Casting_Vhdl - Fatal编程技术网

Types VHDL将自定义类型有符号整数转换为标准逻辑向量

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

嗨,我有一个信号机,在很多地方使用,并可能在赛道上被改变。为了简化维护,我做了一个类型声明,名为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));

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 to
std_logic_vector
或将63添加到
to_unsigned
第一个参数。这三种数组类型密切相关,具有相同的元素子类型(
std_logic
),可以进行类型转换。OP似乎希望添加63以维持DRAM地址顺序。片段不清楚。很抱歉混淆了。这个应用程序非常大,我想这些行就足够了。在转换为std_逻辑_向量之前,所有元素都将是+ve,这就是为什么我去掉了MSB(因为它总是为零)。不管怎么说,Matthew的回答证实了我的怀疑,即创建的类型确实与转换库无关,并且使用子类型修复了这一点。:)基类型
整数
的负值超出了由包数值\u std函数
转换为无符号
到复合数组类型
无符号
所转换的
自然
范围。使用
转换有符号
并键入convert to
std_logic_vector
或将63添加到
to_unsigned
第一个参数。这三种数组类型密切相关,具有相同的元素子类型(
std_logic
),可以进行类型转换。OP似乎希望添加63以维持DRAM地址顺序。片段不清楚。很抱歉混淆了。这个应用程序非常大,我想这些行就足够了。在转换为std_逻辑_向量之前,所有元素都将是+ve,这就是为什么我去掉了MSB(因为它总是为零)。不管怎么说,Matthew的回答证实了我的怀疑,即创建的类型确实与转换库无关,并且使用子类型修复了这一点。:)
signal untyped : integer range -63 to 63;