equal = not (temp[31] or temp[30] … or temp[1] or temp[0]);
以下是用VHDL实现,并用FPGA实现的方式:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity comparator_32b is
port(
ain: in std_logic_vector(31 downto 0);
bin: in std_logic_vector(31 downto 0);
equal: out std_logic;
great: out std_logic
);
end comparator_32b;
architecture synlogic of comparator_32b is
begin
equal <= '1' when ain = bin else '0';
-- great <= '1' when ain > bin else '0';
end synlogic;
在综合报告中可以知道,它需要21个逻辑资源即LUT;如下图:
描述一下“great <= '1' when ain > bin else '0';”的综合流程?
经过上述描述,我们可以知道FPGA的综合流程,即根据你描述的逻辑功能,将逻辑分成若干个步骤,让它们适用于在LUT中完成,然后为每个LUT生成配置数据,通过连接每个LUT,最终完成逻辑功能。也许你也看得出来,从{ temp[31..0] = ain[31..0] xor bin[31..0] equal = not (temp[31] or temp[30] … or temp[1] or temp[0])}到LUT,虽然它们完成都是相同的功能,但是从它们所耗费的逻辑门有很大的差距,如果直接用逻辑表达式,我们需要31个XOR门,30个OR门,而每个LUT的每个bit等效于4个门,即4门/bit;所以FPGA需要21*16*4个门,从逻辑成本上FPGA无法像ASIC一样大批量的生产,但是FPGA的可配置性,使得它允许你在设计可以有错误,而不像ASIC,流片出来后就无法修改,而每次流片所需要的费用已经达到100万美元(65nm),是中小企业无法承受的费用,如果错误的设计流入市场,所产生的维护费用更是难以估量,例如,Nvidia在第二季度一次性支出1.96亿美元,用来解决用于笔记本电脑的某些型号的上一代MCP(媒体通信处理器)和GPU(图形处理器)产品之“核心与封装材料不足”的问题;从而造就FPGA在很多专业领域的流行。