这是VHDL中6位数字串行加法器的代码。有一个编译错误“canot read output q”,请帮我解决这个问题

时间:2013-11-21 16:25:31

标签: vhdl

这是两个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;

2 个答案:

答案 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放入过程敏感度列表中。这个过程是一个时钟进程,除了你的时钟和灵敏度列表中的异步复位(如果你使用的是异步复位),你不应该有任何信号。你根本不需要重置。