2013-08-04 89 views
-1

我是一名新生,其任务是使用测试平台构建3个组件,然后将它们排列成一个结构。我建立的所有3个组件都很好,但是当我将它们放在一起时,其中一个输出保持未定义状态。我试图跟踪名为dat的信号,这很好,但可能我没有使用正确的语法将dat信号分配给data_outid_led_ind是第二个输出,它工作正常,但data_out未定义。VHDL输出在模拟中是不确定的,但编译通过正确

下面是代码(我认为这个问题是在车道21 - “DATA_OUT < = DAT”)

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_arith.all; 

entity peak_detect is 
    port(
    input  : in std_logic_vector (7 downto 0); 
    data_out : out std_logic_vector (7 downto 0); 
    reset  : in std_logic; 
    clock  : in std_logic; 
    enable  : in std_logic; 
    id_led_ind : out std_logic); 
end peak_detect; 

architecture dataflow of peak_detect is 
    signal a_big_b : std_logic; 
    signal en  : std_logic; 
    signal dat  : std_logic_vector (7 downto 0); 
begin 
    en  <= (enable or a_big_b); 
    data_out <= dat; 
end dataflow; 

architecture structure of peak_detect is 
    signal a_big_b : std_logic; 
    signal en  : std_logic; 
    signal dat  : std_logic_vector (7 downto 0); 

    component comp_8bit is 
    port(
     A : in std_logic_vector (7 downto 0); 
     B : in std_logic_vector (7 downto 0); 
     res : out std_logic); 
    end component; 

    component dff is 
    port (
     data : in std_logic_vector (7 downto 0); 
     q  : out std_logic_vector (7 downto 0); 
     clk : in std_logic; 
     reset : in std_logic; 
     en : in std_logic); 
    end component; 

    component id_sens is 
    port(
     data_in : in std_logic_vector (7 downto 0); 
     led  : out std_logic); 
    end component; 

begin 
    reg : dff port map (data => input, q => dat, clk => clock, reset => reset, en => enable); 
    comp : comp_8bit port map (A => input, B => dat, res => a_big_b); 
    sens : id_sens port map (data_in => dat, led => id_led_ind); 
end structure; 
+0

在数据流架构中,驱动“dat”的是什么? –

+1

如果没有命令行规范体系结构,并且没有配置规范,那么将选择最后分析的体系结构,在这种情况下,这将是peak_detect的体系结构。如果数据流冒犯了您,请将其注释掉。 – user1155120

回答

0

dat是由dffq驱动。这不是你连接组件的方式。应该使用port map来连接不同组件/实体的端口,而不是将任何实体的信号连接到另一个实体的端口。

+1

dat是peak_detect体系结构中声明的信号。将信号作为实际信号连接到端口映射中的正式信号是完全可以的,只要它们具有相同范围的相同类型(子类匹配)。在实体peak_detect的端口声明中,从dat到data_out的连接中缺少什么。 – user1155120

+0

编译器/模拟器可能“完全没问题”,但是当涉及到人类试图阅读,理解和调试时,它远非完美。为什么不把所有的逻辑放在一个实体中呢?工具将会与此相关。 – shrm

+0

看来你试图强制执行样式,而不是指定符合VHDL标准。 – user1155120

1

对于实体peak_detect有两种体系结构(数据流和结构)似乎存在混淆。这两种体系结构是相互排斥的,而最后一种体系结构是没有其他配置的情况下默认分配的,直接指定其中一种体系结构。

为了评估组件如何互连,并且它们的端口映射连接与peak_detect的端口声明相关,可以将第一个体系结构注释掉(数据流)。

当您忽视架构数据流时,我们发现架构结构中没有data_out的驱动程序。

如架构数据流中所示,您错过了将dat用作架构结构中的源的data_out分配。复制或复制并发信号分配语句data_out < = dat;进入体系结构。

您不能在dff的端口映射中简单地将data_out连接到q,​​因为dff的输出也用作id_sense的输入。