PCB论坛网

 找回密码
 注册
查看: 4694|回复: 13

讨论:怎么学习 CPLD/FPGA

[复制链接]
发表于 2007-1-23 19:30:00 | 显示全部楼层 |阅读模式

打算学习  CPLD/FPGA , 老大说 很简单,只要逻辑性强就可以了~ ........说是这么说,做起来 并不一定容易;因为以前对此的了解 很少, 只清楚学这个要用到vhdl 或veolog vhdl; 希望知道的朋友 可以推荐几本这方面的书籍 ,或者学习的方法; 活着说说这个东东 的应用如何.........都可以.....
希望 大家 多多参与~~  多谢~!!
回复

使用道具 举报

 楼主| 发表于 2007-1-24 10:39:00 | 显示全部楼层
fpgakit:

本人学习Verilog将近有2年的时间了,真正做实际的项目也只有半年左右的时间,感觉在这2年的学习过程中还是走了不少弯路,今天把这2年的学习工作做个总结,希望对入门者有个借鉴的作用。

1.关于语言
Verilog和VHDL两种语言差不多,个人感觉争论学习,使用何种语言没有太大的意义,一般情况项目组、公司使用2种语言的人都有,这就要求FPGA设计人员对于2两种语言都要熟悉,但精通1种就行了。比如你用Verilog写代码,别人用VHDL写的代码你能看懂就行了。

2.关于器件
当初在学校的时候不知道为什么对Xilinx鬼迷心窍,对Altera有点反感,有关Altera的资料一般都不看,实际工作后,才知道一般公司Xilinx、Altera、Lattice的产品都会用,主要取决项目要实现的功能,成本等等。所以,对于入门者来说,一般精通1家公司的产品,对其他几家公司的产品了解熟悉一下就可以了,等到工作中用得到的时候不至于从头开始学,其实几家公司的产品都差不多的,没什么本质的区别,区别只是公司提供的技术支持、参考设计是否完善,个人感觉Xilinx的参考设计还是比较完善的。

3. 关于参考书
其实参考书不在多,在于精,由于我个人主要使用Verilog,在此推荐几本。
1. Verilog数字系统设计教程,夏宇闻,北航出版社
2. 设计与验证-VerilogHD,EDA先锋工作室,人民邮电出版社
3. FPGA/CPLD设计工具 Xilinx ISE使用祥解,EDA先锋工作室,人民邮电出版社
4. Altera FPGA-CPLD设计(基础篇) EDA先锋工作室,人民邮电出版社

4. 关于开发板
对于刚入门的人来说,拥有1块开发板可以起到事半功倍的效果。当初在学校学习的时候,考虑买开发板的时候,追求FPGA的逻辑门比较多,其实这是没有必要的,我在学校的时候买了一块Spartan-3的40万门开发板,对于入门者来说根本就用不了这么大的芯片,20万门甚至5万门的已经足够了。当然开发板上的其他资源要尽量丰富。比如按键、七段数码管、EEPROM、串口等等吧。

5 参考设计
由于刚刚入门,我们有时候不知道如何写程序,回想我当初连4分频电路都不知道该怎么写。其实Xilinx、Altera等公司的网站上都有相当多的参考设计和设计源代码,多多利用这些公司提供的资源,是学习CPLD/FPGA的一条捷径。比如矩阵键盘、串行通信(UART)、IIC等Xilinx公司的网站上都有参考设计和源代码。

今天就写这么多,以后再添加吧,写得不好,还望大家多多指教。
-----------------------------------------------------------------------
转自21ic
与偶同样迷惑的人分享!
回复 支持 反对

使用道具 举报

发表于 2007-1-25 09:47:00 | 显示全部楼层

辛苦楼主了,谢谢分享!

很好啊,顶一下!

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-25 16:44:00 | 显示全部楼层

