使用ISE合成完整加法器

时间:2017-03-24 16:06:06

标签: vhdl synthesis xilinx-ise

我写了一个简单的全加法器,它使用了2个半加法器和一个OR门。 VHDL代码非常简单

library ieee;
use ieee.std_logic_1164.all;

entity ha is
  port( x: in std_logic;
      y: in std_logic;
      s: out std_logic;
      c: out std_logic);
end;
architecture x of ha is
begin
  s <= x xor y;
  c <= x and y;
end;

library ieee;
use ieee.std_logic_1164.all;

entity fa is
  port( a: in std_logic;  b: in std_logic;  cin: in std_logic;
      sum: out std_logic;  cout: out std_logic);
end;
architecture y of fa is
  component ha port( x: in std_logic; y: in std_logic;
                   s: out std_logic; c: out std_logic);
  end component;
  signal im1, im2, im3: std_logic;
begin
  ha1: ha port map( x=>a, y=>b, s=>im1, c=>im2 );
  ha2: ha port map( x=>im1, y=>cin, s=>sum, c=>im3 );
  cout <= im3 or im2;
end; 

然而,合成器的输出显示有两个XOR门。 OR门和其他半加法器在哪里?

=========================================================================
*                       Advanced HDL Synthesis                          *
=========================================================================
Advanced HDL Synthesis Report

Macro Statistics
# Xors                                                 : 2
1-bit xor2                                            : 2

=========================================================================

此外,FA的RTL原理图是正确的,但是,半加法器的RTL原理图很奇怪! y端口不存在,并且存在数据[1:0]。这是什么意思?

FA

enter image description here

HA:

enter image description here

1 个答案:

答案 0 :(得分:1)

我已经看到Vivado合成器会定期从宏统计中删除内容。宏报告对于FPGA设计并没有多大意义,因为所有逻辑都将被映射到LUT中。在这种情况下,看起来您的基本和/或门不被认为是宏,但是XOR(如原理图中的方框而不是逻辑符号所示)。

就您的半加器原理图而言,这些工具将您的两个单位输入端口组合成一个两位总线。 and门前的三角形在该总线上轻敲以将两个位中的一个拉出。它只是表达同一事物的另一种方式。