0

我对 VHDL 的配置有一些问题。我应该用两种不同的架构制作一个简单的 D-TYPE FLIP FLOP。一个应该是同步的,另一个应该是异步的。实体的代码是

entity FD is
Port (  D:  In  std_logic;
    CK: In  std_logic;
    RESET:  In  std_logic;
    Q:  Out std_logic);
end FD;


architecture SYNCH of FD is 

begin
PSYNCH: process(CK,RESET)
begin
  if CK'event and CK='1' then 
    if RESET='1' then 
      Q <= '0'; 
    else
      Q <= D; 
    end if;
  end if;
end process;

end SYNCH;

architecture ASYNCH of FD is 

begin

PASYNCH: process(CK,RESET)
begin
  if RESET='1' then
    Q <= '0';
  elsif CK'event and CK='1' then 
    Q <= D; 
  end if;
end process;

end ASYNCH;


configuration CFG_FD_ASYNCH of FD is
for ASYNCH
end for;
end CFG_FD_ASYNCH;


configuration CFG_FD_SYNCH of FD is
for SYNCH
end for;
end CFG_FD_SYNCH;

测试台的代码是

entity TBFD is
end TBFD;

architecture TEST of TBFD is

signal  CK:     std_logic :='0';
signal  RESET:      std_logic :='0';
signal  D:      std_logic :='0';
signal  QSYNCH:     std_logic;
signal  QASYNCH:    std_logic;

component FD

Port (  CK: In  std_logic;
    RESET:  In  std_logic;
    D:  In  std_logic;
    Q:  Out std_logic);
end component;

begin 

FD_SYNCH : FD
Port Map ( CK, RESET, D, QSYNCH); 

FD_ASYNCH : FD
Port Map ( CK, RESET, D, QASYNCH); 


RESET <= '0', '1' after 0.6 ns, '0' after 1.1 ns, '1' after 2.2 ns, '0' after 3.2 ns;   


D <= '0', '1' after 0.4 ns, '0' after 1.1 ns, '1' after 1.4 ns, '0' after 1.7 ns, '1' after        1.9 ns;


PCLOCK : process(CK)
begin
    CK <= not(CK) after 0.5 ns; 
end process;

end TEST;

configuration FDTEST of TBFD is
  for TEST

  for FD_SYNCH : FD
     use configuration WORK.CFG_FD_SYNCH; 
  end for;

  for FD_ASYNCH : FD
     use configuration WORK.CFG_FD_ASYNCH; 
  end for;

  end for;
end FDTEST;

问题出在测试台上。同步部分的波形(QSYNCH 信号波)始终等于异步部分的波形(QASYNCH 信号波)。我怎么解决这个问题?

4

2 回答 2

1

在两个 FD 配置中没有绑定指示的情况下,使用的架构将是最后一次分析的——默认绑定。(这表示您的 CFD_FD_ASYNCH 和 CFD_FD_SYNCH,除了满足您的原始 FD_TEST 配置规范之外,它们不提供任何有用的信息)。

这可以作为顶层的替代方案:

configuration FDTEST of TBFD is

  for TEST

      for FD_SYNCH : FD
         use entity work.FD(synch);
      end for;

      for FD_ASYNCH : FD
         use entity work.FD(asynch);
      end for;

  end for;
end FDTEST;

当 FDTEST 是模拟收益率时:

当实体和架构绑定在配置中时异步重置

我错了你的问题

在您评论 QSYNCH 和 QASYNCH 仍然相同(没有任何改变)之后,我仔细查看并发现您的原始配置没有任何问题。

在配置规范 CFG_FD_SYNCH 和 CFG_FD_ASYNCH 中找到的配置声明完全能够声明在它们各自的 FDTEST 配置规范实例中使用的体系结构。

它是合法的 VHDL(您会注意到它没有分析错误)。由于多任务处理时缺乏注意力,我最初将块配置误认为是其他东西。

那就是说您的问题不是配置,而是在其他地方。您的原始配置规范或我演示的配置规范都能够做正确的事情。当您评论说它没有区别并且您显然仍然在两个触发器上获得 QASYNCH 波形结果时,我快速搜索了这是如何发生的。

不幸的是,在我能够正确记录它之前我很忙,但我发现你可以让两个波形都显示 QASYNCH 行为(异步重置)的唯一方法是因为你没有详细说明和模拟配置 FDTEST,而是你正在详细说明和模拟 TBFD (测试台)。

两个触发器输出都显示异步复位行为,因为 ASYNCH 架构是最后分析的,并且您没有模拟详细配置。在这些情况下,配置规范是否存在于工作库中并不重要,您没有使用它们。

这似乎是真正的问题。

详细说明和模拟 TBFD 而不是 FDTEST,您会得到如下所示的波形:

tbfd 显示 QASYNCH 和 QSYNCH 匹配

这应该与您与我们有关的内容相匹配。

使用您的原始代码详细说明和模拟 FDTEST 会给出与上面显示的第一个相同的波形。

您没有指出您正在使用哪个 VHDL 工具,因此很难告诉您如何详细说明和模拟配置 FDTEST。您可能需要手册、备忘单或其他资源来演示如何详细说明配置(这是主要单元)并调用它进行模拟。

于 2014-04-03T19:43:18.987 回答
0

从 D Filp Flop 异步程序的灵敏度列表中删除 RESET 信号。如果在灵敏度列表中添加复位信号,则复位信号的变化对时钟变化很敏感。

于 2014-12-19T08:06:13.887 回答