关于FPGA
FPGA(Field Programmable Gate Array)采用不同于PLD架构之设计方式,拥有较高的密度,而与CPLD不同者在于逻糭闸数较少,以缓存器居多,其密度在5K以上,脚位数多,拥有高容量,低耗电功率的优点,然其绕线(Routing)颇复杂,亦导致时序延迟,且呈非固定式,延迟时间(time delay)较长,对刚入行的设计工程师而言不易立即了解,需要花较长的学习时间。
FPGA的架构主要有SRAM Base及Anti-fuse两种设计模式,其中SRAM Base特点是可重复烧录(reprogrammable),低耗电率,可于在线组成(in-circuit configurable),但唯其需借助外部电源维持数据,且操作上需由外部进行数据下载;Anti-fuse由于具有一次烧录(OTP)的特性,可在保密性上提供较佳的保护,但也因此无法进行重复修改。


关于PLD
PLD依架构及密度分成
1. 密度较低的SPLD(Simple Programmable Logic Device;简称SPLD)与
2. 密度较高的CPLD(Complex Programmable Logic Device;简称CPLD),而SPLD方面,目前业者针对PAL(Programmable Array Logic )与GAL(Generic Array Logic)皆采CMOS的设计技术。简单型可程序逻糭组件(SPLD)其逻糭闸约在数百闸左右,IC脚位在28pin以内,以Bipolar为技术的PAL属于早期产品,只能作单次烧录,数据无法抹除,其好处在于速度较快,但功率消耗亦高;而GAL能作多次烧录,数据也可抹除设计,随时可更改,可缩短设计时程,利于快速将产品推出上市,目前市售Bipolar PAL已不复多见,而CMOS PAL与GAL则仍保有一定程度的市场占有率。
.CPLD较SPLD具有较高的密度,其逻糭闸在800-5000之间,IC脚位高于28pin,44pin以上IC的封装以PLCC为主,采CMOS设计技术,制程采EPROM、EEPROM、Flash PROM等方式,具低频率、非挥发性的特点;其特性具有能多次烧录抹除及具有固定式的延迟,与FPGA的差异在CPLD系以提供较多的逻糭闸,而FPGA则提供较多的缓存器,优点是可立即烧录进行电路验证,可反复烧录,进行硬件仿真,快速建立系统訽型,节省IC测试及开发成本,供货商提供完整软件进行设计与缩短产品上市时间。

[此贴子已经被作者于2007-2-4 21:42:34编辑过]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-25 16:45:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2007-1-26 23:03:00 | 显示全部楼层
不错,顶一下。学习中
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-7 14:59:00 | 显示全部楼层
drogy: 嵌入式开发人员与FPGA应用
发掘 FPGA潜力的关键是打破传统软件和硬件设计间的障碍。目前FPGA 设计流程仍分隔在软件开发流程之外,而实际上两个流程都隔离在板级设计流之外。业界仍然认为整个电子产品设计处于分隔的板卡设计、FPGA设计 和软件设计几个方面,而且我们使用的设计工具正反映了这种分隔。

FPGA 设计发展成为专业的设计学科,其工作流程是从芯片设计方法演变过来的。从嵌入式角度来看,这就把 FPGA放到了硬件设计领域,这就使嵌入设计师很少会使用FPGA去创建实际的嵌入式系统的智能(软件意义上的)。然而, FPGA跨越了软件和硬件之间的障碍,具有成为电子产品嵌入式智能一部分的潜力,而不仅仅是成为嵌入式智能的平台。只有把电子产品开发视作一个单一过程,我们才能看出可编程硬件技术所代表的‘宏伟蓝图’。


可编程器件技术并不是把嵌入式软件开发从硬件设计分割开,而是让开发人员在开发软件时可以交互地改变系统硬件。硬件也不再是一个固定的平台。在本质上,系统优化可包括硬件和软件,平台和运行在平台上的软件都可以在线重构。

