VHDL高级使用技巧

更新时间:2024-06-30 20:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《EDA技术与实际教程》课程研究论文

VHDL语言的高级使用技巧

论文作者姓名: 王帅

作 者 学 号: 2009237050

所 在 学 院: 物理学院

所 学 专 业: 通信工程

教 师 姓 名: 梁勇 论文完成时间:2012年06月10 日

目 录

摘 要: ............................................................................................ 3 一 绪论……………………………………………………………..3 1.1 研究IP核的意义................................................................. 3 1.2 IP核的国内现状............................................................... 3 二 VHDL语言概述………………………………………….……..4 2.1 VHDL简述………………………………….………………..4 2.2 VHDL语言特点 ...................................................................... 4 2.3 VHDL语言优势 ...................................................................... 5 2.4 VHDL电路设计 ...................................................................... 6 2.5 VHDL语言与C语言的区别………………………………...7 三 VHDL语言结构分析 ................................................................ 7 3.1 VHDL语言设计的基本单元及构成 .......................................... 7 3.2 VHDL语言的数据类型与运算操作符 .................................... 10 3.3 VHDL语言的主要描述语句..........................13 四 VHDL语言高级使用技巧—IP核………………………..…13 4.1 IP核的简介.....................................13 4.2 IP核的分类.....................................13 4.3 IP核的生成.....................................14 4.4 IP核的应用.....................................15 五 结论.............................................18 参考文献…………………………………………………………..18

摘要

本课题先介绍VHDL语言的,然后主要研究了VHDL语言中IP核的简介、分类、生成、应用,目的是让同学们对IP核有深入的了解与应用。由于集成电路发展到超大规模阶段后,芯片中凝聚的知识已经高度浓缩。专有知识产权的IP核设计及其再利用是保证SoC开发效率和质最的重要手段。 随着CPLD/FPGA的规模越来越大,设计越来越复杂,IP核是必然的发展趋势。IP核的研究,在国内外引起高度的重视。希望通过本次课题,让同学了解掌握IP核的使用。

关键词:VHDL语言 高级使用技巧 IP核

第一章 绪论

1.1 研究IP核的意义

IP核(Intellectual Property core)是一段具有特定电路功能的硬件描述语言程序,该程序与集成电路工艺无关,可以移植到不同的半导体工艺中去生产集成电路芯片。

IP(知识产权)核将一些在数字电路中常用,但比较复杂的功能块,如FIR滤波器、SDRAM控制器、PCI接口等设计成可修改参数的模块。IP核的重用是设计人员赢得迅速上市时间的主要策略。随着CPLD/FPGA的规模越来越大,设计越来越复杂(IC的复杂度以每年55%的速率递增,而设计能力每年仅提高21%),设计者的主要任务是在规定的时间周期内完成复杂的设计。调用IP核能避免重复劳动,大大减轻工程师的负担,因此使用IP核是一个发展趋势。

1.2 国内现状

新华网上海9月6日电(记者叶国标)从\中国制造\到\中国创造\,随着中国企业自主创新能力的增强,催生了一批完全拥有自主知识产权的\中国芯\,如:方舟、龙芯、爱国者、星光、网芯、展讯等。中国不再仅仅是芯片消费大国,而且开始成为芯片生产大国。

俞忠钰认为,尽管中国芯片产业实现了飞跃,但与国际芯片生产强国相比,差距依然悬殊,主要表现在:产业规模虽然迅速扩大,但依然赶不上整个信息产业的发展步伐。2003年,中国芯片产业产值360亿元,在信息产业1.8万亿元的总产值中仅占2%,国内市场占有率不到20%;自主创新能力还较薄弱,尚未掌握核心技术和设备,芯片制造的关键设备、IP核、关键原材料等还需依

靠进口;产业链上下游各环节的联动还不协调,芯片与整机间的互动发展迫在眉睫;以及缺乏具有国际竞争力的品牌产品和优势企业,整个产业尚处于发展期,还需国家大力扶植。

第二章 VHDL语言概述

2.1 VHDL简述

Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE-1076(简称87版)之后,各EDA公司相继推出自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,简称93版。VHDL和Verilog作为IEEE的工业标准硬件描述语言,得到众多EDA公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。 VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

2.2VHDL特点

