原创 cpld 学习

2008-6-7 23:42 6211 8 8 分类: 工程师职场

FPGA与CPLD的区别
系统的比较,与大家共享:
尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点:
①CPLD更适合完成各种算法和组合逻辑,FP GA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。

③在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FP GA可在逻辑门下编程,而CPLD是在逻辑块下编程。

④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。

⑤CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。

⑥CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。

⑦在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。

⑧CPLD保密性好,FPGA保密性差。

⑨一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。
随著复杂可编程逻辑器件(CPLD)密度的提高,数字器件设计人员在进行大型设计时,既灵活又容易,而且产品可以很快进入市场。许多设计人员已经感受到CPLD容易使用、时序可预测和速度高等优点,然而,在过去由于受到CPLD密度的限制,他们只好转向FPGA和ASIC。现在,设计人员可以体会到密度高达数十万门的CPLD所带来的好处。
CPLD结构在一个逻辑路径上采用1至16个乘积项,因而大型复杂设计的运行速度可以预测。因此,原有设计的运行可以预测,也很可靠,而且修改设计也很容易。CPLD在本质上很灵活、时序简单、路由性能极好,用户可以改变他们的设计同时保持引脚输出不变。与FPGA相比,CPLD的I/O更多,尺寸更小。
如今,通信系统使用很多标准,必须根据客户的需要配置设备以支持不同的标准。CPLD可让设备做出相应的调整以支持多种协议,并随著标准和协议的演变而改变功能。这为系统设计人员带来很大的方便,因为在标准尚未完全成熟之前他们就可以著手进行硬件设计,然后再修改代码以满足最终标准的要求。CPLD的速度和延迟特性比纯软件方案更好,它的NRE费用低於ASIC,更灵活,产品也可以更快入市。CPLD可编程方案的优点如下:
●逻辑和存储器资源丰富(Cypress Delta39K200的RAM超过480 Kb)
●带冗余路由资源的灵活时序模型
●改变引脚输出很灵活
●可以装在系统上后重新编程
●I/O数目多
●具有可保证性能的集成存储器控制逻辑
●提供单片CPLD和可编程PHY方案
由于有这些优点,设计建模成本低,可在设计过程的任一阶段添加设计或改变引脚输出,可以很快上市
CPLD的结构
CPLD是属於粗粒结构的可编程逻辑器件。它具有丰富的逻辑资源(即逻辑门与寄存器的比例高)和高度灵活的路由资源。CPLD的路由是连接在一起的,而FPGA的路由是分割开的FPGA可能更灵活,但包括很多跳线,因此速度较CPLD慢。
CPLD以群阵列(array of clusters)的形式排列,由水平和垂直路由通道连接起来。这些路由通道把信号送到器件的引脚上或者传进来,并且把CPLD内部的逻辑群连接起来。


CPLD之所以称作粗粒,是因为,与路由数量相比,逻辑群要大得到。CPLD的逻辑群比FPGA的基本单元大得多,因此FPGA是细粒的。
CPLD的功能块
CPLD最基本的单元是宏单元。一个宏单元包含一个寄存器(使用多达16个乘积项作为其输入)及其它有用特性。
因为每个宏单元用了16个乘积项,因此设计人员可部署大量的组合逻辑而不用增加额外的路径。这就是为何CPLD被认为是“逻辑丰富”型的。

宏单元以逻辑模块的形式排列(LB),每个逻辑模块由16个宏单元组成。宏单元执行一个AND操作,然后一个OR操作以实现组合逻辑。

每个逻辑群有8个逻辑模块,所有逻辑群都连接到同一个可编程互联矩阵。
每个群还包含两个单端口逻辑群存储器模块和一个多端口通道存储器模块。前者每模块有8,192b存储器,后者包含4,096b专用通信存储器且可配置为单端口、多端口或带专用控制逻辑的FIFO。
CPLD有什麽好处?
I/O数量多
CPLD的好处之一是在给定的器件密度上可提供更多的I/O数,有时甚至高达70%。
时序模型简单
CPLD优于其它可编程结构之处在于它具有简单且可预测的时序模型。这种简单的时序模型主要应归功于CPLD的粗粒度特性。
CPLD可在给定的时间内提供较宽的相等状态,而与路由无关。这一能力是设计成功的关键,不但可加速初始设计工作,而且可加快设计调试过程。
粗粒CPLD结构的优点
CPLD是粗粒结构,这意味著进出器件的路径经过较少的开关,相应地延迟也小。因此,与等效的FPGA相比,CPLD可工作在更高的频率,具有更好的性能。
CPLD的另一个好处是其软件编译快,因为其易于路由的结构使得布放设计任务更加容易执行。

