Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Vhdl 如何定义记录类型的默认值_Vhdl_Fpga_Asic - Fatal编程技术网

Vhdl 如何定义记录类型的默认值

Vhdl 如何定义记录类型的默认值,vhdl,fpga,asic,Vhdl,Fpga,Asic,是否可以为记录类型或任何用户定义的类型定义默认值 类似于(伪VHDL): 或 编辑:将glarp从类型定义更改为子类型定义。我冒昧地将注释转换为答案。 记录类型的初始值可以由该类型的常量定义 type t_foo is record a : integer; b : std_logic; end record; constant INIT_T_FOO : t_foo := (a => 4, b => '0'); signal bar : t_foo := INIT

是否可以为记录类型或任何用户定义的类型定义默认值

类似于(伪VHDL):


编辑:将glarp从类型定义更改为子类型定义。

我冒昧地将注释转换为答案。 记录类型的初始值可以由该类型的常量定义

type t_foo is record
    a : integer;
    b : std_logic;
end record;

constant INIT_T_FOO : t_foo := (a => 4, b => '0');

signal bar : t_foo := INIT_T_FOO;

这种方法的一个缺点是,每次定义
t\u foo
类型的对象时,用户必须确保设置正确的初始值。使用常量定义初始值可以节省一些输入,并使以后更容易更改初始值。但同样,以这种方式强制执行特定的初始值是不可能的,这一切都归结为编码规则和人为错误,因此这是一个次优的解决方案。

否。类型声明不是对象声明。注意:不能从其他类型声明类型glarp。可以为元素类型(或glarp)声明子类型,其中子类型的“左”值提供默认初始值。IEEE Std 1076-2008 5。类型,5.1概述第2段(部分)“类型以一组值和一组操作为特征。”6.4对象,6.4.1概述第1段(部分)“对象是包含(具有)类型值的命名实体。对象是以下对象之一:-由对象声明声明的对象(见6.4.2)…”您可以定义对象(表示类常数)在具有所需默认值的任何对象声明之前使用默认值,其中具有显式默认初始值的对象可用于为相同类型的其他对象提供初始值。这也可用于复合对象类型的子元素以及子元素类型的对象。注:合成工具t普遍支持使用非静态对象(变量、信号)在标准中提供初始值。请参阅。您可以提供一个特定的编程问题,说明您试图解决的实际问题,而不是围绕您的实际问题进行炮轰。回答开放式问题可能需要LRM的引用数量可能超过此处的发布大小限制。感谢您展示VHDL LRM没有设置用户定义(记录)的默认值的规定类型。将“LEFT”值作为隐式默认值似乎有点粗糙,特别是当这意味着标量类型将要求默认值与标量类型范围的下限或上限相同时。但这就是我们得到的。
subtype glarp is integer range 0 to 10 := 5;
type t_foo is record
    a : integer;
    b : std_logic;
end record;

constant INIT_T_FOO : t_foo := (a => 4, b => '0');

signal bar : t_foo := INIT_T_FOO;