我有以下表达式,并希望将其缩短为较短的表达式。
任何人都可以帮助我吗?
architecture behavioral of mux4 is
begin
with sel select
y <= "a" when "00",
"b" when "01",
"c" when "10",
"d" when "11",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" when others;
end architecture behavioral
我想避免写32次角色X. 我知道它可以被另一个表达式替换,但我无法记住。
答案 0 :(得分:2)
要缩短默认表达式,通常(others => 'X')
会在所有未指定的成员中创建一个X
的值(此处为所有成员,因为您尚未明确指定任何位。
architecture behavioral of mux4 is
begin
with sel select
y <= "a" when "00",
"b" when "01",
"c" when "10",
"d" when "11",
(others => 'X') when others;
end architecture behavioral;
注意:有些情况下VHDL无法从上下文中确定表达式的大小,因此这不会一直有效。还有另一种选择:因为很明显您希望该值与y
的大小相同,所以您可以使用'X'
非常轻松地创建一个充满'range
的值属性,如:
with sel select
y <= "a" when "00",
(y'range => 'X') when others;
答案 1 :(得分:1)
我仍然缺少一些背景来完全理解你正在做什么,但你可以分配&#34;其他人&#34;像这样:
architecture a of mux_example is
signal y: std_logic_vector(31 downto 0);
signal sel: std_logic;
begin
y<=x"1234ABCD" when sel='1' else (others=>'X');
end architecture ;
有什么好处吗?
答案 2 :(得分:0)
为了填充知道长度的'X'
,然后(如用户3065349指出)可以使用:
(others => 'X') -- All elements with 'X'
为了生成具有特定长度和值的std_logic_vector
,可以使用限定表达式,如:
std_logic_vector'(0 to 31 => 'X') -- 32 times 'X'
对于其他用途,甚至可以在不同的位置给出不同的值:
std_logic_vector'(0 to 2 => 'X', 3 to 5 => 'Z', 6 to 8 => 'W') -- "XXXZZZWWW"