细粒FPGA结构的优点
FPGA是细粒结构,这意味著每个单元间存在细粒延迟。如果将少量的逻辑紧密排列在一起,FPGA的速度相当快。然而,随著设计密度的增加,信号不得不通过许多开关,路由延迟也快速增加,从而削弱了整体性能。CPLD的粗粒结构却能很好地适应这一设计布局的改变。


灵活的输出引脚
CPLD的粗粒结构和时序特性可预测,因此设计人员在设计流程的后期仍可以改变输出引脚,而时序仍保持不变。
新的CPLD封装
CPLD有多种密度和封装类型,包括单芯片自引导方案。自引导方案在单个封装内集成了FLASH存储器和CPLD,无须外部引导单元,从而可降低设计复杂性并节省板空间。在给定的封装尺寸内,有更高的器件密度共享引脚输出。这就为设计人员提供了“放大”设计的便利,而无须更改板上的引脚输出。


 


一. PLD/FPGA基本使用问题:
1.PLD,CPLD,FPGA有何不同?
2.我原来有一个74系列设计的电路,工作正常,为什么原封不动集成到PLD中以后却不能正常工作?
3.如何将信号做一定延时?
4.什么是IP核或IP库? 有那些种类?
5.如何设计3.3v,2.5v 等低电压PLD/FPGA的电源?
6.CPLD/FPGA的宏单元是怎么定义?一个宏单元对应多少门?


一. PLD/FPGA基本使用问题
1.PLD,CPLD,FPGA有何不同?
不同厂家的叫法不尽相同,PLD(Programmable Logic Device)是可编程逻辑器件的总称,早期多EEPROM工艺,基于乘积项(Product Term)结构。 FPGA (Field Programmable Gate Arry)是指现场可编程门阵列,最早由Xilinx公司发明。多为SRAM 工艺,基于查找表(Look Up Table)结构,要外挂配置用的EPROM。 Xilinx把SRAM工艺,要外挂配置用的EPROM的PLD叫FPGA,把Flash工艺(类似EEPROM工艺),乘积项结构的PLD叫CPLD; Altera把自己的PLD产品:MAX系列(EEPROM工艺),FLEX/ACEX/APEX系列(SRAM工艺)都叫作CPLD,即复杂PLD(Complex PLD),由于FLEX/ACEX/APEX系列也是SRAM工艺,要外挂配置用的EPROM,用法和Xilinx的FPGA一样,所以很多人把Altera的FELX/ACEX/APEX系列产品也叫做FPGA.


2. 我原来有一个74系列设计的电路,工作很正常,为什么原封不动集成到PLD中以后却不能正常工作,是芯片有问题吗?
这是一个非常有代表性的问题。设计PLD/FPGA内部电路与设计74的分立电路是有区别的。这个问题是由于电路中的毛刺造成的。电路布线长短不同造成延时不一致,有竞争冒险,会产生毛刺。分立元件之间存在分布电容和电感可以滤掉这些毛刺,所以用分立元件设计电路时,很少考虑竞争冒险和毛刺问题,但PLD/FPGA内部没有分布电容和电感,不可以滤掉任何毛刺(哪怕只有1ns)。有些毛刺是可以忽略的,有些是致命的(如D触发器的clk,clr,PRN端)、这些致命的毛刺将导致电路不能正常工作。这是设计FPGA和设计分立元件最大的不同。可以通过修改电路减少有害毛刺。


参见: 培训中心>培训资料> PLD设计技巧——消除组合逻辑产生的毛刺  和 PLD设计技巧——采用同步电路设计 ,根据经验,几乎所有稳定性或可靠性问题都是由PLD内部电路设计不合理造成的,这一点要千万小心。