从嵌入式设计师角度看, 统一环境 可直接把软件开发连接到底层的硬件平台设计。这一点很重要,因为这样 FPGA内部实现的器件可以在开发阶段以类似传统软件的方式方便地升级。嵌入式开发人员可以轻松地选择硬件和软件方案解决设计问题。

Altium Designer采用新的统一硬件/软件编译器技术,该技术可同时从标准C代码中生成高度优化的可执行代码和在FPGA中并行执行的硬件电路,随后在运行时生成所需代码并将二者连接在一起。实际的实施中需要引入 FPGA 硬件系统元件,在编译时通过嵌入式软件指定其功能。开发人员只需指定在硬件和统一编译器上执行的C功能,然后创建综合所需的硬件描述文件,编译剩余代码,自动添加必要的指令,把功能转移到硬件中。

-----------------------------------------------------
转自21ic bbs
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-7 15:13:00 | 显示全部楼层
FPGA工作原理

一.查找表(Look-Up-Table)的原理与结构

采用这种结构的PLD芯片我们也可以称之为FPGA:如altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等。

查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。 目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

下面是一个4输入与门的例子,

实际逻辑电路
LUT的实现方式

a,b,c,d 输入

逻辑输出
地址
RAM中存储的内容

0000

0
0000
0
0001
0
0001
0
....
0
...
0
1111
1
1111
1

 

 

二.基于查找表(LUT)的FPGA的结构

 

我们看一看xilinx Spartan-II的内部结构,如下图:

xilinx Spartan-II 芯片内部结构
Slices结构

Spartan-II主要包括CLBs,I/O块,RAM块和可编程连线(未表示出)。在spartan-II中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。 Slices可以看成是SpartanII实现逻辑的最基本结构 (xilinx其他系列,如SpartanXL,Virtex的结构与此稍有不同,具体请参阅数据手册)

altera的FLEX/ACEX等芯片的结构如下图:

altera FLEX/ACEX 芯片的内部结构

 

逻辑单元(LE)内部结构

FLEX/ACEX的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/列连线。在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一个LUT,一个触发器和相关的相关逻辑。LE是FLEX/ACEX芯片实现逻辑的最基本结构(altera其他系列,如APEX的结构与此基本相同,具体请参阅数据手册)

 

二.查找表结构的FPGA逻辑实现原理

 

我们还是以这个电路的为例:

A,B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线连到到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据然后输出,这样组合逻辑就实现了。 该电路中D触发器是直接利用LUT后面D触发器来实现。时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。触发器的输出与I/O脚相连,把结果输出到芯片管脚。这样PLD就完成了图3所示电路的功能。(以上这些步骤都是由软件自动完成的,不需要人为干预)

这个电路是一个很简单的例子,只需要一个LUT加上一个触发器就可以完成。对于一个LUT无法完成的的电路,就需要通过进位逻辑将多个单元相连,这样FPGA就可以实现复杂的逻辑。

由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的,而SRAM工艺的芯片在掉电后信息就会丢失,一定需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作,由于配置时间很短,不会影响系统正常工作。 也有少数FPGA采用反熔丝或Flash工艺,对这种FPGA,就不需要外加专用的配置芯片。

 

三.其他类型的FPGA和PLD

   随着技术的发展,在2004年以后,一些厂家推出了一些新的PLD和FPGA,这些产品模糊了PLD和FPGA的区别。例如Altera最新的MAXII系列PLD,这是一种基于FPGA(LUT)结构,集成配置芯片的PLD,在本质上它就是一种在内部集成了配置芯片的FPGA,但由于配置时间极短,上电就可以工作,所以对用户来说,感觉不到配置过程,可以传统的PLD一样使用,加上容量和传统PLD类似,所以altera把它归作PLD。 还有像Lattice的XP系列FPGA,也是使用了同样的原理,将外部配置芯片集成到内部,在使用方法上和PLD类似,但是因为容量大,性能和传统FPGA相同,也是LUT架构,所以Lattice仍把它归为FPGA。

 

四.选择PLD还是FPGA?

 

