FPGA工程师Coding技能资料.docx

上传人:夺命阿水 文档编号:1204069 上传时间:2024-04-01 格式:DOCX 页数:10 大小:108.52KB
返回 下载 相关 举报
FPGA工程师Coding技能资料.docx_第1页
第1页 / 共10页
FPGA工程师Coding技能资料.docx_第2页
第2页 / 共10页
FPGA工程师Coding技能资料.docx_第3页
第3页 / 共10页
FPGA工程师Coding技能资料.docx_第4页
第4页 / 共10页
FPGA工程师Coding技能资料.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《FPGA工程师Coding技能资料.docx》由会员分享,可在线阅读,更多相关《FPGA工程师Coding技能资料.docx(10页珍藏版)》请在课桌文档上搜索。

1、FPGA工程师Coding技能资料本文是某FPGA技术牛根据自身有关FPGA开发流程、注意事项的个人总结,希望给FPGA初学者带来一定的帮助。众所周知,FPGA是一种可编程的逻辑器件芯片,为此FPGA设计可以分为软件设计和硬件设计两部分。硬件设计包括了对FPGA芯片电路、存储器及输入输出接口电路以及其他设备等外围设计,软件设计则包含了相应的HDL程序编写、以及嵌入式C语言程序。下面给大家详解一下FPGA编程,大家可能会遇到的五个方面的代码设计问题,及相关处理方法:(1)注释好的代码首先必须要有注释,注释至少包括文件注释,端口注释,功能语句注释。文件注释:文件注释就是一个说明文:这通常在文件的头

2、部注释,用于描述代码为那个工程中,由谁写的,日期是多少,功能描述,有哪些子功能,及版本修改的标示。这样不论是谁,一目了然。即使不写文档,也能知道大概。接口描述:module的接口信号中,接口注释描述模块外部接口,例如AHB接口,和SRAM接口等等。这样读代码的人即可能够判断即模块将AHB接口信号线转换成SRAM接口信号。功能语句注释:内部关键逻辑,状态机某状态,读过程、写过程。注释的重要性,毋庸置疑,好的注释,能够提高代码的可读性,可维护性等等。总之,养成注释的好习惯,代价不大,但是收益很大。(2)语句开始写代码是,在FPGA设计中,特别是在可综合的模块实现中,Verilog的语句是很固定的。

3、在FPGA的设计中,不外乎时序逻辑和组合逻辑,除此之外,别无他法。对于开始功能编码来说,只需知道组合逻辑信号即可生效,时序逻辑在时钟的下一拍起效就够了。下面是编码的实例。组合逻辑:两种组合逻辑的描述,其功能是一致的。assignA=B?l:D?2:3;always(*)if(B)A=Ielseif(D)A=2;elseA=3;组合逻辑如果是异步复位的话,描述如下:always(posedgesys_clkornegedgerst_n)if(!rst_n)a=O;elsea=b;也就是说,在verilog的可综合电路的编码中,只需要三种语句,分别是assign,always(*)及时序的alwa

