从两个8位向量创建一个16位向量

时间:2014-02-03 03:07:13

标签: vector concatenation vhdl

我想从两个8位向量创建一个16位向量,但是有如下错误。怎么解决?

LIBRARY ieee;  
USE ieee.std_logic_1164.all;  
USE ieee.std_logic_arith.all;  

ENTITY Binary2Gray IS  
-- Declarations  
port(data : in  STD_LOGIC_VECTOR (3 downto 0);  
data_out : inout  STD_LOGIC_VECTOR (3 downto 0);  
data1 : inout std_logic_vector (1 downto 0);  
data2 : inout std_logic_vector (1 downto 0);  
CLK_I : in std_logic;  
y1 : out std_logic_vector (7 downto 0);   
y2 : out std_logic_vector (7 downto 0);  
op : out std_logic_vector (15 downto 0)  
);  
END Binary2Gray ;  

-----------------------------
ARCHITECTURE rtl OF Binary2Gray IS  

signal op : std_logic_vector (15 downto 0);  

begin  
    process(CLK_I)  
BEGIN  
data_out(3) <=data(3);  
data_out(2) <=data(3) xor data (2);  
data_out(1) <=data(2) xor data (1);  
data_out(0) <=data(1) xor data (0);  
label_1: for data_out in 0 to 3 loop  
    if(data_out = 0 ) then  
 data1(0) <=data(1) xor data (0);  
 elsif (data_out = 1 ) then  
    data1(1) <=data(2) xor data (1);  
elsif (data_out = 2 ) then  
    data2(0) <=data(3) xor data (2);  
else  
    data2(1) <=data(3);  
end if;  
end loop label_1;  
end process;  
with data1 select y1 <=  
"00110011" when "00",  
"00111101" when "01",  
"11010011" when "10",  
"11011101" when others;  
with data2 select y2 <=  
"00110011" when "00",  
"00111101" when "01",  
"11010011" when "10",  
"11011101" when others;  
op <= y1 & y2 ;  
 END rtl;   

错误:

# Error: ELAB1_0008: QAM.vhd : (56, 8): Cannot read output : "y1".  
# Error: ELAB1_0008: QAM.vhd : (56, 8): Cannot read output : "y2".  

1 个答案:

答案 0 :(得分:2)

在VHDL-2002(及更早版本)中,不允许读取y1之类的输出端口 和y2,因此错误。

可能的修复方法是:

  • 声明y1y2buffer端口
  • 使用值和值创建中间信号y1_sigy2_sig 将这些内容分配给y1y2op
  • 如果可能,请在工具链中使用VHDL-2008。

请注意,op在输出端口时不应声明为信号。注意 此过程可能无法按预期工作,因为它不是一个 由于缺少if rising_edge(CLK_I) then语句而没有组合的时钟进程 因敏感列表中缺少data而导致的处理。