根据上一篇PLD的结构和原理可以知道,PLD分解组合逻辑的功能很强,一个宏单元就可以分解十几个甚至20-30多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因此,PLD适合用于设计译码等复杂组合逻辑。 但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,PLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于PLD。 所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA就是一个很好选择。 同时PLD拥有上电即可工作的特性,而大部分FPGA需要一个加载过程,所以,如果系统要可编程逻辑器件上电就要工作,那么就应该选择PLD


看完后,如果感觉还可以的话,请支持一下,发表一下自己的看法

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-7 15:19:00 | 显示全部楼层
Top Down FPGA设计的黄金组合

来源:嵌入式控制研究室

电子技术的日新月异,不断地改变着人们的生活方式。而世界电子技术及设计方法的发展,正在给中国的电子设计工程师们以新的挑战和压力。不能否认,目前中国电子设计技术仍远远落后于发达国家水平,尤其是在电子技术的基础产业,即IC/ASIC方面。当国人以国产计算机,电视,VCD,影碟机等产业欣欣向荣,飞速发展而沾沾自喜的时候,却不能不看到,几乎所有的核心技术和几乎所有的内部关键集成电路,仍然印着国外半导体厂家的商标。单从时间上看,国内技术可能只落后一、二十年,但是我们更应该看到:一方面,这一产业的发展是以非线性速度向前推进的,另一方面,当发达国家“全民皆兵”,整体发展水平平均较高时,国内仍局限在为数不多的几个国家重点投资企业或合资/独资企业里。

       然而,我们有幸的看到,FPGA/EPLD的发展正逐步取代越来越多的ASIC市场。可重复使用,小批量,低投入,高性能,高密度,开发周期短等诸多优点,使国内更多的工程师们乐于采用。由于不需要任何投片费用,也不需要建立任何生产线,因此,采用FPGA/EPLD所需的投资远远低于ASIC的投资。据估计,引进一套先进的FPGA Top-Down设计工具所需费用还不到ASIC所需的十分之一,而大力推广先进的FPGA设计方法,既可以降低诸多产业投资成本,也可培养一大批国内的Top-Down的设计人才,从而提高国内Top-Down设计的整体水平,为将来国内ASIC产业的快速、健康发展打下坚实的基础。

       FPGA/EPLD的自上而下(Top-Down)设计方法:

       传统的设计手段是采用原理图输入的方式进行的,如图1所示。通过调用FPGA/EPLD厂商所提供的相应物理元件库,在电路原理图中绘制所设计的系统,然后通过网表转换产生某一特定FPGA/EPLD厂商布局布线器所需网表,通过布局布线,完成设计。原理图绘制完成后可采用门级仿真器进行功能验证。

传统的设计手段与top-down设计工具的比较

