这是两个6位串行加法器的代码。它像记分板一样。得到编译错误“无法读取输出q”。请帮我解决这个问题。
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity board IS
port
(
C: in std_logic;
h : in std_logic_vector(5 downto 0);
q : out std_logic_vector(5 downto 0)
-- s,cout : out std_logic
);
end board;
architecture archi of board is
signal tmp: std_logic_vector(5 downto 0);
begin
process(C)
begin
if(C'event and C='1') then
tmp<= std_logic_vector (unsigned(q) + unsigned(h));
end if;
end process;
q<=tmp;
end archi;
答案 0 :(得分:2)
出于某种原因(为什么?),您无法直接从输出端口读取数据。创建内部信号,例如q_i
,将所有q
替换为q_i
,并将内部信号分配给输出端口,即q <= q_i
。
另请注意,您的tmp
信号不是必需的。您可以在计时过程中编写q_i <= std_logic_vector((unsigned(q_i) + unsigned(h));
。
答案 1 :(得分:1)
您应该使用numeric_std而不是std_logic_unsigned。 std_logic_unsigned不是官方ieee支持的包。在文件的顶部执行此操作,您的问题应该消失:
use ieee.numeric_std.all;
也不要将信号h放入过程敏感度列表中。这个过程是一个时钟进程,除了你的时钟和灵敏度列表中的异步复位(如果你使用的是异步复位),你不应该有任何信号。你根本不需要重置。