4、ys(CLOCK_EDGEclk)oCLOCK.EDGE可以是上升沿或者下降沿。为什么用always(*)而不是always(敏感信号列表包含所有敏感信号列表,如果在coding过程中,漏掉了某个敏感信号,则会导致仿真不正确,例如本例中,敏感变量列表中,需要BOrC但是如果漏掉一个,仿真就会在B或C有变化时,输出没有变化。导致仿真和功能不一致,但是对于综合工具来说,功能还是能够正常工作的,不会因为敏感变量列表中的值未列全而不综合某条语句。某些情况下,敏感列表的值可能有十几个甚至更多,遗漏是可能发生的事情,但是为了避免这种问题,最好采用always(*)而不用敏感变量列表的方式,来避免仿真结果不

5、一致的情况发生。(3)赋值:老话重提,阻塞与非阻塞很多同志喜欢钻研阻塞赋值和非阻塞赋值,这两种赋值,分别在always块里面用于的阻塞给组合逻辑赋值,非阻塞”=”给时序逻辑赋值。这应该是铁律,应该在编码过程中被严格的遵守下来。“为什么?不这么用程序也能跑二这句话部分是正确的,疑问永远是工程师最好的老师。诚然,某些情况下,不严格的执行也跑,但是在某些情况下,实现二者就不一样。对于下面两个例子来说明,为什么?对于ValUeI的描述方式:其综合后的如下所示:如果从实际的编译结果上看b和bl及C和Cl其使用阻塞赋值和非阻塞赋值最终的结果是一致的,因此,也就是说,某些情况下,二者的编译结果一致。而对于V

6、alUe2的描述方式,其综合后的电路图如下所示。而对于第二中描述方式,阻塞赋值和非阻塞赋值的区别就显现出来了,从综合后的图中可以看到,cl信号是bl信号的寄存,而c信号和b信号为同一信号,都为a信号的寄存。作为FPGA工程师,一项基本的能力,就是要知道代码综合后的电路和时序,不要让其表现和你预想的不一致,“不一致”就意味着失败。即是代码的失败,也是工程的失败。对于阻塞和非阻塞赋值区别和详细说明来说,其能够编写一本书(如有时间也可专题详述),但是对FPGA工程师,对于VeriIog的编码而言,则只需要按照时序逻辑用“二”非阻塞,组合逻辑用阻塞“二”赋值即可。不要挑战那些规律,试图通过语言的特性来

7、生成特殊电路的尝试是不可取的,开个玩笑的话,是没有前途的,要把设计的精力放在通过可用的电路来实现需求上,不要舍本逐末。在数字电路设计中,我们需要的是一个确定的世界,“所见及所得,不要让你所想的和综合编译工具得认识不一致。这也就是不要乱用和混用这两个赋值的原因。(4)一个变量一个“家”不要在两个always语句中同一个变量赋值。(这是必须的)也尽量不要在同一个always语句中,对两个变量赋值。(这是可选的)如果是一组信号,其有共同的控制条件,则在同一always语句中赋值能够减少代码行数,提高可读性,除此之外,最好分开来写。如果几个不太相关的信号在同一里面赋值,其可读性极差,在组合逻辑中,还容

8、易产生IatCh。而前者赋值方式,综合工具肯定会报错,这到不用很担心,因为能够报的错误时是最容易被发现的。俗语说:“咬人的狗不叫”,而对于FPGA设计来说“致命的BUG,从来不报错二(5)锁存FPGA中不要有锁存器的产生。最容易产生的是在always(*)语句中,最后一定是所有分支条件都要描述并赋值,(一定要有最后的else)。状态机中,同样如此,不但需要有default的状态,每个状态的都要有所有的分支都要赋值。锁存器,是FPGA设计的大敌,因为会导致非你想要的错误功能的产生,并且导致时序分析错误,就会产生前述的问题“所见不是所得“,并且综合工具不会报错。如果你设计的电路功能,仿真正确,而实

9、际工作不正常,有一部分的原因是生成了锁存器,如果设计很大,不容易查的话,可以打开综合报告,搜索“LATCH”关键词,查看是否有锁存器的产生,一句话“锁存器,必杀之二时序逻辑会产生锁存器吗?当然不会,时序逻辑综合结果必然是触发器,因此不用检查时序逻辑的分支条件。综上:这是写在coding之前的话,编码的主要功能应该是用可靠的电路来描述FPGA功能和需求,不要试图通过语言的特性来描述功能,设计的主要精力应放在用已知的电路(组合逻辑,时序逻辑)描述未知功能。“高校人才输出不足,工程实践能力不高”,一直以来都是FPGA从业者需要面临的问题。目前,大多数电子信息类人才主要使用C语言、C+或者JAVA等,

10、基于FPGA编程语言的学习教程、师资力量及培训体系还未系统化形成,加之FPGA语言本身存在硬件和语言较为复杂,开发工具更新迭代很快,传统单一的教学方式,让很多想学习FPGA的电子工程师止步不前。学习过程中,无平台、无实战、无项目“三无”制约了大部分学员投身FPGA技术的决心。英特尔FPGA中国创新中心的专家指出:基于FPGA工程师的个人职业发展,主要分为两大方向:一类是偏向于FPGA软件工程师,以软件开发为主,学习课程内容在未来,主要以人工智能、数据分析及机器视觉等新兴领域的加速应用,主要采取OPenCL和HLS技术实现硬件协同开发;第二类是FPGA硬件工程师,以逻辑设计为主,学完后具备FPG

11、A针对某个领域的应用设计,集成电路设计及芯片验证的能力。FPGA学习必备技能能力树(思维导图):92(UARTFSMC9MSJI符”塔34,者三RAMs m iFPGA工程师需要掌握的技能1 .需求核对阶段1)良好的沟通技能:需要与需求方核对需要的功能及性能,态度很重要,谦逊专业的沟通态度才能对需求理解无偏差,理解错误,后面就可能引起构架的修改。对外团队协作能力很大一部分体现在这里。2)行业背景知识:需要把需求翻译成FPGA的功能点以及逻辑上的处理流程(流程及需要的数据结构,用硬件的大白话就是大的PiPeline流水线功能以及每个功能对应的表项及数据结构)。2 .总体设计阶段1)功耗评估:xi