图1:传统的设计手段与Top-Down设计工具的比较

       然而,工程师的最初设计思想不是一开始就考虑采用某一FPGA/EPLD厂商的某一特定型号器件,而是从功能描述开始的。设计工程师首先要考虑规划出能完成某一具体功能、满足自己产品系统设计要求的某一功能模块,利用某种方式(如HDL硬件描述语言)把功能描述出来,通过功能仿真(HDL仿真器)以验证设计思路的正确性。当所设计功能满足需要时,再考虑以何种方式(即逻辑综合过程)完成所需要的设计,并能直接使用功能定义的描述。实际上这就是自顶而下设计方法。

       与传统电原理图输入设计方法相比,Top-Down设计方法具体有以下优点:

       1、完全符合设计人员的设计思路,从功能描述开始,到物理实现的完成。

       2、功能设计可完全独立于物理实现

       在采用传统的电原理输入方法时,FPGA/EPLD器件的采用受到器件库的制约。由于不同厂商FPGA/EPLD的结构完全不同,甚至同一厂商不同系列的产品也存在结构上的差别,因此,在设计一开始,工程师的设计思路就受到最终所采用器件的约束,大大限制了设计师的思路和器件选择的灵活性。而采用Top-Down设计方法,功能输入采用国际标准的HDL输入方法,HDL可不含有任何器件的物理信息,因此工程师可以有更多的空间去集中精力进行功能描述,设计师可以在设计过程的最后阶段任意选择或更改物理器件。

       3、设计可再利用

       设计结果完全可以以一种知识产权(IP-Intellectual Property)的方式作为设计师或设计单位的设计成果,应用于不同的产品设计中,做到成果的再利用。

       4、易于设计的更改

       设计工程师可在极短的时间内修改设计,对各种FPGA/EPLD结构进行设计结果规模(门消耗)和速度(时序)的比较,选择最优方案。

       5、设计、处理大规模、复杂电路

       目前的FPGA/EPLD器件正向高集成度、深亚微米工艺发展。为设计系统的小型化,低功耗、高可靠性等提供了集成的手段。设计低于一万门左右的电路,Top-Down设计方法具有很大的帮助,而设计更大规模的电路,Top-Down设计方法则是必不可少的手段。

       6、设计周期缩短,生产率大大提高,产品上市时间提前,性能明显提高,产品竞争力加强。据统计,采用Top-Down设计方法的生产率可达到传统设计方法的2到4倍。

       Top-Down设计流程如图2所示,其核心是采用HDL语言进行功能描述,由逻辑综合(Logic Synthesis)把行为(功能)描述转换成某一特定FPGA/EPLD的工艺网表,送到厂商的布局布线器完成物理实现。在设计过程的每一个环节,仿真器的功能验证和门级仿真技术保证设计功能和时序的正确性。

