VHDL输出在模拟中未定义,但编译通过

VHDL输出在模拟中未定义,但编译通过,vhdl,modelsim,Vhdl,Modelsim,我是一名新生,作业是用测试台构建3个组件,然后将它们安排到一个结构中。我构建的所有3个组件都工作得很好,但当我将它们放在一起时,其中一个输出保持未定义。我试图跟踪名为dat的信号,这很好,但可能我没有使用正确的语法将dat信号分配给data\u out。id\u led\u ind是第二个输出,工作正常,但data\u out未定义 下面是代码(我想问题出在21号车道-“数据输出dat由dff的q驱动。这不是连接组件的方式。端口映射应用于连接不同组件/实体的端口,而不是将任何实体的信号连接到另一

我是一名新生,作业是用测试台构建3个组件,然后将它们安排到一个结构中。我构建的所有3个组件都工作得很好,但当我将它们放在一起时,其中一个输出保持未定义。我试图跟踪名为
dat
的信号,这很好,但可能我没有使用正确的语法将
dat
信号分配给
data\u out
id\u led\u ind
是第二个输出,工作正常,但
data\u out
未定义


下面是代码(我想问题出在21号车道-“数据输出
dat
dff
q
驱动。这不是连接组件的方式。
端口映射应用于连接不同组件/实体的端口,而不是将任何实体的信号连接到另一实体的端口。

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

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

当您忽略架构数据流时,我们发现架构结构中没有数据输出的驱动程序


使用dat作为体系结构结构中的源(如体系结构数据流中所示)缺少对数据的赋值。复制或复制数据流体系结构中的并发信号赋值语句data out,是什么驱动了“dat”?禁用架构的命令行规范,如果没有配置规范,将选择最后分析的架构,在这种情况下,这将是peak_detect的架构结构。如果数据流不符合要求,请将其注释掉。dat是peak_detect架构结构中的声明信号。它是pe当信号类型相同且范围相同(子类型匹配)时,完全可以在端口映射中将信号作为实际信号连接到形式信号。在实体峰值检测的端口声明中,从dat到数据输出的连接缺少什么。这可能是“完全可以”的对于编译器/模拟器而言,但对于试图阅读、理解和调试的人来说,这还远远不够完美。那么为什么不将所有逻辑放在一个实体中呢?工具将可以满足这一要求。看来,您正试图强制执行样式,而不是指定符合VHDL标准。样式不一定排除符合性。在least mine没有。该标准没有按照要求采用您的风格。请注意“您不能简单地将数据输出连接到dff端口图中的q,因为dff的输出也被用作id_sense的输入。”参见IEEE Std 1076-2008,6.5.2接口对象声明,第18段“-out。允许更新接口对象的值,如果该值不是信号参数,则读取该值。”peak_detect port signal data_out声明为mode out,不能用作实际的in-comp8bit关联列表正式端口B mode in-信号参数data_out不能读取(第15段)。另见-1993,4.3.2第12/10段。
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;