12、linx和altera两家都会提供功耗评估excel,填入使用的1P、逻辑使用量、频率、IO类型、时钟等,可以评估总的功耗大小,以及每一路电源的电流的大小预估,这个很重要,是板子能否做稳定的一个重要因素。2) IO设计:电路连接设计相关,把对外设计的接口特别是牵涉到存储器、transceiver相关的接口、IO电平标准、时钟分布都要例化出来,然后编译通过,软件输出CSV文件,里面包含了IO的电平标准及外围连接,这一步极大提升做板一次成功率。因为每一代FPGA以及每个系列器件的结构总有些不同,特别是共享PLL,transceiver,存储器的共享模块设计都会有些不同,因此安全做法是把要使用的除L

13、UT和RAM以外的资源例化,然后编译通过,保证外围连接不出错。3)软硬件接口设计:制定软件要访问FPGA的方式、以及软硬件如何配合、FPGA如何初始化功能。这块需要有经验,不同的应用场合需要设计不同机制。大体可以分为以下几类:寄存器访问:直接或间接功能表项的配置数据、命令、状态的互传:高性能一般要设计DMA,不同应用DMA要求不同。4)逻辑部分的总体规划:时钟域规划、复位规划、模块划分及模块功能规划、FIFO/RAM使用大小及类型规划、模块间传递接口规划(最好标准化,类似软件API,以后可复用)、编码规则制定。3 .设计及编码1)良好的COding规则:主要是命名,命名至少要区分:同步寄存器、

14、跨时钟域寄存器、连线这些信号命名最好在前缀区分,这个在后期下约束时可以用通配符找信号。2)查找及看懂硬核的使用手册3)领域内常见算法的实现:比如针对网络:共享缓存设计、各种HASH算法实现、LPM查表算法、各种匹配算法实现。加解密领域,需要把串行算法翻译成硬件并行算法的能力。针对目前流行的神经网络,针对各种网络如何设计高效的数据流入方式,如何进行特征的预处理。4 .仿真验证1)仿真平台搭建,看设计大小及是否将来重用,设计大且重用多,考虑UVM这些设计方法及平台搭建。简单的就利用verilog,通过task任务的设计及调用来设计仿真平台。需要掌握testbench设计、仿真工具使用及debug。

15、2)测试规划及项目抽取,这个是目前大部分FPGA工程师容易忽略的地方,设计要稳定,要系统的进行项目抽取,最好是另一拨人根据自己对规格的理解来系统抽取测试项目,这样完整验证后保证功能大体稳定。而性能测试一般要在实机测试中进行。5 .后端物理约束:可以从IO分配的工程中导入。时序约束IP的约束导入其他软件相关的特殊信号的约束(一般通过在代码中用属性表示)掌握看后端的原理图、器件映射图、出问题时可以在后端把一些网络剪短或连接(ISE之前提供,ViVad。不知道是否还有这种工具)6 .调试掌握调试工具:一般厂商都会提供:transceiver调试工具测试回环,无码率等。内部逻辑分析仪使用存储器调试:各