top-down设计流程

       FPGA/EPLD Top-Down 设计工具的黄金组合

       Mentor Graphics公司提供一整套基于UNIX平台和Windows 95/NT 平台的FPGA/EPLD Top-Down设计工具:Renoir/ModelSim 和Exemplar,如图2所示。两种平台的工具具有相同的用户界面,并保证数据库的完全统一。目前,在FPGA/EPLD Top-Down设计方法全球市场上,Mentor已拥有42%的市场份额,远远领先于其他任何一个厂家。

       采用Top-Down设计方法进行FPGA/EPLD设计,其设计结果的优劣与否取决于三个重要的因素:描述手段(即HDL语言)、设计方法(Style)和设计工具。描述手段是基础,设计方法需要工程经验,而设计工具则是Top-Down设计的关键。一套完整、强大、性能卓越的设计工具,可帮助设计工工程师最大限度的发挥其设计能力。 

       1. 图形化输入工具-Renoir

       ----设计工程师采用Top-Down方法进行FPGA/EPLD设计所面临到的第一个问题就是HDL语言的学习。语言的学习过程和应用能力直接影响设计产品的完成及其性能。但是设计师进行产品设计的最初并不是考虑如何去写语言,而是习惯于画出设计的框图,并采用图形化方法(流程图、状态图、真值表等)把它描述出来。Renoir这一图形化输入工具,不仅可以帮助设计师完成产品的功能描述,更可以自动生成HDL语言,为逻辑综合提供必要的输入数据。

       ---- 采用图形化输入方法主要优点体现在:

       提供框图、流程图、状态图、真值表等图形输入方法,使设计工程师从纯文本的设计方法理解脱出来,设计手段更贴近于设计师的思维过程:

       便于工程师之间进行设计的相互交流以及对前人/他人设计结果的理解与再利用;

       便于初学者学习HDL语言;

       便于设计成果的存档,以便设计交流与再利用。

       ---- Renoir作为新一代的图形化输入工具更具有以下诸多优点:

       自动生成高效的HDL语言描述,生成结果可进行功能验证及逻辑综合;完全支持VHDL和Verilog两种国际标准,并完全支持VHDL/Verilog的混合描述;支持UNIX和Win95/NT两种平台,具有相同界面和数据库。Win95/NT平台采用标准的Windows界面,易学易用;支持框图/流程图的动画(Animation)仿真、调试过程便于设计的调试;即插即用(plug and play),与多种仿真器、综合器及软硬件协同验证工具有完善的接口,组成各种设计流程;在线查错功能(On line checking),进行语法和可综合性检查;语言到图形的转换,可以把VHDL、Verilog或混合HDL语言描述换成框图、流程图或状态图,并保持原设计的层次结构;支持OLE(Object Liking and Embedding)标准,可把Renoir中的任何图形设计形式连接或嵌入到任一支持OLE的应用程序中,如Word、Powerpoint等,以便用户建立设计文档;支持在图形输入中加入注释、属性(pragma, attribute)、并可自动加到所产生的HDL源码中;支持IP调用,并可自动生成相应符号,以使IP嵌入到所设计的系统中;完善的设计管理,支持设计项目管理、设计层次管理、设计小组管理及设计数据版本管理等;通过需求与设计可跟踪(Requirement & Tracebility)管理,不仅保证设计正确,而且保证正确设计(Design thing Right and Design Right thing)。

       2. 逻辑综合工具-Exemplar

       ---- 逻辑综合工具是通过映射和优化过程,把设计功能描述转换成与物理实现密切相关的工艺网表。在转换过程中,不仅需要确保每一功能映射正确,还需保证尽量采用较少的硬件开销,满足设计的时序要求。因此,逻辑综合工具是FPGA/EPLD Top-Down设计过程的关键。 Exemplar的主要特点:

       完全支持VHDL/Verilog两种国际标准;针对不同结构的FPGA/EPLD器件,采用不同的综合优化算法,以保证结果的最优化;支持不同类型器件的重映射,设计师可直接从一种器件的工艺网表映射到另一种器件的工艺网表,无需重新设计;支持各厂商器件网表的不同格式输入与输出。如:XNF,EDIF等:支持布局、布线后设计的反标注,产生后仿真所需功能网表(HDL)及延时网表(SDF);持静态时序分析;支持综合结果的图形输出,设计师可通过图形输出跟踪分析关键路径(Critical Path);支持广泛的FPGA厂商及其最新芯片型号,包括采用深亚微米技术的器件。厂商包括:Actel、Altera、Atmel、Cypress、Lattice、Lucent、Motorola、Quicklogic、Xilinx等;FPGA/EPLD设计到ASIC设计可实现无缝升级,保证设计数据的兼容性及可再利用性;即插即用,可与各种前端/后端工具结合使用,设计数据无虚人为干预/修改;持UNIX平台和Win95/NT平台,不同平台工具具有相同的用户界面、功能、并完全保证设计数据的兼容性。

       3. 功能仿真与时序验证-ModelSim

       ---- 在FPGA/EPLD Top-Down设计流程中,设计仿真包含在设计过程的每一环节中,以保证设计的正确性。 ModelSim不仅可以完成设计的功能验证(RTL级),也可实现逻辑综合后的门级仿真以及布局布线后的功能和时序验证。

       ---- ModelSim的主要特点:

       完全支持VHDL和Verilog标准;采用直接编辑技术(Direct-Compiled),大大提高HDL编译和仿真速度;唯一支持VHDL和Verilog混合描述的仿真工具;支持RTL级和门级验证,支持VITAL,SDF等;具有友好的用户界面,仿真器包括主控窗口、源码窗口、仿真波形窗口、列表窗口、数据流窗口、设计结构/层次窗口、过程管理窗口等;支持单步调试,断点设置,批命令处理方式,帮助设计师快速完成设计调试和验证;可与Renoir协同工作,完成状态图和流程图的动画调试

;即插即用,可与其它工具结合,完成各种流程;支持UNIX和Window 95/NT平台,不同平台间具有相同的用户界面和数据库。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-7 15:22:00 | 显示全部楼层
[转载]I2C总线控制器的VHDL设计及实现

