技术架构中的Latch重复(vhdl)

时间:2013-11-06 22:37:14

标签: vhdl xilinx

请注意,这是一个研究问题。

我必须在vhdl中描述一个简单的d-latch,然后合成它。问题是它是一个“一元”d锁存器,它的单个输入直接映射到它的输出(Q和nQ)。你可以把它想象成一个经典的异步d锁存器,其中clk信号总是很高。这在逻辑上是无用的元素,在大多数情况下,xilinx合成器提供了一个空技术模式。但是保留这个元素的原因是,例如,创建硬件“水印”,它出现在模式上,但不影响其逻辑。
我想出了以下代码:

entity dLatch is
  port(
    d: in std_logic;
    q: out std_logic);
end dLatch;

architecture dLatch_beh of dLatch is  
  signal o: std_logic;
begin
  latch: process(d)
  begin
    if d = '1' then
      o <= '1';
    elsif d = '0' then
      o <= '0';
    end if;
  end process;

  q <= o;
end;

此代码生成以下技术架构

link

但是当我尝试添加nQ输出端口时,我获得了重复的锁存器

entity dLatch is
  port(
    d: in std_logic;
    q, nq: out std_logic);
end dLatch;

architecture dLatch_beh of dLatch is  
  signal o: std_logic;
begin
  latch: process(d)
  begin
    if d = '1' then
      o <= '1';
    elsif d = '0' then
      o <= '0';
    end if;
  end process;

  q <= o;
  nq <= not o;
end;

技术架构:link

我不明白,为什么我在这里得到两个完全相同的锁存器。我只期望一个额外的'不'门。 所以我的问题是如何避免重复锁存,或者可能是其他一些方法来解决这个问题。 我使用Xilinx ISE Web Pack 14.6进行综合。

UPD解决方案是将合成器的标志-register_duplication设置为false。

2 个答案:

答案 0 :(得分:0)

你根本没有拿到任何锁扣。您正在查看技术视图,因此它向您展示了它映射到的Xilinx组件。您应首先查看RTL视图。

其次,你的教授可能让你知道,闩锁很糟糕。他甚至在描述中说该视图将是空白的,因为这些工具不会为您生成锁存器。它们不存在于织物中。

答案 1 :(得分:0)

解决方案是将合成器的标志-register_duplication设置为false。