使用LeonardoSpectrum綜合Xilinx FPGA的VHDL程序
摘 要: 本文總結(jié)了使用LeonardoSpectrum綜合Xilinx FPGA的VHDL程序應(yīng)用,以及在VHDL中使用不同類型RAM的方法。
關(guān)鍵詞: LeonardoSpectrum;FPGA;VHDL
LeonardoSpectrum 是Mentor Graphics公司設(shè)計(jì)的功能強(qiáng)大的EPLD/FPGA/ASIC綜合工具,支持大部分EPLD/FPGA廠商的產(chǎn)品。LeonardoSpectrum支持VHDL、Verilog、EDIF的綜合、優(yōu)化和定時(shí)分析,可以運(yùn)行在Windows 98/2000/NT/XP和HP、SUN 的UNIX平臺(tái)上。
LeonardoSpectrum通過名為exemplar的庫(kù),可以在用HDL設(shè)計(jì)FPGA/EPLD時(shí)使用與原理圖設(shè)計(jì)相同的功能。LeonardoSpectrum對(duì)于Xilinx公司的EPLD/FPGA支持尤其完善,使得用HDL的設(shè)計(jì)在效率和功能上可以和原理圖的設(shè)計(jì)相當(dāng)。本文總結(jié)了使用LeonardoSpectrum過程一些有用的設(shè)計(jì)方法。
圖1 全局時(shí)鐘使用的map結(jié)果
圖2 延遲鎖相環(huán)使用map結(jié)果
圖3 塊狀RAM的map結(jié)果
圖4 分布式RAM的map結(jié)果
屬性的使用
在LeonardoSpectrum中,可以在程序中對(duì)信號(hào)賦予屬性來對(duì)綜合結(jié)果進(jìn)行控制。在使用LeonardoSpectrum綜合時(shí),除了LeonardoSpectrum提供的屬性外,可以把Xilinx原理圖設(shè)計(jì)中的某些元件作為屬性來賦予信號(hào),主要限于雙端口的元件,例如IBUFG,BUFG等等。LeonardoSpectrum所提供的屬性可以參看使用手冊(cè)。
如果使用LeonardoSpectrum來綜合,建議調(diào)用exemplar庫(kù),以獲得更多的功能支持,本文介紹的程序都需要使用exemplar庫(kù)。下面是對(duì)程序中一個(gè)信號(hào)通過賦予bufg的屬性而定義該信號(hào)為全局時(shí)鐘的例子。
......
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;
這個(gè)程序選用的芯片是Xilinx的spartanII 系列XC2S50-5QP208,經(jīng)LeonardoSpectrum綜合后,用Xilinx ISE5.1進(jìn)行map后的結(jié)果如圖1所示,可以看到使用了1個(gè)全局時(shí)鐘。
元件的引用
在Xilinx的FPGA/EPLD的原理圖設(shè)計(jì)中需要用到元件庫(kù),元件庫(kù)中包含一些特殊功能的元件,例如延遲鎖相環(huán)(DLL)、全局時(shí)鐘BUF、邊界掃描電路、數(shù)字時(shí)鐘管理器(DCM)、內(nèi)置SRAM等。LeonardoSpectrum提供的exemplar庫(kù)中的程序包使得設(shè)計(jì)者可以在VHDL程序中直接引用原理圖庫(kù)中所包含的元件。引用元件時(shí),先調(diào)用exemplar庫(kù),對(duì)要引用的元件按照原理圖庫(kù)中的描述進(jìn)行聲明。引用元件時(shí)可以只使用其中一部分參數(shù),不必對(duì)元件所有的參數(shù)進(jìn)行映射。
下面是引用Xilinx的FPGA的延遲鎖相環(huán)〔DLL〕的例子。
............
ARCHITECTURE rtl of pll IS
SIGNAL clk :std_logic;
component clkdll --鎖相環(huán)
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;
這個(gè)程序也選用Xilinx的XC2S50-5QP208,經(jīng)LeonardoSpectrum綜合后,用Xilinx ISE5.1進(jìn)行map后的結(jié)果如圖2所示,可以看到使用了一個(gè)DLL。
RAM的綜合
RAM設(shè)計(jì)是Xilinx FPGA的一個(gè)特色,按照在芯片內(nèi)的分布情況可以分為分布式RAM和塊狀RAM,分布式RAM分布在每個(gè)LC中,可以將一個(gè)LC作為16
評(píng)論