与其他硬件描述语言相比,VHDL具有以下特点: 1.功能强大 设计灵活

VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。 2.支持广泛 易于修改

由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在

硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。 3.强大的系统硬件描述能力

VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。

4.独立于器件的设计 与工艺无关

设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。 5.很强的移植能力

VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。 6.易于共享和复用

VHDL采用基于库(Library)的设计方法,可以建立各种可

再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计

2.3VHDL优势

1与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 2VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

3VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

4对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

5VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

2.4VHDL电路设计

2.4.1设计电路优点

1.系统可大量采用芯片 2.采用系统前期仿真

3.降低了硬件电路设计难度.

2.4.2 设计电路方法

VHDL语言是一种可以描述硬件电路的功能,信号连接关系和定时关系的语言。利用硬件描述语言编程来表示逻辑器件与系统硬件的功能和行为,是该设计方法的一个重要特征。

采用自上而下(Top Down)的设计方法,就是从系统的总体要求出发,自上而下地逐步将设计内容细化,最后完成系统硬件的总体设计。

2.4.3 设计电路层次

第一层次是行为描述。实质上就是对整个系统的数学模型的描述(抽象程度高)。

第二层次是RTL方式描述,又称寄存器传输描述(数据流描述),以实现逻辑综合。

第三层次是逻辑综合,就是利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。在门电路级上再进行仿真,并检查定时关系。

2.4.4 完成硬件设计后的选择

1.由自动布线程序将网络表转换成相应的ASIC芯片制造工艺,作出ASIC芯片。

2.将网络表转换成FPGA编程代码,利用FPGA器件完成硬件电路设计。

2.4.5设计电路流程

规格设计 行为级描述 行为级仿真 RTL级描述

RTL级仿真 逻辑综合优化 门级仿真 定时检查 输出门级网表

2.5 VHDL与C语言的区别

VHDL,是硬件描述性语言。C语言,是软件编程语言。

从语言的基本语法方面来看,两种语言,有很多共同点。什么变量、

顺序、循环等语法方面都很多相同的地方。但是,如果你用C语言开发的思想来考虑VHDL语言的开发,就会报很多错。

VHDL的开发,不单单是软件的开发,它其实是硬件电路图的开发。

只不过它的实现方式是用软件,而不是硬件实物。在用VHDL语言开发的时候,脑子里要有一张电路图。而在一个process里面,只能有一个rising_edge。在多个process的通信中,同一个signal,不能同时做多个process里面的输出信号输入信号。(如果把process的处理想像成电路接线,你就会发现为什么会这样了。)

第三章 VHDL结构分析

3.1 VHDL语言设计的基本单元及其构成

一个完整的VHDL语言程序通常包含实体、构造体、配置、包集合和库。 实体 用于描述所设计的系统的外部接口信号;

构造体 用于描述系统内部的结构和行为;

包集合 存放各设计模块都能共享的数据类型、常数和子程序库; 配置 用于从库中选取所需单元来组成系统设计的不同版本; 库 存放已经编译的实体、构造体、包集合和配置。

3.1.1 实体

规定此实体输入与输出的数目与类型。 1.结构:

entity 实体名 is

[generic(类属参数说明)]; [port(端口说明)];

end 实体名; 2.类属参数说明:

generic (

常数名:数据类型 :=数值); 在端口说明前,用于指定参数。 3.端口说明:

在entity语句的实体说明部分,常用port语句描述实体对外界连接的端口(数目、方向和数据类型)。

port (

端口名:端口方向 端口数据类型; .

. .

端口名:端口方向 端口数据类型; );

4.端口方向:

in (输入),只能读,用于:时钟输入、控制输入(装入、复位、使能)、单向数据输入;

out (输出),只能被赋值,用于不能反馈的输出;

inout(输入输出) ,既可读又可被赋值,被读的值是端口输入值而不是被赋值,作为双向端口。 buffer(缓冲),类似于输出,但可以读,读的值是被赋值,用做内部反馈用,不能作为双向端口使用。

3.1.2 构造体

构造体定义实体功能的一种实现。 1.构造体的结构:

architecture 构造体名 of 实体名 is {块说明项} begin

{并发语句} end 构造体名;