3. 如何将信号做一定延时?
当需要对某一信号作一段延时时,初学者往往在此信号后串接一些非门或其它门电路,此方法在分离电路中是可行的。但在FPGA中,开发软件在综合设计时会将这些门当作冗余逻辑去掉,达不到延时的效果。用ALTERA公司的MaxplusII开发FPGA时,可以通过插入一些LCELL原语来产生一定的延时,但这样形成的延时在FPGA芯片中并不稳定,会随温度等外部环境的改变而改变,因此并不提倡这样做。在此,可以用高频时钟来驱动一移位寄存器,待延时信号作数据输入,按所需延时正确设置移位寄存器的级数,移位寄存器的输出即为延时后的信号。此方法产生的延时信号与原信号比有误差,误差大小由高频时钟的周期来决定。对于数据信号的延时,在输出端用数据时钟对延时后信号重新采样,就可以消除误差。


4.什么是IP核或IP库? 有那些种类?
IP核是指:将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器,SDRAM控制器,PCI接口等等设计成可修改参数的模块,让其他用户可以直接调用这些模块,这样就大大减轻了工程师的负担,避免重复劳动。随着CPLD/FPGA的规模越来越大,设计越来越复杂,使用IP核是一个发展趋势。 不过目前大多数库是收费的,如您希望一个免费方案,请到本站参考设计栏目里找一找。


5.如何设计3.3v,2.5v 等低电压PLD/FPGA的电源?
多用低压差线形稳压器(LDO)或采用开关电源,详细内容参见低电压PLD/FPGA的供电设计


6.CPLD/FPGA的宏单元是怎么定义?一个宏单元对应多少门?
宏单元(或逻辑单元)是PLD/FPGA的最基本单元,不同产品对这种基本单元的叫法不同,如LE,MC,CLB,Slices等,但每个基本单元一般都包括两部分,一部分实现组合逻辑,另一部分实现时序逻辑。各个厂家的定义可能不一样。对ALTERA的芯片,每个基本单元含一个触发器;对Xilinx的部分芯片,每个基本单元单元含两个触发器。一般不用“门”的数量衡量PLD/FPGA的大小,因为各家对门数的算法不一样,象ALTERA和Xilinx对门的计算结果就差了一倍,推荐用触发器的多少来衡量芯片的大小。如10万门的Xilinx的XC2S100有1200个slices,即含2400个触发器;5万门的ALTERA的1K50则含2880个LE,即2880个触发器。更详细资料请浏览PLD/FPGA原理栏目以下内容目前基本以Altera产品的应用为主,我们欢迎使用过其他PLD/FPGA的朋友来信发表自己的使用心得
二. ALTERA PLD软件使用问题:


1.能得到免费的PLD开发软件吗?
Altera提供免费试用软件Maxplus10.1 Baseline版,用硬盘号在www.altera.com上申请license ,可试用6个月,在DOS


模式下敲入 dir c: /w 即可看到serial number。 支持30,000门以下所有设计,支持原理图,AHDL语言和波形输入,支


持波形仿真,时间分析,编程下载. 或使用Altera提供免费另一种试用软件:MaxplusII的E+MAX版,目前的最高版本是10.1,可以编译VHDL文件,但只支持MAX系列。但建议用第三方软件编译VHDL,如FPGA Express,Leonard Spectrum,这些软件(不是全功能开放的版本)可以从Altera的网上下载(Baseline约40M,E+MAX约20M)。也可以向代理商索取。


2. 有网友发信问第一次运行BaseLine该怎样登记申请License文件,因此向第一次运行的朋友简单介绍一下注册的过程:
首先要知道自己的网卡号或硬盘序列号。最简单的方法是运行 max+plusII。在“Option”菜单中点“License Setup”这一项,会弹出个对话框,点击下面的“System Info”就可以看到网卡号(NIC)和硬盘序列号了。如果你有网卡就只需记下NIC,若没有网卡只有硬盘就记硬盘序列号。然后就上Altera的主页去登记,可以试试这个地址:


http://www.altera.com/cgi-bin/authcode91.pl   还是那个原则,有网卡就填NIC,没有就填硬盘序列号,写完后点


“Continue”,然后就要填一个表格,注意,Email地址不要写错了。写完了按“Continue”。注册完后Altera会向你的信箱发一封信,信里应该有个“License.dat”的文件(一般是作为附件),这就是注册文件了,把它保存到硬盘里。最后再运行max+plusII,还是在“Option”菜单中点“License Setup”这一项,点第一行的“Browse”,找到刚才保存的那个“License.dat”文件,现在应该就大功告成了。   (小猫提供)


