1、第4章 基于IP Core的设计 4.1 IP模块的种类与应用模块的种类与应用4.2 IP Core的选择与复用的选择与复用4.3 IP Core生成工具简介生成工具简介4.4 常用常用IP Core的设计的设计小结小结习题习题实验项目实验项目4.1 IP模块的种类与应用模块的种类与应用 1硬核硬核(Hard Core)经验证的具有特定电路功能的集成电路版图称为硬核。硬核已完成对性能、尺寸和功耗的优化,并对一个特定的工艺技术进行映射,具有可保证的性能。因此,在系统设计时,硬核只能在整个设计周期中被当成一个完整的库单元处理。硬IP Core可以再使用,且由于它已处于设计表示的最底层,因而最容易集
2、成,容易成功流片。硬IP Core最大的优点是确保性能,如速度、功耗等,但硬核一般不允许更改,硬IP Core难以转移到新工艺或集成到新结构中,它是不可重配置的。2固核固核(Firm Core)带有平面规划信息的网表称为固核。固核也是可重用的IP模块,这些模块已经在结构上和拓扑上对性能和面积通过平面布图和布局进行了优化,可以在一定的工艺技术范围内使用,作为可综合的寄存器传输级(RTL)代码或作为通用库元件的网表文件提供,系统设计者可以根据特殊需要对固核的IP模块进行改动。3.软核软核(Soft Core)软核是以可综合的寄存器传输级(RTL)描述或通用库元件的网表形式提供的可重用的IP模块,这
3、意味着软核的使用者要负责实际的实现和布图软核,它的优势是对工艺技术的适应性很强,应用新的加工工艺或改变芯片加工厂家的时候很少需要对软核进行改动,原来设计好的芯片可以方便地移植到新的工艺中。由于软核设计以高层次表示,因而软IP Core易于重定目标和重配置,然而预测软IP Core的时序、面积与功率诸方面的性能较困难。从完成IP Core设计所花费的代价来讲,硬件宏单元代价最高,从IP Core的使用灵活性来讲,软件宏单元的可重复使用性最高。一个IP Core的价值不单与模块本身的用途和设计复杂性有关,而且与其可重复使用性程度和设计完成的程度有关。将IP Core完成至物理设计,其设计复杂性增加
4、了,但是其可重复使用性却降低了。IP Core除提供形式方面的分类外,还有功能方面的划分。一般IP Core可以分为两大类,即嵌入式IP Core与通用IP模块。嵌入式IP Core指可编程IP模块,主要是CPU与DSP。通用IP模块则包括存储器、存储控制器、通用接口电路、通用功能模块等。IP模块的这种划分通常是基于商业方面的考虑,按业界的一般观点,提供嵌入式IP Core的供应商有比较大的利润空间,而且生存环境较好。嵌入式IP Core除IP Core本身的设计外,还需要有良好的开发环境、软件支持及完善的服务体系,因此其技术门槛相对较高,竞争不是非常激烈。通用IP模块由于开发技术相对比较简单
5、,面临的竞争也比较激烈。通用IP模块的价值依赖于IP Core的技术含量、IP Core的品质和供应商的信誉,基于较新工艺的通用IP Core或包含有专利内容的通用IP Core将有较好的发展前景。对技术要求较高的IP Core,如高速接口、高速锁相环等模块,也将有较强的生命力。存储器IP Core与其它IP Core稍有不同。通常存储器的设计严重依赖于芯片的加工工艺,同时存储器是SOC芯片上最重要的部件,大多数SOC芯片上的存储器会占整个芯片面积的70%,甚至更多,而且芯片的性能将主要由存储器的存取时间决定。存储器IP Core通常由芯片加工厂家提供,而且都以硬IP Core的方式提供,部分
6、厂家还依据特殊工艺提供DRAM IP Core。4.2 IP Core的选择与复用的选择与复用4.2.1 IP Core的选择的选择一个完整的系统设计主要由两部分组成,一部分是核,如MCU、RAM,另一部分是用户自己定义的逻辑电路。按系统设计的要求将这些功能模块连接在一起就完成了芯片的设计,因此,首先是选择合适的核,这主要从核的功能、性能可靠性和实现技术几方面来考虑。硬IP Core与软IP Core在实际应用中各有其优点与缺陷。软IP Core设计比较灵活,可以根据具体的需要对软IP Core的代码进行改动,或软IP Core本身提供许多可以设置的参数,在应用时比较方便。应用软IP Core
7、的缺陷是软核的关键路径的时序性能无保证,最终性能主要取决于使用者采用的综合、布局布线和实现技术,设计完成后需要重新对完成设计的芯片进行功能与时序验证。软IP Core的设计工作量较大,而且设计时间较长。如何选择软IP Core也需要做较多的工作,需要向供应商索取关于IP Core功能验证方面的资料,询问IP Core的应用范围,另外还需要考虑供应商的声誉。应用软IP Core也需要IP Core供应商提供更多的服务。硬IP Core的实现较简单,类似于PCB设计中IC芯片的使用。硬IP Core的优势是IP Core的设计在布局布线后经过了详细的功能优化验证与测试过程,部分IP Core还经过
8、了投片验证与测试,时序性能稳定,所以硬核的功能有非常可靠的保证。一般在设计芯片时,70%的时间都是花费在芯片设计的功能与时序验证上,所以应用硬IP Core进行设计可以显著地节省设计时间。应用硬IP Core进行设计的缺陷是它具有不能修改的结构和布局布线,硬核不能按设计需要修改和调整时序,缺少使用的灵活性。硬核的设计严重依赖于设计时所参照的加工工艺,所以当设计工艺改变的时候硬核的适应性非常差。另外,在应用硬核设计时,通常芯片的面积会较大,因为硬核的版图必须作为模块直接安放在芯片版图中,而基于模块的设计所得到的芯片面积通常比将模块功能分散后进行布局布线得到的芯片面积大。硬核的设计是完全无法更改的
9、,因此其应用范围也受到了一定的限制。软IP Core与硬IP Core并非对立关系,通常供应商会同时提供完成同一种功能的软IP Core和硬IP Core,而后由客户按自己的需要进行选择。在有些情况软IP Core与硬IP Core会结合在一起,例如在一个完整的功能模块中,可能同时存在软IP Core部分与硬IP Core部分,软的部分提供某种程度的可调整性与适应性,而硬的部分可以不用重新验证,可以节省芯片设计时间,避免了软IP Core的某些缺陷。通常在SOC芯片设计中,微处理器与存储器会使用硬IP Core。微处理器的设计比较复杂,对时序的要求比较严格,应用硬IP Core可以排除许多时序
10、错误,同时可以保证处理器的性能。存储器是对芯片性能影响最大的部件,而且其设计严重依赖于设计工艺,所以存储器IP Core通常也作为硬IP Core出现在芯片中。典型SOC芯片中硬IP Core与软IP Core的使用如图4.1所示。图4.1 典型SOC芯片中硬IP Core与软IP Core的使用 在芯片的设计与生产过程中,IP Core的应用及IP Core的供应方式也并非一成不变。通常在芯片设计的初期,除存储器模块为硬IP Core外,大部分的模块可能都是软IP Core。当芯片完成设计,经过功能验证、时序验证与投片测试后,可能有部分IP Core被固化为硬IP Core并被加入到IP库中
11、,然后随着芯片设计的不断改进,被固化的IP Core会越来越多,到芯片大规模生产的时候,可能85%的芯片面积都由硬IP Core占据。当新的加工工艺出现,需要将芯片移植到新的工艺中时,就会出现下一个循环,芯片的设计流程重新开始,大部分的模块为软IP Core,并需要重新进行芯片的各种验证工作。通常在设计芯片时需要考虑工艺的成熟程度,如果加工工艺非常成熟,通常会存在大量的基于此种工艺的硬IP Core资源,而且大部分供应商的产品都已经经过了各种验证,应用硬IP Core设计会节省大量的设计时间,芯片的性能与品质也可以得到很好的保证。根据IP Core使用的方式不同,IP Core设计者还可以按下
12、列三种形式设计供集成选择的IP Core:可再用、可重定目标以及可配置。可再用IP Core是着眼于按各种再使用标准定义的格式和快速集成的要求而建立的,便于移植,更重要的是有效集成;可重定目标IP Core是在充分高的抽象级上设计的,因而可以方便地在各种工艺与结构之间转移;可配置IP Core是参数化后的可重定目标IP Core,其优点是可以对功能加以裁剪以符合特定的应用,这些参数包括总线宽度、存储器容量、使能或禁止功能块。4.2.2 IP Core的复用的复用IP Core的复用是设计人员赢得迅速上市时间的主要策略。系统设计者的主要任务是在规定的周期时间内研发出复杂的设计,IP Core的复
13、用已经成为系统设计方法的关键所在。“复用”(re-use)指的是在设计新产品时采用已有的各种功能模块,即使进行修改也是非常有限的,这样可以减少设计的人力和风险,缩短设计周期,确保优良品质。但伴随着IP Core的推广和使用,也出现了一系列亟须解决的问题。对于每个集成电路设计师来说,每天所能处理的工作量却无法有很大的提高,如果按每天处理100 门电路来计算,一个人设计百万门的电路将耗费掉数百年的时间。而且随着芯片集成度的提高,芯片的复杂程度也相应地提高,在单芯片上可能需要集成各种不同功能的电路,如图像处理、加密电路、接口电路、模拟电路等。设计芯片所需要的技术种类比较繁杂,而且必须适用于各种严格的
14、工业标准。对于单个的设计公司来说,掌握这些不同领域的技术很困难。因此,首先IP Core供应商需要提供怎样的文件,才能使IP Core用户能够方便、准确地进行IP Core选择;其次是IP Core的使用者并不熟悉IP Core结构,如何才能快速对其进行修改以适应设计者的需要(对软IP Core);第三,由于SOC各模块间的通讯并没有一个统一的标准,造成IP Core集成的困难,如何解决IP Core的接口标准问题。另外,需要研究如何重复使用过去的设计模块,如何使新的设计能够具有可重复使用性、可重复综合性、可重复集成性以及如何进行系统级验证;第四,IP Core种类很多,如何建立一个相对客观的
15、IP Core评价体系,实现对IP Core质量的评估;第五,如何进行IP Core的验证;第六,IP Core使用的最大障碍之一是IP Core的知识产权保护,如何有效地建立起IP Core的保护体系。这一系列问题的出现,最终导致了IP Core标准的产生及相关国际组织的出现。由于IP Core已成为芯片设计的一项重要内容,因此业界成立了不同的组织以推动设计复用标准的发展,他们的目标是开发一套业界标准,促进IP Core的使用并简化外部IP Core与内部设计之间的接口。1996年9月虚拟接口联盟(VSIA)成立,该联盟的成立是为了推动多个来源IP内核之间的“混合搭配”而制订开放标准,从而加
16、速SOC开发。该联盟的会员由业界各系统公司、半导体公司、IP Core公司和EDA公司组成。Synopsys公司和Mentor Graphics公司合作开展了著名的OpenMORE(Open Measure of Reuse Excellence)计划,这是建立在两家公司共同发起的“复用方法指南”基础上的一项评估计划。一些开发和销售IP Core的公司于1996年成立了可复用特定应用知识产权开发协会(RAPID)。国际上为IP/SOC制定标准的主要组织/联盟有IEEE国际标准化组织VSIA、OCP-IP和SPIRIT,专门从事核或称IP Core模块的互连标准研究,使核的使用就像在印制板上使用
17、集成电路块一样方便。这三个联盟的目的都是要使设计人员更容易地进行IP Core的集成,但他们的工作并不重叠,而是高度互补的。VSIA为IP Core的交付、转让、质量评估以及保护制定了较全面的标准,起到不可替代的作用;OCP-IP致力于IP Core接口及片上互连标准的开发,为IP Core的即插即用作出了贡献;SPIRIT致力于IP Core集成的自动化。4.3 IP Core生成工具简介生成工具简介Core Generator是基于Xilinx FPGA的IP Core开发工具,是Xilinx FPGA设计ISE开发软件中的一个重要的设计输入工具,它提供了大量成熟、高效的IP Core为用
18、户所用。Core Generator可生成的IP Core大致分为十大功能模块:基本模块、通信与网络模块、数字信号处理模块、存储器模块、微处理器模块、控制器与外设模块、标准与协议模块、语音处理模块、标准总线模块、视频与图像处理模块等,这些功能涵盖了从基本设计单元到复杂功能样机的众多成熟设计,而且每次ISE的升级补丁中都会有IP Core的升级,另外用户可以通过Xilinx的IP Core中心查询更多的IP Core信息。如果用户设计只是针对FPGA应用的,使用IP Core能避免重复设计,缩短工程时间,提高工作效率。Core Generator是根据Xilinx的FPGA器件特点和结构而设计的
19、,直接用Xilinx FPGA底层硬件语言描述,充分发挥了FPGA的功能,其实现结果在面积和速度上都令人满意。图4.2所示为Core Generator的操作界面。图4.2 Core Generator的操作界面 1.菜单栏菜单栏菜单栏由一系列下拉菜单组成,这些菜单涵盖了IP Core生成器的所有命令,下面介绍三个常用菜单。(1)【File】菜单:包括新建工程(New Project)、打开工程(Open Project)、关闭工程(Close Project)、保存工程(Save Project)、导入XCO文件(Import XCO File)等命令。另外用户可以用【Preferences
20、】命令指定PDF浏览器与网络浏览器的位置,并设置代理服务器等互联方式。(2)【Tools】菜单:包括存储编辑器(Memory Editor)和查找IP索引表(Search IP List)。其中,存储编辑器是设计存储器的初始化文件(扩展名为.coe),查找IP索引表是通过键入IP Core的名字查找相应的IP Core。(3)【Help】菜单:包含的命令有Core Generator 帮助(Core Generator Help)、网络帮助(Xilinx on the Web)和软件手册(Software Manuuals)等。3.IP Core的显示的显示IP Core有三种显示方式:(1)
21、按功能查看IP Core:在这种模式下,按照功能显示Core Generator的模块。(2)按名字查看IP Core:在这种模式下,IP Core按照字母排列的顺序显示所有的IP Core。在查询栏里输入用户所需IP Core的名称,则对应的IP Core就被找出。(3)查看已经生成的IP Core:在这种模式下,IP Core分类目录栏显示了当前工程已生成的IP Core的基本信息,包括IP Core模块名称、IP Core名称、版本号、器件族供应商和生成日期。4.操作信息显示栏操作信息显示栏该栏显示了IP Core生成器和用户之间的交互信息,如工程的报警、错误等基本信息。5.所选所选IP
22、 Core 信息栏信息栏该栏显示了所选IP Core的一些基本信息,包括该IP Core的简介和其所支持的器件族等。6.IP Core 分类目录栏分类目录栏 该栏根据IP Core的三种显示方式完成对应的IP Core显示。4.4 常用常用IP Core的设计的设计4.4.1 可逆计数器的设计可逆计数器的设计计数器在FPGA的设计中用得十分广泛,这里以四位可逆二进制计数器为例对其IP Core设计予以介绍。1.基于基于Core Generator的工程的创建与管理的工程的创建与管理IP Core生成器的启动方法有两种,一种是在【Projcet Navigator】中新建Coregen IP类型
23、的资源(请参考第2章中工程的建立与管理);另一种是直接在Windows界面下运行【开始】【程序】【Xilinx ISE Design Suit 10.1】【ISE】【Accessories】【CORE Generator】命令。这里采用第二种方式,选择的器件族为Spartan-3E,器件为XC3S500E,封装类型为4FG320C(后面的IP所选的器件与此相同),然后打开如图4.3 所示窗口。图4.3 选择IP Core源文件向导 2.IP Core的参数设计与生成的参数设计与生成正确设置工程的属性后就可以根据需要选择合适的IP Core。在图4.3的功能栏中,选择【Basic Element
24、s】【Counters】【Binary Counter v8.0】,右键单击【Binary Counter v8.0】或者在右边的信息栏中选择例化该IP Core(Customize)选项。单击【Customize】或者双击【Binary Counter v8.0】,打开该IP Core的参数设置窗口的第1页,如图4.4所示。这里需要从以下几个方面对该IP Core进行设置。(1)IP Core的名字(Component Name):每个IP Core都必须给其定义一个名字。(2)输出数据宽度选择(Width Options):可选宽度为230位。(3)计数限制选择(Count Restric
25、tions):可分为计数步长选择和计数终值选择。计数步长选择(Step Value):可选步长为12数据宽度-1。计数终值选择(Final Count Value):可选范围为02数据宽度-2。(4)计数模式选择(Count Mode):这里有加计数(UP)、减计数(DOWN)和可逆计数(UP/DOWN)三种方式。图4.4 四位可逆二进制计数器IP Core的参数设置页面1 单击 按钮,进入第2页的参数设置,如图4.5所示,其中全部为寄存器的设置:(1)异步设置(Asynchronous Settings):包括异步置位(Set)、异步清零(Clear)以及初始化设置(Init),通过初始化可
26、以异步地设置寄存器的初始值。(2)同步设置(Synchronous Settings):与异步设置类似。(3)时钟使能(Clock Enable):在使能信号为高电平时输入的时钟信号才是有效的。图4.5 四位可逆二进制计数器IP Core的参数设置页面2 单击按钮,进入第3页的参数设置,如图4.6所示。(1)置数可选项(Load Options):可以通过输入端口置入计算的初始值。(2)门槛可选项(Threshold Options):包括异步门槛值设置(Asynchronous Threshold Output)、同步门槛值设置(Synchronous Threshold Output)和时
27、钟初期门槛设置(Cycle Early Threshold Output)。当计数值与所设门槛值相等时,其输出为高电平。此例中参数按图4.4、图4.5和图4.6界面进行设置,参数设置完成后,单击按钮,就生成了按照所设参数要求的IP Core。图4.6 四位可逆二进制计数器IP Core的参数设置页面3 3.IP Core的仿真的仿真在【Project Navigator】里,打开该IP Core。如果是初次使用,还需要对ISE所带的库文件进行编译。编译成功后,选择【Project】【New source】【Schemtic】,在原理图中就可以用原理图方式调用该IP Core,完成该IP Cor
28、e的端口设置,产生后缀名为.sch的头文件。加入波形测试向量。选择【Project】【New Source】【Test Bench Waveform】,在接下来的选项中,将该波形测试文件与后缀名为.sch的头文件相映射,就产生了波形测试向量。然后调用仿真软件ModelSim对其进行仿真,其仿真波形及关键信号的说明如图4.7所示。图4.7 四位可逆二进制计数器IP Core的仿真波形与关键信号的说明 4.4.2 存储器的设计存储器的设计 1.双口双口RAM的设计的设计RAM有三种模式,分别是单端口RAM、简单双端口RAM以及真正双端口RAM。这里以真正双端口RAM为例介绍RAM模式。双端口RAM
29、模型如图4.8所示,图中上边的端口A和下边的端口B都支持读写操作,WEA、WEB信号为高电平时进行写操作,低电平为读操作。同时它支持两个端口读、写操作的任何组合:两个端口同时读操作、两个端口同时写操作或者在两个不同的时钟下一个端口执行写操作,另一个端口执行读操作。两个端口的宽度可以有多种定义,可以是同宽度,也可以是不同宽度的,这样的结构给设计者带来了方便。双端口RAM的引出端定义如表4.1 所示。图4.8 双端口RAM的模型 下面详细介绍双口RAM的IP Core的设计以及仿真。1)IP Core的参数设计与生成在Xilinx Core Generator中,选择【MEMORIES&Stora
30、ge Elements】【RAMs&ROMs】,可看到五个存储模块,其中灰色的项目表示由于所选器件族不支持此IP Core,所以该IP Core在当前工程不可用。这里选择在Spartan-3E器件族可以使用的【Dual Port Block Memory 6.3】。双击【Dual Port Block Memory 6.3】,打开该IP Core的参数设置窗口的第1页,如图4.9所示,需要对该IP Core的名字以及端口A、B等基本参数进行设置。图4.9 双口RAM的参数设置页面1(1)存储容量(Memory Size):包括端口A和端口B。端口A包括:数据端口深度(Width):可以选择数据
31、端口A的宽度,宽度范围为1256位。地址端口A深度(Depth):可以选择存储器的字节数,由于存储容量为4 MB,故数据宽度为3位,则存储器的字节数范围为2 B1 MB。端口B包括:数据端口深度(Width):可以选择数据端口B的宽度,其宽度取决于定义的数据端口A的宽度。不同的器件系列其宽度不同,这里为数据端口A的宽度的1、2、4倍。地址端口B深度(Depth):定义了端口A宽度、深度以及端口B宽度后,端口B的深度值将为定值。根据端口 A和B定义的存储器的大小必须相等可以计算出端口B的深度。(2)端口A/B可选项(Port A/B Options)包括:配置选项(Configuration):
32、可以选择的有读写(Read and Write)、只写(Write Only)以及只读(Read Only)模式。写模式(Write mode):可以选择的有读后写(Read After Write)、读前写(Read Before Write)以及只写不读(NO Read On Write)模式。Read After Write模式:在该模式下,同时读写BlockRAM的同一地址,读出的数据与当前写入的数据相同,其时序如图4.10所示。图4.10 Read After Write模式时序 Read Before Write模式:在该模式下,存储器中当前地址上的数据被传送到输出端口,其时序如图
33、4.11所示。NO Read On Write模式:在该模式下,同时读写BlockRAM的同一地址时,读出的数据将在数据写入时保持不变。图4.11 Read Before Write模式时序(3)端口A、B设计可选项(Port A/B Design Options)包括:引脚可选项(Options Pins):引脚使能端(Enabled Pin):含义如表4.1所示。握手信号引脚端(Handshaking Pins):包括ND、RFD、RDY信号,它们的含义如表4.1所示。图4.12 双口RAM的参数设置页面2 输入寄存器可选项(Register Inputs):可以为输入端口DIN、ADDR
34、和WE添加输入寄存器,若添加了寄存器,则数据在这些端口的第2个时钟的上升沿输入到该模块内部。输出寄存器可选项(Output Register Options):包括以下两个选项:附加的输出流水阶段(Additional Output Pipe Stages):选择“1”可以为输出端口再增加一级寄存器,选择“0”不加寄存器。初始化(SINIT Pin),其含义如表4.1 所示。引脚极性(Pin Polarity):使用者可以为引出端进行极性配置,包括时钟选择上升沿还是下降沿、高电平还是低电平使能。单击按钮,进入第4页的参数设置界面,如图4.13 所示。图4.13 双口RAM的其它参数设置页面4(
35、4)仿真模式可选项(Simulation Model Options):对警告信息的使能选择。(5)初始化设置(Initial Contents):可以设置配置后存储器中的初始值。全局初始化值(Global Init Value):定义了配置后存储器中的初始值,缺省值为“0”。加载初始化文件(Load Init File):存储器中的初始值可以保存在一个.coe的文件中,加载这个文件可以使存储器在配置后,各个单元的初始值为文件中所列出的值。对于.coe的文件,可以通过Memory Editor生成,下面为其生成方法:打开Xilinx Core Generator,选择【Tools】【Memor
36、y Editor】,进入Memory Editor编辑界面,如图4.14 所示。图 4.14 Memory Editor编辑界面 单击 按钮,然后键入“d_ram”,设置好双端口RAM的各个参数,并且在初始值输入区(Memory Contents)写入相关数据。选择【File】【Generate】,生成.coe文件,如图4.15 所示。图4.15 .coe文件的生成 2)IP Core的仿真双口RAM的参数设置分别如图4.9、图4.12、图4.13所示,其仿真波形与说明如图4.16所示。图4.16 双端口RAM的仿真波形与说明 2.ROM的设计的设计FPGA中的块RAM(BlockRAM)也可
37、以配置成ROM。使用存储器初始化文件(.coe)对ROM进行初始化,在加电后使其内部的内容保持不变,即实现了ROM功能。ROM的设计主要是生成相应的.coe文件,.coe文件的产生可以用Memory Editor直接输入相应的数据(见双端口BlockRAM中的相关说明),也可以用MATLAB/C+中的函数方便地生成数据。这里以一个正弦信号为例介绍如何借助MATLAB生成ROM的.coe文件。(1)用MATLAB计算出正弦波形的浮点值,并量化8比特的定点波形数值。打开MATLAB,编写如下程序:在02内等间隔取256个点:x=linspace(0,6.28,256);计算幅度为1的采样点的正弦函
38、数的正弦值:y=sin(x);由于数值为8 bit,需要将数据放大然后取整:y=y*256;将文件存盘,并量化成8 bit:f=fopen(f:/sin.txt,wt);fprintf(f,%8.0fn,y);fclose(f)(2)生成.coe文件。在F盘根目录下,将sin.txt的后缀改成.coe,打开文件,并在最后一行添加一个分号“;”,然后在文件的最开始添加下面两行:memory_initialization_radix=10;memory_initialization_vector=上面两行是对所存贮数据的进制以及相关初始值的说明,然后保存文件退出。(3)将.coe文件加载到所生成的
39、ROM中。单击【Memories&Storage Elements】【RAMs&ROMS】【Block Memory Generator v2.7】,新建一个BlockRAM的IP Core。IP Core的参数设置。打开该IP Core的参数设置界面,单击按钮翻页,在第1页选择单口ROM(Single Port Rom),在第2页选择数据位宽为8,数据深度为256,在第3页载入初始化的.coe文件,如图4.17所示。图4.17 ROM初始化文件的载入 在存储器初始化(Memory Initialization)栏中的载入初始化文件(Load Init File)单选框中打“”,然后单击 按钮
40、,找到存储初始化文件的路径,选择初始化文件完成载入。3.FIFO的设计的设计FIFO即数据先入先出。在FIFO IP Core的具体实现中,数据存储的部分是采用简单双端口模式操作的,一个端口只写数据而另一个端口只读数据,另外在RAM(块RAM和分布式RAM)周围加一些控制电路来输出指示信息。FIFO IP Core常用引出端的定义如表4.2所示。下面是FIFO的IP Core设计。先选择IP Core的类型以及型号,选择【Memories&Storage Elements】【FIFOs】【Fifo Generator v4.3】,打开FIFO的参数设置页面,如图4.18所示。图4.18 FIF
41、O的参数设置页面1(1)FIFO的参数设置。图4.19 FIFO的参数设置页面2(2)读模式(Read Mode)包括以下两种模式:标准模式(Standard FIFO):在该模式下,FIFO复位后,写入的第一个数据会进入存储单元中,但输出缓冲器为空。只有进行第二次读操作时,才会读取有效数据。首字直接传送模式(Fist-Word Fall-Through):该模式在复位后第一次写操作时,写入的数据会同时送往内部存储单元和输出缓冲区。当执行读操作时,读取的数据就是有效数据。(3)嵌入式FIFO可选项(Built-in FIFO Options)包括以下两个设置项:读时钟频率设置(Read Clo
42、ck Frequency):可设置范围为1 MHz1000 MHz。写时钟频率设置(Write Clock Frequency):可设置范围为1 MHz1000 MHz。(4)数据端口参数(Data Port Parameters)包括以下四个设置项:数据写入宽度(Write Width):可设置范围为1256位。数据写入深度(Write Depth),可设置范围为24222。数据读出宽度、深度的设置范围与写入的相同。(5)实现可选项(Implemetation Options)包括以下两个选项:ECC使能(Enable ECC):只有Virtex-5系列的公共及独立时钟的RAM与嵌入式FIF
43、O支持该选项。在BRAM或FIFO中使用嵌入式寄存器。点击 按钮,进入参数设置页面3,如图4.20所示。图4.20 FIFO的参数设置页面3(6)标志位可选项(Optional Flags)包括以下两个选项:几乎满标志(Almost Full Flag):只差一个数据就写满的标志。几乎空标志(Almost Empty Flag):只差一个数据就读空的标志。(7)握手可选项(Handshaking Options)包括以下两种设置:写端口握手可选项(Write Acknowledge):包括写握手标志与溢出标志。其中写握手标志表示当前数据成功地写入了存储单元;溢出标志表示写入了超过存储容量的数据
44、,该数据溢出,该端口可以设置为高电平或者低电平输出。读端口握手可选项(Read Acknowledge):与写端口相似,包括读握手标志和下溢标志。点击按钮,进入参数设置页面4,如图4.21所示。图4.21 FIFO的参数设置页面4(8)初始化设置(Initiazation)。复位引脚(Reset Pin):包括同步和异步复位设置,可以设置为高电平或者低电平有效。使用输出复位值(Use Dout Reset)。(9)可编程标志(Programmable Flags)包括以下几个设置:可编程的满类型(Programmable Full Type)包括以下几个选项:无可编程的满阈值(No Progr
45、ammable Full Threshold):不能设置满标志。单路的可编程满握手常数(Single Programmable Full Threshold Constant):编程设置满标志的数值,当到了该数值时,对应的端口输出为1。多路的可编程满握手常数(Multiple Programmable Full Threshold Constants):分别可以设置正值与负值。单路的可编程满握手输入端口(Single Programmable Full Threshold input port):从外部端口输入“满”标志的数值。多路的可编程满握手输入端口(Multiple Programmab
46、le Full Threshold Input Ports):与前类似。满握手正值设置(Full Threshold Assert Value):当FIFO成功写入的数据大于或等于所设置值时,输出高电平。满握手负值设置(Full Threshold Negate Value):当FIFO中所存数据小于或等于所设置值时,输出低电平。可编程的“空”标志以及相关设置与“满”标志类似。点击 按钮,依次进入FIFO的参数设置页面5和页面6。参数设置页面5为FIFO的数据个数设置选项,通过该输出端口,设计者可知道存储单元存储的数据个数。参数设置页面6是对该IP Core的选择情况的一个说明。IP Core
47、参数的设置如图4.18图4.21所示,仿真波形图和说明如图4.22所示。图4.22 FIFO的仿真波形和说明 4.4.3 时钟的设计时钟的设计1全局时钟网络全局时钟网络在FPGA设计中,时钟的设计和使用至关重要。在Xilinx系列FPGA产品中,全局时钟网络是一种全局布线资源,它可以保证时钟信号到达各个目标逻辑单元的时延基本相同。针对不同类型的器件,Xilinx公司提供的全局时钟网络在数量、性能等方面都有区别,这里以Spartan-3E系列器件为例,介绍全局时钟网络的特性和用法。图4.23 所示为Spartan-3E系列器件全局时钟网络分布示意图,其中16个全局时钟输入位于芯片的上部与下部,8
48、个右半平面时钟输入位于芯片的右侧,8个左半平面时钟输入位于芯片的左侧。时钟选择器的输出可以连到同一侧垂直连线上,还可以连到同一侧任何一个数字时钟管理器DCM(Digital Clock Manager)模块的输入上。DCM当中包含一个延迟锁定电路DLL(Delay-Locked Loop),可以提供对时钟信号的二倍频和分频功能,并且能够维持各输出时钟之间的相位关系,即零时钟偏差。图4.23 Spartan-3E系列器件全局时钟网络分布示意图 全局时钟通过将时钟选择器或者全局时钟缓冲器放置在设计中以减少动态功耗,Xilinx的软件自动禁用那些没有用到的时钟线。其中时钟缓冲多路选择器不仅驱动输入时
49、钟信号直接到达内部缓冲器,而且提供了转换两个互不相关时钟信号的多路选择器。在Spartan-3E系列器件中,全局时钟网络最简单的用法是将时钟信号与全局时钟网络直接相连,从而保证时钟信号到达各逻辑单元的时延基本相同,如图4.24所示。在图4.24(a)中,全局时钟信号(GCLK)通过时钟输入引脚端(PAD)输入,经过输入缓冲器IBUFG和内部缓冲器BUFG到达时钟分布网络,保证有足够的驱动能力。在图4.24(b)中,差分全局时钟信号(GCLKS和GCLKP)通过差分时钟输入端输入,经过输入缓冲器(IBUFGDS)和内部缓冲器(BUFG)到达时钟分布网络。在图4.24(c)中,全局时钟信号(GCL
50、K)通过时钟输入引脚端(PAD)输入,经过输入缓冲器(IBUFG)和数字时钟管理器(DCM),DCM作处理提供统一的同步时钟,通过内部缓冲器(BUFG)到达时钟分布网络。图4.24 Spartan-3E系列器件中全局时钟网络应用示意图(a)单端输入(b)差分输入(c)经DCM输出 2.数字时钟管理器数字时钟管理器(DCM)DCM是Xilinx公司在其产品中采用的时钟管理机制。DCM的主要功能包括消除时钟时延、频率综合和时钟相位调整。在Spartan-3E系列器件中,DCM可以工作在高频或低频模式,其关键参数包括输入时钟频率范围、输出时钟频率范围、输入时钟允许抖动范围、输出时钟允许抖动范围等。图