摘 要:本文总结了使用leonardospectrum综合xilinx fpga的vhdl程序应用,以及在vhdl中使用不同类型ram的方法。
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
clkclk,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 );
signaltestram:ram;
signalcc1,cc2:std_logic_vector(6 downto 0);
signaladdr1,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);
signaladdr1,addr2:integer range 0 to 127;
begin
......
process(clkout)--从ram中读出数据
beginif(clkout'event and clkout='1') then
if(ramsel='1') thendata_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的优势,用语言设计出与原理图设计相当功能的程序。
科瑞技术净利增26倍,聚焦新能源电池行业龙头企业
无人机带来农业革命 植保无人机市场前景十分广阔
食品亚硝酸盐快速测定仪介绍
Rust语言为什么这么卷?
三防漆如何在电动汽车以及其他汽车应用中发挥作用
使用LeonardoSpectrum综合Xilinx&nbs
全桥逆变电路的开关管实现
从DS2761升级到DS2762
系统设计调查:ASIC重点
安卓tws行业技术的拐点
电力行业的“晴雨表”
纯蒸汽质量检测仪,蒸汽品质测试系统
化合物半导体光电及功率器件的仿真设计、数理模型与制备
三部委:小于65nm逻辑电路等可免征进口关税
基于Arduino开发板和电磁阀的自动饮水机制作
中芯国际的14nm产线在国际上能否一战
微软:Win10 PC用户中80%已升级到一周年创意者更新版
赛睿发布两款新游戏耳机 响应频率可达40000Hz
计客使用nRF51系列低功耗蓝牙系统级芯片,为其连网的超级魔方i3提供无线连接功能
华为P10和一加3T评测对比:好机一时难分胜负