3.如何安装Altera绑定的第三方软件?
如要安装Altera绑定的第三方EDA软件,如:FPGAexpress,modelsim,Leonard Spectrum最好先装FLEXLM管理(许多EDA软件自带FLEXLM管理安装)例如:安装MAX+PLUSII时,如选full setup 或者 选custom setup 选择要安装的组件时,将FLEXLM manager选中,都可将FLEXLM管理装好.安装好以后,在控制面板中会多一个FLEXLM License manager的图标,双击图标,选setup:找到lmgrd.exe和license的位置(lmgrd.exe在许多EDA软件中都有,例如:\maxplus2\lmgrd.exe) 通常在Auotoexec.bat中要加一句话:SET LM_LICENSE_FILE=C:\FLEXLM\license.dat 重启动机器即可。


(如用全功能版,必需有软件狗)


4.为什么有些按照标准VHDL语法编写的程序在MaxplusII下编译通不过?
MaxplusII支持大部分VHDL语法,但也有一些标准的VHDL语句不能支持(要参阅相关资料),最好的方法是采用专用VHDL语言综合工具综合,生成*.edif文件后再给MaxplusII做布线。参见:培训中心>培训资料>Maxplus与第三方EDA工具的接口。也可使用maxplusII的专用综合插件,详情点击此处。 由于QuartusII软件的综合能力大大优于MaxplusII,所以建议用户改用QuartusII进行HDL设计


5.为什么在用菜单Assign>device选择器件的时候找不到我想要的速度等级的芯片?
把菜单Assign>device中的:Show Only Fastest Speed Grages 前面的勾去掉即可.


6.什么是Setup/hold time ?
Setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。时hold time不够,数据同样不能被打入触发器。


7.在仿真时,如何设置时钟周期和总的仿真时间?
在出现仿真窗口后,要把菜单: Option>snap to the grid 的勾去掉,才可任意设置时钟频率,在菜单 File>End time 中可修改仿真时间。仿真时间越长,对内存和CPU要求也越大。


8.FPGA中中可以做各种RAM和ROM,那么如何初始化ROM?
调入ROM元件时(可用LPM_ROM或用MegaWizard Plug-In Manager调入) 软件会问初始化文件的名字,如你还没有做好这个文件,可以先填一个文件名,如: test.mif 或 test.hex (test这个文件现在并不存在),完成设计后编译,再建立波形文件*.SCF,打开仿真窗口simulator,此时可在菜单中找到Initialize>Initialize Memory (这个选项只有在仿真窗口出现后才会出现)此时你可以编辑初始化文件并输出成*.mif或*.hex文件(如test.mif 或 test.hex),


要再次编译。这样才算完成。


9. 在VHDL或Verilog中如何调用LPM库?
VHDL: 参阅 培训中心>在VHDL中如何调用LPM库;Verilog:


三. ALTERA PLD硬件使用问题:
1.如何计算功耗和供电电流问题?
对QuartusII的用户可以直接用QuartusII计算功耗。对MaxplusII的用户可以用这里的几个Excel小程序来自动计算功


耗和电流, 感兴趣的朋友不妨下载一试,如对有些参数不清楚,可查阅Altera Date BooK 或 光盘:


1.MAX7000   (13K)     2.FLEX10K/6K  (15K)   3. 最新自动计算功耗文件(包括APEX20K/10K/6K/7K)


2.3.3V或2.5V器件能用在5V系统中吗?
在Altera的器件中有两种电源管脚:VCCINT(内部电源)和VCCIO(I/O口电源)。对于MAX7000S,其内部电源只能接5V,MAX7000A/AE其内部电源只能接待3.3V;对于MAX7000S,其I/O口电源电源可采用5V和3.3V,MAX7000A/AE其外部I/O口电源可采用2.5V和3.3V ;对FLEX10K/6K 同7000S, 10KA/6KA/3000A同7000A/AE;对FLEX10KE VCCINT="2".5V,其I/O


口电源电源可采用2.5V和3.3V; 总而言之,Vccio接上合适的电压,3.3v和2.5v器件完全可以使用在5v系统中。


表一:
VCCINT MAX7000S MAX7000AE MAX3000A MAX7000B FLEX6K FLEX6KA FLEX10K FLEX10KA FLEX10KE ACEX1K
5V ★     ★   ★    
3.3V   ★     ★   ★  
2.5V     ★         ★