块说明项(或定义语句),位于architecture 和begin之间,对构造体内部的使用信号、常数、数据类型和函数进行说明,包括:

1.使用语句 2.子程序说明 3.子程序体 4.类型说明 5.子类型说明 6.常数说明 7.信号说明 8.元件说明

并行语句处于begin 与end之间,描述构造体的行为与连接关系。 2.构造体的描述方法:

行为描述(按算法的路径来描述);

数据流描述或RTL描述(采用寄存器传输描述); 结构化描述(采用例化元件) 例化(instantiation ):在高层次的设计中调用低层次的实体作为元

件的过程。

3.1.3 包集合

包集合用于封装属于多个设计单元分享的公共信息。

包集合由包说明(说明数据类型、子程序和常量等)和包体(它

含有子程序体与现有的延时常数)所组成。子程序由执行公共操作的过程和函数组成。包集合是分享属于实体数据的一种机制,把子程序、数据类型和元件说明看成建立设计的工具,则包集合可看成工具箱。 包集合的结构:

package 包集合名 is [包集合说明语句]; end 包集合名;

package body 包集合名 is [包集合体说明语句]; end 包集合名;

注:包集合体为可选项。

3.1.4 配置

描述层与层之间的连接关系以及实体与构造体之间的连接关系。在仿真时利用配置选择不同的构造体。

格式:

CONFIGURATION 配置名 OF 实体名 IS

FOR 构造体名 END FOR;

END 配置名;

3.1.5 库

库(Library)是经编译后的数据的集合,库说明总是放在设计单元的最前面。 1.库的种类: 1.IEEE 库

包含:STD_LOGIC_1164 STD_LOGIC_ARITH STD_LOGIC_UNSIGNED 2.STD库

包含:STANDARD包集合 TEXTIO 包集合 TEXTIO 包集合使用例:

LIBRARY STD;

USE STD.TEXTIO. ALL; 3.ASIC矢量库

各公司提供的ASIC称逻辑门库 4.WORK 库

为现行作业库,存放设计者的VHDL语言程序 5.用户定义的库

用户为自身设计需要所开发的共用包集合和实体。 2.库的使用

除WORK、STD库外,首先要说明。格式: library [库名];

use [库名.包名.项目名]; 例:

library ieee;

use ieee.std_logic_1164.all; 3.库说明的作用范围:

从实体开始到其所属构造体、配置为止

3.2 VHDL语言的数据类型与运算操作符 3.2.1 VHDL语言的对象

VHDL语言中可以赋值的对象有3种:信号(Signal)、变量(Variable)、常数(Constant)。在数字电路设计中,这3种对象通常都具有一定的物理意义。例如,信号对应地代表电路设计中的某一条硬件连线;常数对应地代表数字电路中的电源和地等。当然,变量对应关系不太直接,通常只代表暂存某些值的载体。3类对象的含义和说明场合如表2-1所示。

表2-1 VHDL语言3种对象的含义和说明场合

对象类别 信 号 变 量 常 数

含 义 信号说明全局量 变量说明局部量 常数说明全局量 说 明 场 合 Architecture, package, entity Process, function, procedure 上面两种场合下,均可存在 3.2.2VHDL语言的数据类型

1.数据类型的种类

在VHDL语言中,信号、变量、常数都是需要指定数据类型的,VHDL提供的数据类型可归纳如下:

整数 实数 标量类型 枚举 物理 复合类型 数组 数据类型 记录 子类型 文件类型 在上述数据类型中,有标准的,也有用户自己定义的。当用户自己定义时,其具体的格寻址类型 式如下:

TYPE 数据类型名 数据类型的定义; 下面对常用的几种数据类型作一些说明。

? 整型(INTEGER)

VHDL中的整型与数学中的整形定义相似,可以使用加、减、乘、除等运算符。整数的最小范围从-2147483647到+2147483647,即32位有符号的二进制数。 ? 实数(REAL)

实数即浮点数,有正有负,书写时一定要有小数点。实数的最小范围从-1.0E+38到+1.0E+38。

? 记录(RECORD)

记录是异构复合类型,也就是说,记录中的元素可以是不同的类型。记录类型的格式如下:

TYPE 记录名 IS RECORD ---记录中元素的类型说明; END RECORD

一个具体的实例如下:

