第一篇:FPGA芯片配置总结
FPGA芯片配置总结
[日期:2010-05-22 ] [来源:本站编辑 作者:佚名] [字体:大 中 小](投递新闻)
1.FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式。
AS由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,EPCS系列.如EPCS1,EPCS4配置器件专供AS模式,目前只支持Cyclone系列。使用Altera串行配置器件来完成。Cyclone期间处于主动地位,配置期间处于从属地位。配置数据通过DATA0引脚送入 FPGA。配置数据被同步在DCLK输入上,1个时钟周期传送1位数据。(见附图)
PS则由外部计算机或控制器控制配置过程。通过加强型配置器件(EPC16,EPC8,EPC4)等配置器件来完成,在PS配置期间,配置数据从外部储存部件,通过DATA0引脚送入FPGA。配置数据在DCLK上升沿锁存,1个时钟周期传送1位数据。(见附图)
JTAG接口是一个业界标准,主要用于芯片测试等功能,使用IEEE Std 1149.1联合边界扫描接口引脚,支持JAM STAPL标准,可以使用Altera下载电缆或主控器来完成。
FPGA在正常工作时,它的配置数据存储在SRAM中,加电时须重新下载。在实验系统中,通常用计算机或控制器进行调试,因此可以使用PS。在实用系统 中,多数情况下必须由FPGA主动引导配置操作过程,这时FPGA将主动从外围专用存储芯片中获得配置数据,而此芯片中fpga配置信息是用普通编程器将设计所得的pof格式的文件烧录进去。专用配置器件:epc型号的存储器
常用配置器件:epc2,epc1,epc4,epc8,epc1441(现在好象已经被逐步淘汰了)等
对于cyclone cycloneII系列器件,ALTERA还提供了针对AS方式的配置器件,EPCS系列.如EPCS1,EPCS4配置器件也是串行配置的.注意,他们只适用于cyclone系列.除了AS和PS等单BIT配置外,现在的一些器件已经支持PPS,FPS等一些并行配置方式,提升配置了配置速度。当然所外挂的电路也和PS有一些区别。还有处理器配置比如JRUNNER 等等,如果需要再baidu吧,至少不下十种。比如Altera公司的配置方式主要有Passive Serial(PS),Active Serial(AS),Fast Passive Parallel(FPP),Passive Parallel Synchronous(PPS),Passive Parallel Asynchronous(PPA),Passive Serial Asynchronous(PSA),JTAG等七种配置方式,其中Cyclone支持的配置方式有PS,AS,JTAG三种.对FPGA芯片的配置中,可以采用AS模式的方法,如果采用EPCS的芯片,通过一条下载线进行烧写的话,那么开始的“nCONFIG,nSTATUS”应该上拉,要是考虑多种配置模式,可以采用跳线设计。让配置方式在跳线中切换,上拉电阻的阻值可以采用10K
3,在PS模式下tip:如果你用电缆线配置板上的FPGA芯片,而这个FPGA芯片已经有配置芯片在板上,那你就必须隔离缆线与配置芯片的信号.(祥见 下图).一般平时调试时不会把配置芯片焊上的,这时候用缆线下载程序.只有在调试完成以后,才把程序烧在配置芯片中, 然后将芯片焊上.或者配置芯片就是可以方便取下焊上的那种.这样出了问题还可以方便地调试.在AS模式下tip: 用过一块板子用的AS下载,配置芯片一直是焊在板子上的,原来AS方式在用线缆对配置芯片进行下载的时候,会自动禁止对FPGA的配置,而PS方式需要电路上隔离。
4,一般是用jtag配置epc2和flex10k,然后 epc2用ps方式配置flex10k.这样用比较好.(这是我在网上看到的,可以这样用吗?怀疑中)望达人告知.5,下载电缆,Altera下的下载电缆分为byteblaster和byteblasterMV,以及ByteBlaster II,现在还
推出了基于USB-blaster.由于BB基本已经很少有人使用,而USB-Blaster现在又过于昂贵,这里就说一下BBII和 BBMV的区别.BBII支持多电压供电5.5v,3.3v,2.5v,1.8v;
BBII支持三种下载模式:AS,可对Altera的As串行配置芯片(EPCS系列)进行编程PS,可对FPGA进行配置
JTAG,可对FPGA,CPLD,即Altera配置芯片(EPC系列)编程而BBMV只支持PS和JTAG6,一般在做FPGA实验板,(如cyclone系列)的时候,用AS+JTAG方式,这样可以用JTAG方式调试,而最后程序已经调试无误了后,再用 AS模式把程序烧到配置芯片里去,而且这样有一个明显的优点,就是在AS模式不能下载的时候,可以利用Quartus自带的工具生成JTAG模式下可以利用jic文件来验证配置芯片是否已经损坏,方法祥见附件.7.Altera的FPGA可以通过单片机,CPLD等加以配置,主要原理是满足datasheet中的时序即可,这里我就不多说了,有兴趣的朋友可以看看下面几篇文章,应该就能够明白是怎么回事了.8.配置时,quartus软件操作部分:
(1).assignment-->device-->device&pin options-->选择configuration scheme,configuaration mode,configuration device,注
意在不支持远程和本地更新的机器中configuration mode不可选择,而configuration device中会根据不同的配置芯片产生pof文件,如果选择自动,会选择最小密度的器件和适合设计
(2).可以定义双口引脚在配置完毕后的作用,在刚才的device&pin option-->dual-purpose pins-->,可以在配置完毕后继续当I/O口使用
(3).在general菜单下也有很多可钩选项,默认情况下一般不做改动,具体用法参见altera configuration handbook,volume2,sectionII.(4)关于不同后缀名的文件的适用范围:
sof(SRAM Object File)当直接用PS模式下将配置数据下到FPGA里用到,USB BLASTER,MASTERBLASER,BBII,BBMV适用,quartusII会自动生成,所有其他的配置文件都是由sof生成的.pof(Programmer Object File)也是由quartusII自动生成的,BBII适用,AS模式下将配置数据下到配置芯片中
rbf(Raw Binary File)用于微处理器的二进制文件.在PS,FPP,PPS,PPA配置下有用处
rpd(Raw Programing Data File)包含bitstream的二进制文件,可用AS模式配置,只能由pof文件生成hex(hexadecimal file)这个就不多说了,单片机里很多
ttf(Tabular Text File)适用于FPP,PPS,PPA,和bit-wide PS配置方式
sbf(Serial Bitstream File)用PS模式配置Flex 10k和Flex6000的jam(Jam File)专门用于program,verigy,blank-check
参考链接:http:///news/2010-05/2141.htm
第二篇:FPGA芯片(技术)发展现状及应用调研
FPGA芯片(技术)发展现状及应用调研
1引言
1.1背景
1.2FPGA简介
FPGA全称是现场可编程门阵列(Field Programmable Gate Array),结构是什么?
有哪些分类?
基本的作用?
1.3比较
MS 把 CPU,GPU,FPGA 和 ASIC 放在 Flexibility VS Efficiency的角度进行对比,这个也是我们经常使用的方法。再次强调,灵活性(通用性)一定意味着效率的损失,反之亦然[2]
这几个相比的优缺点又各是什么
1.4国家战略
中国从2006年到2020年实施的《国家中长期科学与技术发展规划纲要》[3]中,明确指出重点领域中的第7条信息产业与服务业,要重点发展集成电路及关键元器件。集成电路及芯片是计算机的核心部件,随着中美两国在科技上的竞争愈加激烈,为遏制我国电子信息产业向高端、核心领域发展,如中兴华为大疆等高科技公司接连被美国制裁。实现核心技术和装备的国产化和自主可控已上升到国家战略层面。
FPGA国产化是实现集成电路国产化的重要一环,同时也作为十二五核高基重大专项——千万门FPGA设计,2发展历史
FPGA是PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)、PLD(可编程逻辑器件)等可编程器件的基础上发展起来的。
FPGA与ASIC(专用集成电路)、GPU(中央处理器)的比较
[5]ASIC芯片尺寸小、功能强、功耗低,但其设计复杂,并且由批量要求
FPGA价格较低廉,能现场编程,但体积大、能力有限且功耗比ASIC大
2.1起源
可编程电路发展历程1、20世纪70年代 基于与或阵列的PLD(可编程逻辑器件)
特点:结构简单,只能实现用少量乘积项表示的小规模电路2、1984年 Altera公司制造出紫外线可擦写的EPLD
特点:可重复编程3、1985年 Lattice公司制造出电可擦写的GAL
特点:设计灵活、高速、低功耗和改写迅速方便等4、1985年 Xilinx公司制造出FPGA
特点:结合PLD可编程性与MPGA(掩膜可编程门阵列)通用连线结构,因而具备可编程性和高逻辑密度。
中国FPGA技术的追赶历程列出引用文献
1、反向研制
2、正向研制
3、完备化的正向研制
据不完全统计显示,国内目前有以高云半导体、京微齐力、上海安路、紫光同创、AGM和上海复旦微电子等为代表的数家国产FPGA企业
国内研究文献大多从1992年开始出现FPGA技术的介绍
早先的介绍书籍 朱明程.FPGA 原理及应用设计
复旦大学专用集成电路与系统国家重点实验室
2004研制10万门针对数据通信的FPGA芯片“FDP100K”
成果转化-复旦微电子企业
2.2
(1)(embedded)eFPGA(嵌入式现场可编程门电路)
eFPGA思想由2014年王成诚博士等人提出,作者随后成立FlexLogix公司并将其商业化,(2)
2.3 FPGA的结构[5]
采用逻辑单元阵列的新概念,包括可配置逻辑模块(CLB)、输入输出模块(IOB)和内部连线三个部分
2.4 FPGA的设计流程
利用开发软件和编程工具对器件进行开发的过程,2.5 发展趋势[5]
2003年文章指出几点
1、大容量、低电压、低功耗FPGA2、系统级高密度FPGA3、FPGA与ASIC相互融合4、动态可重构FPGA
不仅在系统重新配置电路功能,而且在系统动态重构电路逻辑,比如对于时序逻辑系统,动态可重构FPGA的意义在于其时序逻辑的发生不是通过调用芯片内不同区域、不同逻辑资源来组合而成,而是通过对FPGA进行局部或全局的芯片逻辑的动态重构而实现的。
3发展现状
2014年[6]
三种编程方式的对比
3.1 企业
两大两小
Xilinx、Intel(Altera)、Lattice、Microsemi
Altera(被Intel收购)和Xilinx
深耕eFPGA也有前两个公司FlexLogic 和 QuickLogic
调研Xilinx公司产品系列
主流是28nm工艺,属于芯片产业中绝大多数的产品制程,而且国内上海微电子近年内已经突破28nm光刻机的研制,可以满足大部分的芯片替代生产需求。
Xilinx公司在28nm制程上推出7系列的四大类型芯片,覆盖低端中端高端市场,分别是Spartan系列(低端)、Artix系列(中低端)、Kintex(中高端)及Vertex系列(高端)产品。
系列 | 应用 |
Spartan7 | 汽车消费类应用,传感器融合人以及嵌入式视觉 |
Artix7 | 各类成本功耗敏感型应用,软件定义无线电、机器视觉照相及低端无线回传 |
Kintex7 | 3G/4G无线、平板显示器和video over IP解决方案 |
Vertex7 | 10G-100G联网、便携式雷达及ASIC原型设计 |
在20nm工艺上推出UltraScale系列
3.2 行业分析
2021年在倪光南院士的电子信息产业发展建议中[4],整理了最新国产核心电子器件的研制进展
4前景
4.1 应用前景
4.2 前沿进展
5总结
5.1优缺点分析
5.2启示
5.3可行的工作
由于FPGA与中央处理器的接口存在高延迟,高性能计算受限[1]
参考文献
[1]冯园园,张倩.嵌入式FPGA技术发展现状及启示[J].集成电路应用,2018, 35(08):1-4.[2]唐杉.可编辑门阵列FPGA在智慧云中的应用案例分析[J].集成电路应用.2018(01).[3]中华人民共和国国务院.国家中长期科学和技术发展规划纲要(2006—2020年)[EB/OL].(2006-02-09)[2021-04-01].http://
[4]倪光南,朱新忠.自主可控关键软硬件在我国宇航领域的应用与发展建议[J].上海航天(中英文).2021, 38(03):30-34.[5]陆重阳,卢东华.FPGA 技术及其发展趋势[J].微电子技术,2003,31(01):5-7.[6]Yang Haigang, Zhang Jia, Zhang Jia,etc.REVIEW OF ADVANCED FPGA ARCHITECTURES AND TECHNOLOGIES[J].JOURNAL OF ELECTRONICS(CHINA).2014,31(5).
第三篇:常用芯片总结
常用芯片总结
1.音频pcm编码DA转换芯片cirrus logic的cs4344,cs4334
4334是老封装,据说已经停产,4344封装比较小,非常好用。还有菲利谱的8211等。
2.音频放大芯片4558,LM833,5532,此二芯片都是双运放。
3.244和245,由于244是单向a=b的所以只是单向驱动。而245是用于数据总线等双向驱动选择。同时245的封装走线非常适合数据总线,它按照顺序d7-d0。
4.373和374,地址锁存器,5.max232和max202,max3232 TTL电平转换
6.网络接口变压器。需要注意差分信号的等长和尽量短的规则。
7.amd29系列的flash,有bottom型和top型,主要区别是loader区域设置在哪里?bottom型的在开始地址空间,top型号的在末尾地址空间,我感觉有点反,但实际就是这么命名的。
8.74XX164,它是一个串并转换芯片,可以把串行信号变为并行信号,控制数码管显示可以用到。
9.网卡控制芯片CS8900,ax88796,rtl8019as,dm9000ae当然这些都是用在isa总线上的。24位AD:CS5532,LPC2413,ADS1240,ADS1241效果还可以仪表运放:ITL114,不过据说功耗有点大
音频功放:一般用LM368
音量控制IC: PT2257,Pt2259.PCM双向解/编码 :/ CW6691.cirruslogic公司比较多
2.4G双工通讯IC CC2500
1.cat809,max809,这些是电源监控芯片,当低于某一电压以后比如3.07v等出现一个100ms的低电平,实现复位功能。当然这个要求是低复位。max810,cat810等就是出现一个100ms的高电平。还有一些复位芯片,既有高又有低复位输出,同时还有带手动触发复位功能,型号可以查找一下。
2.pericom的pt7v(pi6cx100-27)压控振荡器,脉冲带宽调制。
1、语音编解码TP3054/3057,串行接口,带通滤波。
2、现在用汉仁的网卡变压器HR61101G接在RTL8019AS上,兼容的有VALOR的FL1012、PTT的PM24-1006M。
3、驱动LED点阵用串行TPIC6B595,便宜的兼容型号HM6B59
5交换矩正: mt 88168*16
双音频译码器: 35300
我们原来使用单独的网络变压器,如常用的8515等。现在我们用YDS的一款带网络变压器的RJ45接口。其优点:1.体积仅比普通的RJ45稍微大一点。
2.价格单买就6元,我觉得量稍微大点应该在4-5左右或者更低。
3.连接比较方便只要把差分信号注意就可以了。
缺点:用的人不多,不知道是因为是新,还是性能不好,我们用了倒没什么问题。不过没有做过抗雷击等测试,我觉得既然YDS做了这样的产品,性能应该问题不大。我觉得最好再加一点典型电路的原理图等。比如说网络接口,串口232,485通讯,I2C级连,RAM连接,FLASH连接,电压转换,时钟电路,打印接口电路,以及如何在没有典型电路的时候,把芯片和已有系统有效连接等。首先要有开关电源需求,额定电流,功率,几路输出,主路设计等等如何测试其性能指标达到要求。
便宜的液晶驱动芯片HT1621
要求一般的485芯片SN308
2CH375A USB主控芯片 南京沁恒的数据采集,我用tlc2543, AD7656,AD976
运放OP27,很好用,经受住时间考验,连续3年
我介绍一下我现在用的光耦,就是光电隔离:
TLP521-1 TLP521-2 TLP521-4 线性光耦hcr210不错
其实我只用过TLP521-1,很好用的,TLP521-2 的价格比 TLP521-1要贵两倍多,不只为什么,恩 LED导通电流是小了一点,它们由于速率有点低所以推荐高速光耦
6N1361M
6N13710M
单通道HDLC协议控制器:MT8952;
音频放大器LM2904;
512k*8带软件保护可段/整片擦除的flah28SF040;
关于电压转换芯片的一点体会:AD7865做电机控制的使用很不错,四路350K,14位精度,单电压,+/-10V输入,推荐使用AD7864的升级用。掉电保存可以选择NVRAM,带电池的,maxim有很多
74ALVC164245,电平转换芯片,3.3V电平和5V电平总线接口用
74HCT14:复位隔离缓冲
ULN2003:达林顿输出的驱动芯片,带继电器灭弧的二极管,驱动继电器不错
MAX708:复位芯片,带高低电平和手动复位功能
CPU:虽然不推荐选用***货,但是多一个选择也不错,SuperH系列的CPU性能不错
1:usb控制器,cypress公司的cy7c63723,cy7c68013,63723是otp的建议初次搞usb接口的不要使用,调试起来很麻烦。
2:cpld,fpga用xilinx的型号很全
3:2.4g rf收发芯片nrf2401a
看门狗 813、705、706等
1、LI358/LM324 小信号放大器,通用型的当然你要求太高就的另选了。
2、24C08/24C16 EEPROM 感觉还可以!
3、MPS3100
1,可做充电器的电压升降的IC,SP34063,感觉使用起来还是听方便的2,RF IC,NRF2401,NREF2402,还有功能更强的集成增强型8051内核的好象是 NRF24E1,不过我没用过
3,音频功放TPA021
13.HT12D,是与“HT12E”对应的解码芯片。也有红外的解码芯片。
4.IRF640N,MOSFET,电力场效应管
电能(ATT7022A、SA9904B)、压力(PGA309)、温度(DS18B20、K型热电偶MAX6675)、湿度(SHT10)、液位(LM1042)、烟雾(NIS-09C+MC145018)、红外(HS0001)、距离(TDC-GP1)、转速(KM115-1),codec(AMBE-2000)、can(SJA1000)、gps(u-blox)、无线数传(nRF905、nRF9e5)
cirruslogic--cs5460计量芯片,0.1级
ADE7758三相电力计量芯片0.5级
ATT7022三相电能计量芯片0.5级,可作多功能表
24bit的有AD7712AN
温度传感器:AD592CN,环境稳定25度时精度,+/-0.5度
第四篇:FPGA高手总结
一个FPGA高手的总结
很早之前就想对这几个月工作经历写的东西,一是作为自己的总结,二是自己也很想将自己这段时间的一些经历和大家分享一下,希望对初学者而言能使得他们能少走一些弯路。只是公司里的事情很多,最近经常加班,所以一直拖到现在。
能来到这家公司应该是一种缘份--缘起NIOS。当初三月份altera来我们学校建立SOPC实验室的时候自己还不知道NIOS是什么东西,只是想在altera的FAE讲完NIOS后多问他几个时序约束的问题,然后拷一份PPT回去。但是想不到因为那一份NIOS的培训资料,我认识了edacn上的cawan,他给我讲了很多NIOS的东西,之后是丁哥在SOC版帖了位NIOS大赛的通知,然后我和队友就去报了名,并去川大参加了NIOS的培训,认识了峻龙的FAE----也是我现在的boss。在这里要谢谢cawan、丁哥、和我一起参加NIOS竞赛的队友刘科以及我的BOSS,是他们让我有了这一段的经历。在公司里的几个月,做的项目其实不多,但是收获还是有一些,我觉得收获最大的是设计理念的改变,这也是我这段时间最想总结的,我会在后面逐渐阐述。
时序是设计出来的我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中,给我感触最深的是华为的那句话:时序是设计出来的,不是仿出来的,更不是湊出来的。在我们公司,每一个项目都有很严格的评审,只有评审通过了,才能做下一步的工作。以做逻辑为例,并不是一上来就开始写代码,而是要先写总体设计方案和逻辑详细设计方案,要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作所占的时间要远大于编码的时间。总体方案主要是涉及模块划分,一级模块和二级模块的接口信号和时序(我们要求把接口信号的时序波形描述出来)以及将来如何测试设计。在这一级方案中,要保证在今后的设计中时序要收敛到一级模块(最后是在二级模块中)。什么意思呢?我们在做详细设计的时候,对于一些信号的时序肯定会做一些调整的,但是这种时序的调整最多只能波及到本一级模块,而不能影响到整个设计。记得以前在学校做设计的时候,由于不懂得设计时序,经常因为有一处信号的时序不满足,结果不得不将其它模块信号的时序也改一下,搞得人很郁闷。在逻辑详细设计方案这一级的时候,我们已经将各级模块的接口时序都设计出来了,各级模块内部是怎么实现的也基本上确定下来了。由于做到这一点,在编码的时候自然就很快了,最重要的是这样做后可以让设计会一直处于可控的状态,不会因为某一处的错误引起整个设计从头进行。做逻辑的难点在于系统结构设计和仿真验证刚去公司的时候BOSS就和我讲,做逻辑的难点不在于RTL级代码的设计,而在于系统结构设计和仿真验证方面。目前国内对可综合的设计强调的比较多,而对系统结构设计和仿真验证方面似乎还没有什么资料,这或许也从一个侧面反映了国内目前的设计水平还比较低下吧。
以前在学校的时候,总是觉得将RTL级代码做好就行了,仿真验证只是形式而已,所以对HDL的行为描述方面的语法不屑一顾,对testbench也一直不愿意去学--因为觉得画波形图方便;对于系统结构设计更是一点都不懂了。到了公司接触了些东西才发现完全不是这样。其实在国外,花在仿真验证上的时间和人力大概是花在RTL级代码上的两倍,现在仿真验证才是百万门级芯片设计的关键路径。仿真验证的难点主要在于怎么建模才能完全和准确地去验证设计的正确性(主要是提高代码覆盖),在这过程中,验证速度也是很重要的。验证说白了也就是怎么产生足够覆盖率的激励源,然后怎么去检测错误。我个人认为,在仿真验证中,最基本就是要做到验证的自动化。这也是为什么我们要写testbench的原因。在我现在的一个设计中,每次跑仿真都要一个小时左右(这其实算小设计)。由于画波形图无法做到验证自动化,如果用通过画波形图来仿真的话,一是画波形会画死(特别是对于算法
复杂的、输入呈统计分布的设计),二是看波形图要看死,三是检错率几乎为零。
那么怎么做到自动化呢?我个人的水平还很有限,只能简单地谈下BFM(bus function model,总线功能模型)。以做一个MAC的core为例(背板是PCI总线),那么我们需要一个MAC_BFM和PCI_BFM及PCI_BM(PCI behavior.model)。MAC_BFM的主要功能是产生以太网帧(激励源),随机的长度和帧头,内容也是随机的,在发送的同时也将其复制一份到PCI_BM中;PCI_BFM的功能则是仿PCI总线的行为,比如被测收到了一个正确帧后会向PCI总线发送一个请求,PCI_BFM则会去响应它,并将数据收进来;PCI_BM的主要功能是将MAC_BFM发送出来的东西与PCI_BFM接收到的东西做比较,由于它具有了MAC_BFM的发送信息和PCI_BFM的接收信息,只要设计合理,它总是可以自动地、完全地去测试被测是否工作正常,从而实现自动检测。华为在仿真验证方面估计在国内来说是做的比较好的,他们已建立起了比较好的验证平台,大部分与通信有关的BFM都做好了,听我朋友说,现在他们只需要将被测放在测试平台中,并配置好参数,就可以自动地检测被测功能的正确与否。在功能仿真做完后,由于我们做在是FPGA的设计,在设计时已经基本保证RTL级代码在综合结果和功能仿真结果的一致性,只要综合布局布线后的静态时序报告没有违反时序约束的警告,就可以下到板子上去调试了。事实上,在华为中兴,他们做FPGA的设计时也是不做时序仿真的,因为做时序仿真很花时间,且效果也不见得比看静态时序分析报告好。当然了,如果是ASIC的设计话,它们的仿真验证的工作量要大一些,在涉及到多时钟域的设计时,一般还是做后仿的。不过在做后仿之前,也一般会先用形式验证工具和通过静态时序分序报告去查看有没有违反设计要求的地方,这样做了之后,后仿的工作量可以小很多。
在HDL语言方面,国内语言很多人都在争论VHDL和verilog哪个好,其实我个人认为这并没有多大的意义,外面的大公司基本上都是用verilog在做RTL级的代码,所以还是建议大家尽量学verilog。在仿真方面,由于VHDL在行为级建模方面弱于verilog,用VHDL做仿真模型的很少,当然也不是说verilog就好,其实verilog在复杂的行为级建模方面的能力也是有限的,比如目前它还不支持数组。在一些复杂的算法设计中,需要高级语言做抽象才能描述出行为级模型。在国外,仿真建模很多都是用System C和E语言,用verilog的都算是很落后的了,国内华为的验证平台好像是用System C写。
在系统结构设计方面,由于我做的设计还不够大,还谈不上什么经验,只是觉得必须要具备一些计算机系统结构的知识才行。划分的首要依据是功能,之后是选择合适的总线结构、存储结构和处理器架构,通过系统结构划分要使各部分功能模块清晰,易于实现。这一部分我想过段时间有一点体会了再和大家分享,就先不误导大家了。
规范很重要
工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性。
在逻辑方面,我觉得比较重要的规范有这些:
1.设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。这样做乍看起来很花时间,但是从整个项目过程来看,绝对要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。
2.代码规范。
a.设计要参数化。比如一开始的设计时钟周期是30ns,复位周期是5个时钟周期,我们可以这么写:
重
parameter CLK_PERIOD = 30;parameter RST_MUL_TIME = 5;parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;...rst_n = 1'b0;# RST_TIME rst_n = 1'b1;...# CLK_PERIOD/2 clk <= ~clk;如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行新例化就行了,从而使得代码更加易于重用。b.信号命名要规范化。1)信号名一律小写,参数用大写。2)对于低电平有效的信号结尾要用_n标记,如rst_n。3)端口
第五篇:FPGA程序总结
1流水灯程序
module ww(clk,led,rst);
input clk,rst;
output [3:0]led;
reg [3:0]led;
reg [24:0] cnt;
always@(posedge clk or negedge rst)
begin
if(!rst)cnt<=25'd0;
else
begin
if(cnt==25'd24999999)cnt<=25'd0;
else cnt<=cnt+25'd1;
end
end
通过cnt对时钟的计数实现0.5s定时。设输入时钟是50M always@(posedge clk or negedge rst)
begin
if(!rst)led<=4'b1111;
else
begin
if(cnt==25'd24999999)
begin
led<=led<<1;
if(led==4'b0000)led<=4'b1111;
end
else led<=led;
end
end endmodule
学会计数判断实现定时,和移位的使用
将第二个always改为下面的,就是跑马灯了。(相当向左循环移位)always@(posedge clk or negedge rst)
begin
if(!rst)led<=4'b0101;
else
begin
if(cnt==25'd24999999)
led<={led[2:0],led[3]};
else led<=led;
end
end
2共阴数码管
3FH,06H,5BH,4FH,66H,6DH,7DH,07H[0-7]7FH,6FH ,77H,7CH,39H,5EH,79H,71H[8-F]注意:easyfpga板独立的2个数码管是共阴的,断码8位顺序:dp,g,f,e,d,c,b,a//dp在高位 0—F显示 输入时钟50M
module ww(clk,seg,wei,rst);
input clk,rst;
output [7:0]seg;
output [1:0]wei;
reg [7:0]seg;
reg [3:0]dat;reg [25:0] cnt;
always@(posedge clk or negedge rst)//1秒定时 begin
if(!rst)cnt<=26'd0;
else
begin
if(cnt==26'd49999999)cnt<=26'd0;else cnt<=cnt+26'd1;
end
end
always@(posedge clk or negedge rst)begin
if(!rst)dat<=4'b0000;
else
begin
if(cnt==26'd49999999)begin
dat<=dat+1'b1;
if(dat==4'hf)dat<=0;end
end
always@(dat)
begin
case(dat)
4'h0:seg=8'h3f;
4'h1:seg=8'h06;
4'h2:seg=8'h5b;else dat<=dat;end
4'h3:seg=8'h4f;4'h4:seg=8'h66;4'h5:seg=8'h6d;4'h6:seg=8'h7d;4'h7:seg=8'h07;4'h8:seg=8'h7f;4'h9:seg=8'h6f;4'ha:seg=8'h77;4'hb:seg=8'h7c;4'hc:seg=8'h39;4'hd:seg=8'h5e;4'he:seg=8'h79;4'hf:seg=8'h71;endcase end
assign wei=2'b00;endmodule