引言
I2C总线以其接口简单、使用灵活等突出优点在数字系统中获得了广泛的应用。尤其在嵌入式系统中,I2C总线被普遍用来连接CPU/MCU和外围器件。I2C总线规范经过十几年的实践,发展了多层标准。从传输速率上划分,有标准模式(100Kbit/s),快速模式(400Kbit/s),高速模式(3.4Mbit/s);从寻址范围上划分有7位地址模式和10位地址模式。本文使用VHDL语言设计的控制器模块采用标准速率、7位地址的模式,主要应用在嵌入式系统中,给CPU/MCU提供一个操作I2C器件的简易平台,以弥补某些CPU/MCU功能的不足。

功能定义
I2C总线的接口非常简单,只需一根数据线(SDA)和一根时钟线(SCL)。I2C器件可以工作于主件(Master)模式和从件(Slaver)模式,但I2C总线上同时只能有一个主件和多个从件,每次传输规定由主件发起,通过从件地址(Slaver Address)访问从件。设计时本着简单实用的原则,限定本模块只工作于Master模式。
端口定义
entity I2C_CTRL is
 port(
 -- 系统信号
 nReset: in STD_LOGIC;-- 系统复位信号端
 CLK: in STD_LOGIC; -- FPGA内部系统时钟端
 -- 控制信号
 ADRS: in STD_LOGIC_ VECTOR(4 downto 2); -- 地址线,3位(8个32位地址)
 Din: in STD_LOGIC_ VECTOR(7 downto 0); -- 数据输入线,8位
 Dout: out STD_LOGIC_ VECTOR(7 downto 0); -- 数据输出线,8位
 nCS: in STD_LOGIC; --片选使能端
 nWR: in STD_LOGIC; --写使能端
 -- I2C总线信号
 SDA: inout STD_LOGIC; --串行数据输入输出端,输出有三态
 SCL: out STD_LOGIC --时钟输出端,三态输出
 );
end I2C_CTRL;
寄存器定义
本模块的寄存器定义参照Motorola公司ColdFire系列MCU MCF5307的I2C控制器,共定义了3个寄存器,长度均为8位,采用32位编址。
时序状态机
本模块根据I2C总线规范的时序标准(参考协议)划分一个传输周期为8个状态。

进程设计
本模块全部采用同步时序设计。VHDL时序仿真见图3,限于篇幅,不提供VHDL原程序。下面只对每个进程的关键点进行说明。
时钟进程
本模块设定FPGA分配给I2C模块的系统时钟(CLK)为20MHz,而标准模式的I2C总线操作速率(SCL的速率)为100KHz,需要对系统时钟进行分频。基于VHDL的同步设计需要,本地时钟频率必须为SCL速率的整数倍,本模块取两倍值,因此本地时钟频率设为200KHz。定义6bit定时器timer,对系统时钟的上升沿进行计数。
系统复位时timer清零。当CLK上升沿时,timer值减1。当timer=0时赋值100,对20MHz的系统输入时钟进行100分频产生200KHz的本地时钟。
为满足对总线的运行状态进行进一步的细分,使用一个5bit的step信号对运行进度进行计数,每个本地时钟到达时,step加1。
CPU读寄存器进程
系统复位时Dout端口清零。在片选信号nCS有效的情况下,当CLK上升沿时,对地址总线ADRS译码,把指定地址的寄存器内容送到Dout端口。
CPU写寄存器进程
系统复位时,初始化I2CR和I2DO。在片选信号nCS和nWR同时有效的情况下,当CLK上升沿时,读取Din端口的信号,存入被ADRS译码选中的寄存器。
状态标志改写进程
系统复位时,初始化状态标志。运行时根据状态机和step的值改写状态标志。其中I2SR[IIF]因为同时可以由CPU改写,安排另外一个独立的进程。
状态机赋值进程和状态机转换进程
系统复位时,状态为IDEL。当检测到MSTA=1时,进入START状态,保持4个本地时钟周期,进入READY状态,根据MTX的值,进入SENDING或RECEVING状态,等待ICF=1时,表明传输结束,进入WAITING状态。根据IIF或者MSTA是否被清除,决定继续下一个传输或者退到STOP状态。STOP状态保持3个本地时钟周期,返回IDEL状态。
SCL线进程和SDA线进程
系统复位时SCL线输出高阻,运行时按照状态机和step的值改写SCL线。当进入传输状态(SENDING或RECEIVING)时,step[0]=0输出高阻,step[0]=1输出低电平。
系统复位时SDA线输出高阻,运行时按照状态机和step的值读写SDA线。