TYPE month_name(Jan, Feb, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); TYPE date IS RECORD

day : integer range 0 to 31; month : month_name;

year : Integer range 0 to 3000; END RECORD; ? 数组(ARRAY)

数组用于定义同一类型值的集合。数组可以是一维的(有一个下标),也可以是多维的(有多个下标)。此外,数组还可分为限定性数组和非限定想数组,限定性数组下标的取值范围在该数组类型定义时就被确定;而非限定性数组下标的取值范围随后才确定。其具体格式如下:

TYPE 数据类型名 IS ARRAY 范围 OF 原数据类型; 举例如下:

TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC;

“STD_LOGIC_VECTOR”也属于数组,因它在程序包“STD_LOGIC_1164”中被定义成数组。 ? 子类型

所谓子类型是用户对定义的数据类型作一些范围限制而形成的一种新的数据类型。子类型定义的一般格式为:

SUBTYPE 子类型名 IS 数据类型名 [范围];

子类型可以是对其父类型施加限制条件,也可以是简单地对其父类型重新起个名字,而没有增加任何新的意义。 2. 数据类型的转换

在VHDL语言中,数据类型的定义是相当严格的,不同类型数据是不能进行运算和直接赋值的。为了实现正确的运算和赋值操作,必须将数据进行类型转换。数据类型的转换是由转换函数完成的,VHDL的标准程序包提供了一些常用的转换函数,如: ? FUNCTION TO_bit (s : std_ulogicl; xmap : BIT :=’0’) RETURN BIT;

? FUNCTION TO_bit_vector ( s : std_logic_vector; xmap : BIT :=’0’ ) RETURN

BIT_VECTOR; 等函数。

3.2.3 VHDL语言的运算操作符

如同别的程序设计语言一样,VHDL中的表达式是由运算符将基本元素连接起来的式子。VHDL的运算符可分为4组:

算数运算符、关系运算符、逻辑运算符和其他运算符以及它们的优先级别如下表所示:

表2-2 VHDL的运算符及优先级别

优先级顺序 低 高

通常,在一个表达式中有两个以上的算符时,需要使用括号将这些操作分组。如果一串操作的算符相同,且是AND、OR、XOR这三个算符中的一种,则不需要使用括号,如果一串操作中的算符不同或有除这三种算符之外的算符,则必须使用括号。如:

a AND b AND c AND d (a OR b) NAND c

关系运算符=、/=、<、<=和>=的两边类型必须相同,因为只有相同的数据类型才能比较,其比较的结果为BOOLEAN型。

正(+)负(-)号和加减号的意义与一般算术运算相同。连接运算符用于一维数组,“&”符号右边的内容连接之后形成一个新的数组,也可以在数组后面连接一个新的元素,或将两个单元素连接形成数组。连接操作常用于字符串。

运算符类型 逻 辑 运 算 符 关 系 运 算 符 运 算 符 AND OR NAND NOR XOR XNOR = /= < > <= >= + ― & + ― * / MOD REM * * ABS NOT 功 能 与 或 与非 或非 异或 异或非 等于 不等于 小于 大于 小于等于 大于等于 加 减 连接 正 负 乘 除 求模 取余 指数 取绝对值 取反 乘除运算符用于整形、浮点数与物理类型。取模、取余只能用于整数类型。

取绝对值运算用于任何数值类型。乘方运算的左边可以是整数或浮点数,但右边必须为整数,且只有在左边为浮点时,其右边才可以为负数。

3.3 VHDL语言的主要描述语句

VHDL语言主要分为顺序语句和并发语句。 顺序描述语句又可分为

1.WAIT语句 2.断言语句 3.信号赋值语句 4.变量赋值语句 5.IF语句 6.CASE语句 7.LOOP语句 8.NEXT 语句 9.过程调用语句 10.NULL语句。 并发语句则可分为

1.进程(process)语句

2.并发信号赋值(concurrent signal assignment)语句 在构造体的进程之外使用。

3.条件信号赋值(conditional signal assignment)语句 4.选择信号赋值(selective signal assignment)语句 5.块(block)语句

第四章 VHDL语言中IP核技术

4.1 IP核的简介

