您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

利用LeonardoSpectrum综合Xilinx FPGA的VHDL步伐

发布日期:2011-04-20


    摘   要:
 本文总结了利用LeonardoSpectrum综合Xilinx FPGA的VHDL步伐应用,以及在VHDL中利用差别范例RAM的要领。

    关键词:
 LeonardoSpectrum;FPGA;VHDL

    LeonardoSpectrum 是Mentor Graphics公司计划的成果强大的EPLD/FPGA/ASIC综合东西,支持大部分EPLD/FPGA厂商的产品。LeonardoSpectrum支持VHDL、Verilog、EDIF的综合、优化和定时阐发,可以运行在Windows 98/2000/NT/XP和HP、SUN 的UNIX平台上。
    LeonardoSpectrum通过名为exemplar的库,可以在用HDL计划FPGA/EPLD时利用与原理图计划雷同的成果。LeonardoSpectrum对付Xilinx公司的EPLD/FPGA支持尤其美满,使得用HDL的计划在服从和成果上可以和原理图的计划相称。本文总结了利用LeonardoSpectrum进程一些有效的计划要领。

                                                图1 全局时钟利用的map结果

                                                 图2 耽误锁相环利用map结果

                                                 图3 块状RAM的map结果

                                                  图4 散布式RAM的map结果

属性的利用
    在LeonardoSpectrum中,可以在步伐中对信号付与属性来对综合结果举行控制。在利用LeonardoSpectrum综适时,除了LeonardoSpectrum提供的属性外,可以把Xilinx原理图计划中的某些元件作为属性来付与信号,重要限于双端口的元件,比方IBUFG,BUFG等等。LeonardoSpectrum所提供的属性可以参看利用手册。
要是利用LeonardoSpectrum来综合,发起调用exemplar库,以得到更多的成果支持,本文先容的步伐都必要利用exemplar库。下面是对步伐中一个信号通过付与bufg的属性而定义该信号为全局时钟的例子。
......
ARCHITECTURE rtl of bufg IS
SIGNAL    clk :td_logic;
attribute buffer_sig of clk: signal is "bufg";
BEGIN
 clk<=clkin;
 clkout<=clk;
 process(clk)
 begin
if(clk'event and clk='1') then
  end if;
 end process;
END rtl;
    这个步伐选用的芯片是Xilinx的spartanII 系列XC2S50-5QP208,经LeonardoSpectrum综合后,用Xilinx ISE5.1举行map后的结果如图1所示,可以看到利用了1个全局时钟。
元件的引用
    在Xilinx的FPGA/EPLD的原理图计划中必要用到元件库,元件库中包括一些特别成果的元件,比方耽误锁相环(DLL)、全局时钟BUF、边界扫描电路、数字时钟办理器(DCM)、内置SRAM等。LeonardoSpectrum提供的exemplar库中的步伐包使得计划者可以在VHDL步伐中直接引用原理图库中所包括的元件。引用元件时,先调用exemplar库,对要引用的元件根据原理图库中的形貌举行声明。引用元件时可以只利用此中一部分参数,不必对元件全部的参数举行映射。
    下面是引用Xilinx的FPGA的耽误锁相环〔DLL〕的例子。
............
ARCHITECTURE rtl of pll IS
SIGNAL  clk       :std_logic;
component clkdll         --锁相环
port(clkin,clkfb,rst  :in std_logic;clk0,clk90, clk180,clk270,clkdv,locked  :out std_logic);
end component;
BEGIN
CLK1: clkdll port map(clkin=>clkin,clkfb=>clk,rst=>'0', clk0=>clk,clk90=>clkout );
 process(clk)
 begin
if(clk'event and clk='1') then
data_out<=data_in;
end if;
end process;
END rtl;
这个步伐也选用Xilinx的XC2S50-5QP208,经LeonardoSpectrum综合后,用Xilinx ISE5.1举行map后的结果如图2所示,可以看到利用了一个DLL。

RAM的综合
    RAM计划是Xilinx FPGA的一个特色,根据在芯片内的散布环境可以分为散布式RAM和块状RAM,散布式RAM散布在每个LC中,可以将一个LC作为16×1的同步RAM利用,也可以将两个LC连合起来作为16×2、32×1的同步RAM大概16×1的双口RAM利用,块状RAM是专用的散布FPGA边沿的RAM块。RAM利用时又可以作为ROM,单口RAM、双口RAM等。要是是原理图计划,可以在选择元件时选择差别的元件来选择差别范例的RAM,但是对付用形貌语言来举行RAM计划时,就必要综合东西的支持,差别的综合东西,对雷同的语句,大概就综合成差别范例的RAM。LeonardoSpectrum对VHDL的支持到达相称的高度,除了提供属性的要领来利用散布式RAM和块状RAM外,还可以在计划时利用差别的形貌语句来孕育产生散布式RAM和块状RAM。下面是一个综合成块状RAM的例子。
......
ARCHITECTURE rtl of blockram IS
TYPE  RAM IS ARRAY ( 0 TO 127 ) OF STD_LOGIC_VECTOR( 7 DOWNTO 0 );
SIGNAL  testram      :ram;
SIGNAL  cc1,cc2      :std_logic_vector(6 downto 0);
SIGNAL  addr1,addr2   :integer range 0 to 127;
BEGIN
 ......
 process(clkout)     --从RAM中读出数据
 begin
if(clkout'event and clkout='1') then
 data_out<=testram(addr2);
  end if;
 end process;
END rtl;
该步伐也选用Xilinx的XC2S50-5QP208,经LeonardoSpectrum综合后,用Xilinx ISE5.1举行map后的结果如图3所示,可以看到天生了块状RAM。
下面步伐是综称身散布式RAM的例子。
......
ARCHITECTURE rtl of disram IS
TYPE   RAM IS ARRAY ( 0 TO 127 ) OF STD_LOGIC_VECTOR( 7 DOWNTO 0 );
SIGNAL    testram   :ram;
SIGNAL   cc1,cc2   :std_logic_ vector(6 downto 0);
SIGNAL  addr1,addr2   :integer range 0 to 127;
BEGIN
 ......
 process(clkout)    --从RAM中读出数据
 begin  if(clkout'event and clkout='1') then
 if(ramsel='1') then   data_out<=testram(addr2);  end if;  end if;
 end process;
END rtl;
    选用XC2S50-5QP208,经LeonardoSpectrum综合后,用Xilinx ISE5.1举行map后的结果如图4所示,可以看到天生了散布式双口RAM。
比较上面两段步伐,可以看到它们的差别就在于生身散布式RAM的步伐中,数据输出时有一个selram信号,也便是说,要是直接用时钟读出RAM中的数据,就综合成块状RAM;要是是用带使能的方法输出RAM中的数据,就综称身散布式RAM。

结语
    综上所述, LeonardoSpectrum对付用VHDL写的用于Xilinx FPGA的步伐支持黑白常到位的,可以充分利用Xilinx的上风,用语言计划出与原理图计划相称成果的步伐。