表二:
VCCIO 输入信号 输出信号驱动能力
5V  3.3V 2.5V 5V 3.3V 2.5V
5V  ★ ★ ▲ ★ ☆ ☆
3.3V ★ ★ ★ ★ ★ ☆
2.5V ★ ★ ★ ▲ ▲ ★


★表示可以直接连接      ☆表示可以连接,但要求信号接收端能承受对应的VCCIO电压      ▲表示信号不兼容,不可连接     *请注意:除了2.5V器件外(7000B,10KE等),Vccio不能大于Vccint。
*APEX20K内核是2.5V,I/O可接3.3V,兼容5V信号。对于内核1.8V的APEX20KE产品,有两种型号,以V结尾的型号I/O脚可以兼容5V,如EP20K400EBC652-3V;没有V的型号I/O脚不兼容5V。
Cyclone,Stratix等新一代FPGA器件的IO最高容限为4.7v,推荐最高使用电压是4.1v,所以不能直接把5v信号和FPGA相连,如一定需要连接,需要串电阻和打开PCI钳位而极管,详情可参阅官方文档。


3.如何解决下载电缆(ByteblasterMV)不能下载的问题?
1。检查Maxplus2菜单Assign>device中芯片型号与实际使用的芯片型号是否一致.出现编程窗口后,菜单option>