在FPGA中的实现
本I2C控制器模块全部采用可综合的VHDL语言设计,通过Mentor公司的Leonardo Spectrum工具综合,并在Altera公司的Cyclone FPGA中实现布线。
Leonardo Spectrum 2003b65综合的结果是:
Device Utilization for EP1C6Q240C
Resource                Used    Avail   Utilization
IOs                     25      181      13.81%
LCs                     171     5980      2.86%
Memory Bits         0       92160     0.00%
          Clock Frequency Report
 Clock                : Frequency
 CLK                  : 211.8 MHz
此处作为一个单独的模块进行综合,因此上述结果I/O口占用率包括了地址、数据总线和时钟线等,实际使用时作为一个子模块,这些信号线都在FPGA内部。

模块的使用说明
本模块适合应用在嵌入式系统中,作为CPU/MCU连接I2C器件的一个桥接器,使得CPU可以像操作普通存储器一样控制I2C器件。下面补充说明CPU/MCU操作本模块的使用方法。
1) 每发起一次传输都必须先对I2C器件进行寻址。不管是要从I2C器件里接收还是发送数据,都必须先设置I2CR[MTX]以标明是一个发送任务,并在I2DR中填入要寻址的I2C器件的Slaver地址,再发送“开始传输”指令。只有在传输完地址之后,再按需要改写I2CR[MTX]位来实现接收或者发送。如果发送地址之前就试图读写I2C总线将得不到预期的结果。
2) 在一次传输完成之后,将置位中断标记I2SR[IIF]。中断标记必须由软件清除,在标记被清除之后,控制器将自动读取I2CR,进行下一轮传输。如果要改变传输方式,应该在清除中断标记I2SR[IIF]之前改写I2CR寄存器。
3) 对reSTART指令的执行与I2C总线协议规范不尽相同。只有在传输指令没有被结束(即在发送reSTART指令之后没有发送过STOP指令)的状态下设置I2CR[RSTA]才能产生一个reSTART指令,否则无效。而且每次需要reSTART操作时,必须再次重复设置I2CR[RSTA]才能生效。这样解释reSTART指令的目的是,可以方便实现一些EEPROM器件的“选择/任意读数”模式。

结语
本文设计的I2C控制器非常适用于以“MCU+FPGA”为模式的嵌入式系统中。当MCU不具有I2C控制功能,而使用I/O口模拟又占用较多资源时,用FPGA实现对I2C器件的控制成为最理想的选择。通常这种情况下,针对在I2C总线的地位来说,MCU只需担当主件(Master模式),I2C器件只充当从件(Slaver模式),而且一般的器件都只工作于标准速率。因此,若采用FPGA厂商提供的标准I2C控制器IP,会造成资源浪费。而自行设计一个控制器就显得更为经济实用了。■

参考文献
1 The I2C-Bus Specification, Version 2.1, Philips Semiconductors, 2000.1
2 MCF5307 ColdFire Integrated Microprocessor User誷 Manual, Rev 2.0, Motorola, Inc., 2000.8
--------------------------------------
还没有学的这么深,先贴在这里  留到以后 再看~~

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|手机版|PCB设计论坛|EDA论坛|PCB论坛网 ( 沪ICP备05006956号-1 )

GMT+8, 2024-6-10 13:58 , Processed in 0.155947 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表