【发布时间】:2017-11-20 13:13:09
【问题描述】:
是否可以在 VHDL 中声明与另一个信号相同类型的信号?
例如,假设我们有以下信号声明:
signal address_q : integer range 0 to 31;
我需要声明一个变量address_d,它与address_q 变量(integer range 0 to 31) 的类型相同。是否可以通过使用内置信号属性或其他方式来做到这一点?
【问题讨论】:
是否可以在 VHDL 中声明与另一个信号相同类型的信号?
例如,假设我们有以下信号声明:
signal address_q : integer range 0 to 31;
我需要声明一个变量address_d,它与address_q 变量(integer range 0 to 31) 的类型相同。是否可以通过使用内置信号属性或其他方式来做到这一点?
【问题讨论】:
subtype 属性可能是您正在寻找的:
entity foo is
end entity foo;
architecture bar of foo is
signal address_q : integer range 0 to 31;
begin
process
variable v: address_q'subtype;
begin
report to_string(v'subtype'left);
report to_string(v'subtype'right);
wait;
end process;
end architecture bar;
用 GHDL 模拟:
foo.vhd:10:5:@0ms:(report note): 0
foo.vhd:11:5:@0ms:(report note): 31
注意:此属性已在 VHDL 2008 中引入。请勿尝试将其与旧版本的 VHDL 标准一起使用。
【讨论】:
第一种方式:
您可以一次声明更多信号,用逗号分隔它们。
signal address_q, address_d : integer range 0 to 31;
第二种方式:
您可以先声明您的类型,然后将其用于所有信号声明。
type my_type is integer range 0 to 31;
signal address_q : my_type;
signal address_d : my_type;
【讨论】:
type my_type is signal'type