16、种物理层参数的配置及调试各种下载方式掌握。软硬件联调时各种调试命令的设计想成为一名FPGA工程师,对FPGA的结构是必须要掌握的。FPGA芯片主要是:可编程I/O单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块这六部分组成。基本可编辑逻辑单元基本可编辑逻辑单元是FPGA可编程逻辑的主体FPGA-一般是基于SRAM工艺。其基本可编程逻辑单元几乎都是由查找表(LUT)和寄存器组成。FPGA内部的LUT一般为4输入、主要完成纯组合逻辑的功能。而内部寄存器结构相当灵活,可以配置为带同步、异步复位或置位、时钟使能的触发器,也可以配置为锁存器。

17、FPGA一般依赖寄存器完成同步时序的逻辑设计。比较经典的基本可编程逻辑单元的配置是一个寄存器和一个查找表。但不同厂商的寄存器和查找表的内部结构有一定差异,而且寄存器和查找表的组合模式也不同。主要的三个厂商的可编程逻辑结构为:(1) AIerta的可编程逻辑单元通常被称为LE(LogicElement,逻辑单元),由一个Register和一个LUT组成。而Altera的大多数FPGA又将10个LE有机组合起来,构成更大的逻辑功能单元逻辑阵列模块(LAB,LogicArrayBlock),LAB中除了LE还包含LE间的进位链、LAB控制信号、局部互连线资源、LUT级联链、寄存器级联链等连线和控制资

18、源。(2) XilinX的可编程逻辑单元被称为SliCe,由上下两部分组成。每部分都由一个RegiSter和一个LUT组成,被称为LC(LogiCCe11,逻辑单元),两个LC间有一些共用逻辑。可以完成LC刍间的配合与级联。(3) 1.attice的可编程逻辑单元叫PFU(ProgrammableFunctionUnit,可编程功能单元),由8个LUT和89个RegiSter组成。可编程10单元可编程八0单元通过软件可以适配不同的电气标准和物理特性。内嵌RAM块FPGA的内嵌RAM块可以灵活配置为单端口RAM(SPRAM,SinglePortRAM),双端口RAM(DPRAM,DoubIePo

19、rtRAM),伪双端口RAM(PseudoDPRAM),CAM(ContentAddressableMemory),FIFO(FirstInputFirstOutput)等常用存储器结构。FPGA中没有专用的ROM硬件资源,实现ROM的思路是对RAM赋予初值,并保持该初值。CAM,即内容地址存储器。CAM这种存储器在其每个存储单元都包含了一个内嵌的比较逻辑,写入CAM的数据会和其内部存储的每一个数据进行比较,并返回与端口相同的所有内部数据的地址。总之,RAM是一种根据地址读、写数据的存储单元,而CAM返回的是与端口数据相匹配的内部地址。FPGA内部实现RAM、ROM、CAM、FIFe)等存储结

20、构是基于内嵌RAM块的,并根据需求自动生成相应的粘合逻辑(GkleLogiC)以完成地址和片选等控制逻辑。Xilinx常见的RAM块大小是4Kbit和18Kbit两种结构,LatTlce常用的RAM块大小是9Kbit,Altera的RAM块最为灵活,一些高端器件内部同时含有两种RAM块结构,分别是M9KRAM(9Kbit),M-144K(144Kbit)。除了RAM外,AlteraXilinx和LatTIce的FPGA还可以灵活的将LUT配置成RAM、ROMFIFo等存储结构,这种技术被称为分布式RAM。丰富的布线资源布线资源连通FPGA内部所有单元,连线的长度和工艺决定了信号在连线上的驱动能

21、力和传输速度。有以下3种布线资源可以利用。(1)全局性的专用布线资源:用来完成器件内部的全局时钟和全局复位置位的布线。(2)长线资源:完成器件Bank间的一些高速信号和一些第二全局时钟信号的布线。(3)短线资源:完成基本逻辑单元之间的逻辑互联和布线。在基本逻辑单元内部还存在各式各样的布线资源和专用时钟、复位等控制信号线。底层嵌入功能单元通用程度较高的嵌入功能模块,PLL(PhaseLockedLoop),DLL(DelayLockedLoop),DSP和CPU等。Altera芯片集成是PLL,Xilinx芯片主要集成的是DLL,LatTIce的新型FPGA同时集成了PLL和DLL以适应不同需求