hardware中要选择ByteblasterMV. 
2。检查PC的CMOS设置中并口是否是ECP模式,如是WindowsNT或Windows2000,应先装ByteblasterMV驱动程序(NT的控制面板>多媒体>添加硬件,或Win2000的控制面板>添加新硬件>音频和游戏控制器, ByteblasterMV的driver在你的安装目录 \maxplus2\driver下
3。检查ByteblasterMV是否插反,换一条电缆试一试。
4。检查芯片是否发烫,芯片各边VCC,GND是否正常,有没有按Databook要求加1K或10K的上拉或下拉电阻,与


ByteblasterMV 连线是否正确。对FLEX/ACEX/APEX等系列FPGA的MSEL0/MSEL1和nCE管脚是否处理正确,没有使用的全局信号是否已接地。
5。参照数据手册或光盘,检查下载波形,(ACEX/APEX器件的下载波形见光盘中的AN116)
6。换一台计算机(极少数PC的主板并口不适合使用下载电缆)
7。最后一招:与Altera各地办事机构联系,获得技术支持.
注意:如用户使用自制的下载电缆,长度不应太长,30cm即可,过长会带来干扰,反射及信号过冲问题,引起数据传输错误,导致下载失败。如用户要求加长电缆,应购买并口电缆(打印机电缆)加长。(电子市场10元一根)


4.如何选择ALTERA的型号?
尽可能选用速度等级最低的芯片。尽可能选用电压比较低的芯片(性价比较好)。尽可能选用贴片封装的芯片。如果设计中超过256个宏单元的设计尽量选用FPGA。如果设计中需要较大的存储器和比较简单的外围逻辑电路,而且对速度、总线宽度和PCB板面积无特殊要求的情况下,尽量选用一片MAX3000系列的芯片和外接存储器。在速度较高的双向总线上尽量采用MAX3000系列的芯片。如需要>3000个逻辑单元而且需要较快的运行速度,或者需要PLL等功能,则可以考虑选择Cyclone。如果需要硬件乘法累加单元或者性能要求非常高,可以选用Stratix系列芯片。为保证及时供货和性价比,新设计应优先选择以下型号: EPM3032ALC44-10,EPM3064ATC100-10,EPM3128ATC144-10,EP1C3T144C8,EP1C6QC240C8等. 最好是先和代理商沟通,再确认所需型号。


5. 3.3V/2.5V 的ACEX/7000AE/3000A系列器件的配置EEPROM和下载电缆接几伏电压?
推荐都接3.3V,但由于ALTERA的3.3V/2.5V芯片I/O脚兼容5V,所以下载电缆接5v也可以。


6.不用的管脚如何处理?
不用的全局信号和专用输入管脚,应接地,如:Global clk,Global clear ,Ded input.  其他不用的管脚一般悬空. Maxplus2 中的报告文件(*.rpt)或者QuartusII中的*.pin文件 详细说明了管脚的接法. 如不用的管脚与外电路相连,为保证不影响外电路,应将此管脚定义为输入脚,但不接逻辑.


7. EPM7000/3000的几个全局输入脚GCLK1,OE2(GCLK2),OE1,GLCRn都是干什么的?怎么在编程中使用?
 GCLK:全局时钟脚,这个脚的驱动能力最强,到所有逻辑单元的延时基本相同,所以如系统有外部时钟输入,建议定义此脚为时钟脚。如想用其他脚为时钟输入,必须在在菜单:Assign>Global project logic synthesis>Automatic global>把GCLK前面的勾去掉。这样任意一个I/O脚均可做时钟输入脚。
OE1:全局输出使能,如有三态输出,建议由此脚来控制(也可由内部逻辑产生输出使能信号),优点和用法同上。
OE2/GCLK2:全局输出使能/全局时钟脚,两者皆可。
GCLRn:全局清零,如有寄存器清零,建议由此脚来控制(也可由内部逻辑产生清零信号),优点和用法同上。
分配这些脚和分配普通I/O脚是一样的, 先在Assign>device中选好器件型号,再在Assign>pin中填入你想分配的管脚号和类型,或直接在原理图中选中input或output,点鼠标右键,选>assign pin,填入你想分配的管脚号,编译一遍即可。但要注意菜单:Assign>Global project logic synthesis>Automatic global>中的设置。
其他芯片的全局脚的意义与此相同。


8. 为什么Altera提供的下载电缆很短? 对3.3v器件下载时,下载电缆的电源接几伏?
由于Altera的下载电缆是并行电缆,长度太长会导致信号的反射,毛刺和过冲,影响数据传输的正确性,所以下载电缆一般在30cm左右。如要加长,应该用并口电缆(打印机电缆)加长。 对3.3v器件下载时,下载电缆可以接5v (因为Altera3.3v芯片I/O可以最大容忍5.7v的信号输入),如下载电缆中使用的是74HC244或用户使用原装MVbyteblaster,则下载电缆也可以接3.3v.


9. 为什么有时用通用编程器烧EPC1或EPC1441会出错?
通用编程器基本上都支持Altera的芯片,如:ALL07/ALL11, SuperIII , Labtools,Leap 等,但Altera芯片的工艺在


改进,所以要求使用编程器厂家提供的最新版本软件。并保证试配头清洁。在大批量烧录EPC1或EPC1441时,Altera公司只推荐使用三家公司的编程器:1。Altera公司生产的专用编程器 2。DATA I/O公司编程器 3。BP公司编程器。使用以上三家公司的编程器可以保证烧录的质量和极低的坏片率,(编程器价格也不菲,如Altera的MPU编程器在¥20,000左右)小批烧录EPC1或EPC1441时,一般的通用编程器都可,但烧录的质量和坏片率要差一些,会出现烧录出错的情况,但编程器价格较低(¥1,000-10,000),适合一般中小客户。用户应在编程器价格和烧录质量之间做出选择.



第六节 VHDL模块以及常见错误

11.其他
  属性、时钟的表示
  属性指的是关于实体、结构体、类型、信号的一些特征。有些属性对综合(设计)非常有用,如:值类属性、信号类属性、范围类属性。以下简单列出这些属性的含义:
 值类属性
  值类属性分为’left,’right,’low,’high,’length.其中用符号“,”隔开对象名及其属性.。Left表示类型最左边的值;right表示类型最右边的值;low表示类型中最小的值high表示类型中最大的值;length表示限定型数组中元素的个数。
    例:
sdown       : in  std_logic_vector(8 downto 0);
sup            : in   std_logic_vector(0 to 8);
则这两个信号的各属性值如下:
sdown’left=8; sdown’rigt=0; sdown’low=0; sdown’high=8; sdown’length=9; sup’left=0; suq’right=8; sup’low=0; sup’high=8; sup’length=9;
 信号类属性
  这里仅介绍一个对综合及模拟均很有用的信号类属性:’event,它的值为布尔型,如果刚好事件发生在该属性所附着的信号上(即信号有变化),则其取值为Ture,否则为False利用此属性可决定时钟边沿是否有效,即时钟是否发生。
 例:时钟边沿表示
  若有如下定义: signal  clk: in std_logic;
则:clk=’1’ and clk’event , clk’event and clk=’1’表示时钟的上升沿。即时钟变化了,且其值为1,因此表示上升沿。
此外,还可利用预定义好的两个函数来表示时钟的边沿。
Rising_edge(clk) 表示时钟的上升沿
Falling_edge(clk) 表示时钟的下降沿
 范围类属性
  ‘range属性,其生成一个限制性数据对象的范围。
例如:
  signal  data_bus  : std_logic_vector (15 downto 0);
  data_bus’range=15  downto 0;

12.VHDL的模块
  至此,我们已知道VHDL的大致构成。下面以VHDL的两个模块,回顾一下VHDL的结构,一个是基本结构,一个是详细结构。其中包含关键字。<>中内容为对用户不同设计所需要填写的内容。
—VHDL  Model  Temlate(Overview)
library〈library_name〉;
use〈library_name〉.〈package_name〉.all;
entity〈entity_name实体名〉is
 〈port  list  for  your  design,列出设计的输入/输出信号端口>
end〈entity_name〉;
architecture〈architectrre_name〉of〈entity_name〉 is
—构造体声明区域
—声明构造体所用的内部信号数据类型
—如果使用元件例化,则在此声明所用的元件
—以下开始构造体,用于描述设计的功能
begin    —并行语句信号赋值
—process 进程(顺序语句描述设计)
—component instantiations元件例化
end 〈architecture_name〉;
—VHDL  Model  Template (Detailed)
—列出用户定义的库及程序包
library 〈library_name〉;
use 〈library_name〉,〈package_name〉.all;
—实体描述了用户设计的接口
entity〈enity_name〉 is
  generic(〈此处定义接口常数,如总线宽度,预定标计数器的计数模值等〉);
port(〈列出端口信息〉);
end〈entity_name〉;
—构造体是描述/实现设计部分
architecture〈architecture_name> of —构造体声明区域
—声明构造体所用的信号及数据类型,及子程序
—如果使用元件例化,则在此声明所用的元件
—元件声明如下:
component〈元件实体名〉
port(〈元件端口信息〉);
end  component;
begin—构造体开始,描述设计功能
—和并行语句描述设计的功能,
—最常用的并行语句是并行信号赋值,进程,元件例化。
—concurrent  signal  assignment(并行信号赋值简单形式):
〈resukt-signal_name信号名〉<=
—process:进程模块
process〈sensitivity  list敏感信号表〉
begin         —进程开始
—进程中为顺序语句,如:
—signal  and  variable  assignments          信号与变量的赋值
—if  and  case  statements                  —if-then-else 语句? case-when语句
—function  and  procedure  calls             函数,过程调用
end  process;
—元件例化,句法结构:
〈例化名〉:〈实体名,即元件名〉
generic  map (〈实际参数,如确定的总线宽度等〉)
port   map(〈端口列表〉);
end〈architecture_name〉;

13.常见错误
 隐含触发器
如以下代码:
library  ieee;
use  ieee.std_logic_1164.all;
entity  and2  is 
port ( a, b : in std_logic;
   c : out std_logic);
end  and2;
architecture  behave  of  and2  is
begin
  process (a, b)
  begin
        if ( a=’1’ and b=’1’)  then
               c<=’1’
        end  if;
   end  process;
end  behave;


  设计指原意是设计一个二输入与门,但因“if”语句中无“else”语句,在对此语句逻辑综合时为“else”语句中为:“C<=C;”,即保持不变。因此可能形成图6所示的电路:


2005101301656600.gif
图6

  利用MAX+PLUSII软件仿真时,除了“a=1”及“b=1”时“c=1”外,其他时刻的值都不确定。为改正此错误,仅需加上
else
     c<=’0’;
语句即可。
  这类错误在利用“if-then-else”语句设计组合电路时常犯的。
 时钟处理
  如以上所述,是为了设计一个带计数使能的计数器,但将falling_edge (clk)和ci=’1’在一起,有些综合器可能会生成错误电路或不能综合。
IF ( falling_edge (clk) and ci=’1’)  then
qcnt<=qcnt+1;
end  if;
    最好如下:
     if falling_edge (clk)  then
        if (ci=’1’)  then
             qcnt<=qcnt+1;
        end  if;
      end  if;
  此外,对于时钟电路,可省略“else”语句,它隐含表示“qcnt<=qcnt+1”。可加上此句,但下面的描述则无法综合:
      if (falling_edge (clk))  then
          qcnt<=qcnt+1;
      else
          qcnt<=datain;
       end  if;
  综合时会出现如下错误信息:
“Else Clause following a Clock edge must hold the state of signal”
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条