现在的FPGA设计,规模巨大而且功能复杂,设计人员不可能从头开始进行设计。现在采用的方式是,在设计中尽可能使用现有的功能模块,除非没有现成的模块可以使用时,设计人员才需要自己花时间和精力设计新的模块。

这些现有的功能模块,EDA设计人员把他们通常称为IP(intellectual Property)核。IP核来源主要有三个方面:

(1)前一个设计创建的模块; (2)FPGA生产厂商的提供; (3)第三方IP厂商的提供。

IP(Intelligent Property)核是具有知识产权核的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中。到了SOC阶段,IP核设计已成为ASIC电路设计公司和FPGA提供商的重要任务,也是其实力体现。

对于FPGA开发软件,其提供的IP核越丰富,用户的设计就越方便,其市场占用率就越高。目前,IP核已经变成系统设计的基本单元,并作为独立设计成果被交换、转让和销售。

4.2 IP核的分类

从IP核的提供方式上,通常将其分为软核、硬核和固核这3类。从完成IP核所花费的成本来讲,硬核代价最大;从使用灵活性来讲,软核的可复用使用性最高。

4.2.1软核

软核在EDA设计领域指的是综合之前的寄存器传输级(RTL)模型;具体在FPGA设计中指的是对电路的硬件语言描述,包括逻辑描述、网表和帮助文档等。软核只经过功能仿真,需要经过综合以及布局布线才能使用。其优点是灵活性高、可移植性强,允许用户自配置;缺点是对模块的预测性较低,在后续设计中存在发生错误的可能性,有一定的设计风险。软核是IP核应用最广泛的形式。

4.2.2 固核

固核在EDA设计领域指的是带有平面规划信息的网表;具体在FPGA设计中可以看做带有布局规划的软核,通常以RTL代码和对应具体工艺网表的混合形式提供。将RTL描述结合具体标准单元库进行综合优化设计,形成门级网表,再通过布局布线工具即可使用。和软核相比,固核的设计灵活性稍差,但在可靠性上有较大提高。目前,固核也是IP核的主流形式之一。

4.2.3 硬核

硬核在EDA设计领域指经过验证的设计版图;具体在FPGA设计中指布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其修改。不能修改的原因有两个:

1.首先是系统设计对各个模块的时序要求很严格,不允许打乱已有的物理版图;

2.其次是保护知识产权的要求,不允许设计人员对其有任何改动。 IP硬核的不许修改特点使其复用有一定的困难,因此只能用于某些特定应用,使用范围较窄。

4.3 IP核的生成

很多FPGA厂商提供了一个专门的IP核生成工具,有时候EDA厂商、IP厂商和一些独立的设计小组也提供了IP核生成工具。这些核生成软件是参数化的,由用户指定总线和功能单元的宽度和深度等参数。 当使用IP核生成器时,从IP模块/核列表中选择自己需要的一个IP核,然后设置相应得参数。然后,对一些IP核,生成器要求用户从功能列表张选择是否包含某些功能。比如,FIFO模块,需要用户选择是否进行满空的计数。通过这种设置方式,IP核生成器可以生成在资源需求和性能方面效率最高的IP核/模块。

根据生成器软件的代码源和NDA的要求不同,核生成器输出可能是加密或未加密的RTL级源代码,也可能是未经布局布线的网表或布局布线的网表文件。

4.4 IP核的的应用

4.4.1块RAM存储器组成和功能介绍

Xilinx公司提供了大量的存储器资源,包括了内嵌的块存储器、分布式存储器以及16位的移位寄存器。利用这些资源可以生成深度、位宽可配置的RAM、ROM、FIFO以及移位寄存器等存储逻辑。其中,块存储器是硬件存储器,不占用任何逻辑资源,其余两类都是Xilinx专有的存储结构,由FPGA芯片的查找表和触发器资源构建的,每个查找表可构成16* 1位的分布式存储器或移位寄存器。一般来讲,块存储器是宝贵的资源,通常用于大数据量的应用场合,而其余两类用于小数据量环境。 在Xilinx FPGA中,块RAM是按照列来排列的,这样保证了每个CLB单元周围都有比较接近的块RAM用于存储和交换数据。与块RAM接近的是硬核乘加单元,这样不仅有利于提高乘法的运算速度,还能形成微处理器的雏形,在数字信号处理领域非常实用。例如,在Spartan 3E系列芯片中,块RAM分布于整个芯片的边缘,其外部一般有两列CLB,如图所示,可直接对输入数据进行大规模缓存以及数据同步操作,便于实现各种逻辑操作。