22、。Altera芯片的PLL模块分为增强型PLL和快速PLLoXilinx芯片的DLL的模块名称为CLKDLL,在高端FPGA中CLKDLL的增强型模块为DCM(DigitalCloCkManager),数字时钟管理模块)。内嵌专用硬核内嵌专用硬核的通用性相对较弱,不是所有的FPGA器件都有硬核。FPGA设计流程讲完了FPGA的结构,接下来说说FPGA的设计流程。FPGA是可编程芯片,所以FPGA的设计方法包括硬件设计和软件设计两部分。硬件包括FPGA的芯片电路、存储器、输入输出接口电路及其他设备,软件即是相应的HDL程序等。FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开

23、发的过程。典型FPGA的开发流程一般包括包括功能定义/器件选型、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程与调试等主要步骤。功能定义/器件选型在FPGA设计项目开始之前,必须有系统功能的定义和模块的划分,另外就是要根据任务要求,如系统的功能和复杂度,对工作速度和器件本身的资源、成本、以及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。一般使用自顶向下的办法,把系统分成若干个基本单元,再把每个基本单元分为下一层次的基本单元,一直这样做下去,直到能直接用EDA元件库为止。设计输入设计输入是将所设计的系统或电路以开发软件要求的某种形式标示出来并且

24、输给EDA工具的过程。最常用的方法有硬件描述语言(HDL)和原理图输入方法等。原理图输入方式是一种最直接的描述方式,在可编程芯片发展的早期应用比较广泛,它将所需的器件从元件库中调出来,画出原理图。这种方法虽然直观并易于仿真,但效率很低,且不易维护,不利于模块构造和重用。更主要的缺点是可移植性差,当芯片升级后,所有的原理图都需要作一定的改动。目前,在实际开发中应用最广的就是HDL语言输入法,利用文本描述设计,可以分为普通HDL和行为HDL。普通HDL有ABEL、CUR等,支持逻辑方程、真值表和状态机等表达方式,主要用于简单的小型设计。而在中大型工程中,主要使用行为HDL,其主流语言是Verilo

25、gHDL和VHDLo这两种语言都是美国电气与电子工程师协会(IEEE)的标准,其共同的突出特点有:语言与芯片工艺无关,利于自顶向下设计,便于模块的划分与移植,可移植性好,具有很强的逻辑描述和仿真功能,而且输入效率很高。除了这IEEE标准语言外,还有厂商自己的语言。也可以用HDL为主,原理图为辅的混合设计方式,以发挥两者的各自特色。功能定义/器件选型功能仿真也称为前仿真。是在编译之前对用户所设计的电路进行逻辑功能验证,此时的仿真没有延迟信息,仅对初步的功能进行检测。仿真前,要先利用波形编辑器和HDL等建立波形文件和测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形

26、,从中便可以观察各个节点信号的变化。如果发现错误,则返回设计修改逻辑设计。常用的工具有MOdelTeCh公司的ModelSimSysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等软件。功能定义/器件选型所谓综合就是将较高级抽象层次的描述转化成较低层次的描述。综合优化根据目标与要求优化所生成的逻辑连接,使层次设计平面化,供FPGA布局布线软件进行实现。就目前的层次来看,综合优化(SyntheSiS)是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表,而并非真实的门级电路。真实具体的门级电路需要利用FPGA制造商的布局布线

27、功能,根据综合后生成的标准门级结构网表来产生。为了能转换成标准的门级结构网表,HDL程序的编写必须符合特定综合器所要求的风格。由于门级结构、RTL级的HDL程序的综合是很成熟的技术,所有的综合器都可以支持到这一级别的综合。常用的综合工具有Synplicity公司的Synplify/SynplifyPro软件以及各个FPGA厂家自己推出的综合开发工具。综合后仿真综合后仿真检查综合结果是否和原设计一致。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可以估计门延时带来的影响。但这一步骤不能估计线延时,因此和布线后的实际情况还是有一定的差距,并不十分准确。目前的综合工具较为成熟,对于一般

