请注意,这是一个研究问题。
我必须在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;
此代码生成以下技术架构
但是当我尝试添加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。
答案 0 :(得分:0)
你根本没有拿到任何锁扣。您正在查看技术视图,因此它向您展示了它映射到的Xilinx组件。您应首先查看RTL视图。
其次,你的教授可能让你知道,闩锁很糟糕。他甚至在描述中说该视图将是空白的,因为这些工具不会为您生成锁存器。它们不存在于织物中。
答案 1 :(得分:0)
解决方案是将合成器的标志-register_duplication设置为false。