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信号波)。我怎么解决这个问题?

最佳答案

在两个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,您将得到如下所示的波形:



哪个应该与您与我们有关的内容相符。

使用原始代码精心制作和模拟FDTEST,其波形与上面显示的第一个波形相同。

您尚未指出要使用哪个VHDL工具,因此很难告诉您如何详细说明和模拟FDTEST配置。您可能需要手册,备忘单或其他资料,以演示如何详细说明配置(它是主要单元)并调用它进行仿真。

关于testing - VHDL中的同步/异步D型触发器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22845886/

10-13 02:18