28、的设计可以省略这一步,但如果在布局布线后发现电路结构和设计意图不符,则需要回溯到综合仿真后来确认问题所在。在功能仿真中介绍的软件工具一般都支持综合后仿真。实现与布局布线布局布线可以理解为利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑最佳的布局,选择逻辑与输入输出功能链接的布线通道进行连线,并产生相应文件;实现是将综合生成的逻辑网表配置到具体的FPGA芯片上,布局布线是其中最重要的过程。布局将逻辑网表中的硬件原语和底层单元合理的配置到芯片内部的固有硬件结构上,并且往往需要在速度最优和面积最优之间做出选择。布线根据布局的拓扑结构,利用芯片内部的各种连线资源,合理正确地连接各个元件。目前,F

29、PGA结构非常复杂,特别是在有时序约束条件时,需要利用时序驱动的引擎进行布局布线。布线结束后,软件会自动生成标高提供有关设计中各部分资源的使用情况。由于只有FPGA芯片生产厂商对芯片结构最为了解,所以布局布线必须选择芯片开发商提供的工具。功能定义/器件选型时序仿真也称后仿真,是指将布局布线的延时信息反标注到设计网表中来检测有无时序违规(即不满足时序约束条件或器件固有的时序规则,如建立时间、保持时间等)现象。时序仿真包含的延迟信息最全,也最精确,能较好的反映芯片的实际工作情况。由于芯片的内部延时不一样,不同的布局布线方案也给延时带来不同的影响。因此在布局布线后,通过对系统和各个模块进行时序仿真,

30、分析其时序关系,估计系统性能,以及检查和消除竞争冒险是非常有必要的。板级仿真与验证板级仿真主要应用于高速电路设计中,对高速系统的信号完整、电磁干扰等特征进行分析,一般都以第三方工具进行仿真和验证。芯片编程与调试设计的最后一步就是芯片编程与调试。芯片编程是指产生使用的数据文件(位数据流文件,BitstreamGeneration),然后将编程数据下载到FPGA芯片中。其中,芯片编程需要满足一定的条件,如编程电压、编程时序和编程算法等方面。逻辑分析仪(LogicAnalyzer,LA)是FPGA设计的主要调试工具,但需要引出大量的测试管脚,而且LA价格昂贵。目前,主流的FPGA芯片生产商都提供了内

31、嵌的在线逻辑分析仪(如XilinXISE中的ChipScopeAlteraQuartusll中的SignalTapll以及SignalProb)来解决上述矛盾,他们只需要占用芯片少量的逻辑资源,有很高的实用价值。FPGA设计语言及平台在了解了大概的FPGA设计流程之后,设计语言及平台也是FPGA工程师们必须掌握的东西。FPGA用的是HDL语言,HDL的全称是:HardwareDescriptionLanguage,注意其中D代表的是Description而不是DeSign。这说明了HDL语言不是用来设计硬件的,仅仅只是用来描述硬件的。描述这个词精确的反映了HDL语言的本质,HDL语言是只不过是

32、已知硬件电路的文本表现形式而已,只是将以后的电路用文本的形式描述出来。在学习HDL时首先要了解的是HDL的可综合性问题。硬件设计时分几个层次,每个层次都需要设计。最高层是算法级、向下依次是体系结构级、寄存器传输级、门级、物理版图级。使用HDL的好处就是我们已经设计好了一个寄存器传输级的电路,那么用HDL描述以后转化为文本形式,剩下的向更低层转换的时候就可以交给EDA去做了,这就大大降低了工作量,这就是可综合的概念。也就是在这一层上对硬件单元进行描述可以被EDA工具理解并转化为更低层的电路。在编写或阅读HDL语言,尤其是可综合的HDL,应该看到的是语言背后所对应的硬件电路结构。语法方面,HDL语

33、法掌握贵在精,不在多。30%的基本HDL语句可以完成95%以上的电路设计,很多生僻语句不能被所有的综合软件支持,在程序移植或者更换平台时,容易产生兼容性问题,也不利于他人阅读和修改。建议多用心钻研常用语句,理解那些语句的含义。HDL主要有VHDL和Verilog两种,目前最流行的是VerilogoVHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部

34、分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。Verilog就是在用用最广泛的C语言的基础上发展起来的一种件描述语言VeriIog的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,VHDL的学习要困难一些。但VerilogHDL较自由的语法,也容易造成初学者犯一些错误,这一点要注意。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号