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

时间:2013-08-04 20:57:40

标签: vhdl modelsim

我是一名新生,其任务是使用testbench构建3个组件,然后将它们安排到一个结构中。我构建的所有3个组件都运行良好但是当我将它们组合在一起时,其中一个输出保持不确定。我试图跟踪名为dat的信号并且没问题,但我可能没有使用正确的语法将dat信号分配给data_outid_led_ind是第二个输出,它工作正常,但data_out未定义。

以下是代码(我认为问题出在第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;

2 个答案:

答案 0 :(得分:1)

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

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

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

您缺少使用dat作为体系结构结构中的源的data_out赋值,如架构数据流中所示。复制或复制并发信号赋值语句data_out&lt; = dat;进入建筑结构。

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

答案 1 :(得分:0)

datq的{​​{1}}驱动。这不是你连接组件的方式。 dff应该用于连接不同组件/实体的端口,而不是任何实体的信号连接到另一个实体的端口。