块RAM几乎是FPGA器件中除了逻辑资源之外用得最多的功能块,Xilinx

的主流 FPGA芯片内部都集成了数量不等的块RAM硬核资源,速度可以达到数百兆赫兹,不会占用额外的CLB资源,而且可以在ISE环境的IP核生成器中灵活地对RAM进行配置,构成单端口RAM、简单双口RAM、真正双口RAM、ROM(在RAM中存入初值)和FIFO等应用模式,如图所示。同时,还可以将多个块RAM通过同步端口连接起来构成容量更大的块RAM。

4.4.2单端口RAM模式

单端口RAM模式支持非同时的读写操作。同时每个块RAM可以被分为两部分,分别实现两个独立的单端口RAM。需要注意的是,当要实现两个独立的单端口 RAM模块时,首先要保证每个模块所占用的存储空间小于块RAM存储空间的1/2.在单端口RAM配置中,输出只在read-during-write模式有效,即只有在写操作有效时,写入到RAM的数据才能被读出。当输出寄存器被旁路时,新数据在其被写入时的时钟上升沿有效。

4.4.3简单的双端口RAM

简单双端口RAM模型如图所示,图中上边的端口只写,下边的端口只读,因此这种RAM也被称为伪双端口RAM(Pseudo Dual Port RAM)。这种简单双端口RAM模式也支持同时的读写操作。

块RAM支持不同的端口宽度设置,允许读端口宽度与写端口宽度不同。这一特性有着广泛地应用,例如:不同总线宽度的并串转换器等。在简单双端口RAM模式中,块RAM具有一个写使能信号wren和一个读使能信号rden,当rden为高电平时,读操作有效。当读使能信号无效时,当前数据被保存在输出端口。 当读操作和写操作同时对同一个地址单元时,简单双口RAM的输出或者是不确定值,或者是存储在此地址单元的原来的数据。

4.4.4真正双端口RAM模式

真正双端口RAM模型如图所示,图中上边的端口A和下边的端口B都支持读写操作,WEA、WEB信号为高时进行写操作,低为读操作。同时它支持两个端口读写操作的任何组合:两个同时读操作、两个端口同时写操作或者在两个不同的时钟下一个端口执行写操作,另一个端口执行读操作。 真正双端口RAM模式在很多应用中可以增加存储带宽。例如,在包含嵌入式处理器MiroBlaze和DMA控制器系统中,采用真正双端口RAM模式会很方便;相反,如果在这样的一个系统中,采用简单双端口RAM模式,当处理器和DMA控制器同时访问RAM时,就会出现问题。真正双端口RAM模式支持处理器和DMA控制器同时访问,这个特性避免了采用仲裁的麻烦,同时极大地提高了系统的带宽。 一般来讲,在单个块RAM实现的真正双端口RAM模式中,能达到的最宽数据位为36比特*512,但可以采用级联多个块RAM的方式实现更宽数据位的双端口RAM。当两个端口同时向同一个地址单元写入数据时,写冲突将会发生,这样存入该地址单元的信息将是未知的。要实现有效地向同一个地址单元写入数据,A端口和B端口时钟上升沿的到来之间必须满足一个最小写周期时间间隔。因为在

写时钟的下降沿,数据被写入块RAM中,所以A端口时钟的上升沿要比B端口时钟的上升沿晚到来1/2个最小写时钟周期,如果不满足这个时间要求,则存入此地址单元的数据无效。

第五章 结论

本课题先介绍VHDL语言的,然后主要研究了VHDL语言中IP核的简介、分类、生成、应用,目的是让同学们对IP核有深入的了解与应用。

由于时间紧迫,只研究了VHDL高级使用技巧中的一种,对于其他的使用技巧未做讲解,忘谅解!

参考文献

1. VHDL语言的100例详解 作者:北京理工大学ASIC研究所 2.基于VHDL语言的IP核 出处:《微计算机信息》2005年10期 3.VHDL语言的简介 出处: 百度文库

本文来源:https://www.bwwdw.com/article/k9y.html

Top