浅谈VHDLVerilog的可综合性以及对初学者的一些建议
- 格式:doc
- 大小:4.81 KB
- 文档页数:2
VerilogHDL和VHDL的区别VHDL和Verilog HDL 的区别低层次建模VHDL和Verilog HDL都可以描述硬件,然后,在低层次硬件描述上VERILOG HDL好于VHDL。
这是因为Verilog HDL最初就是⽤来创建和仿真逻辑门电路的。
实际上,Verilog HDL有内置的门或者是低层次的逻辑门,因此,设计者能够⽤Verilog代码实例门电路⽽在VHDL中不可以。
Verilog的门级元件有:and, nand, or, nor, xor, xnor, buf, not, bufif0, notif0, bufif1, notif1, pullup, pulldown.Verilog的开关级元件有:pmos, nmos, rpmos, rnmos, cmos, rcmos, tran, rtran, tranif0, rtranif0, tranif1, rtranif1.更加重要的是,Verilog⽀持⽤户⾃定义元件,因此,设计者可以定义他们⾃⼰的单元元件。
这个特点对于ASIC的设计者来说是必须和受欢迎的。
VHDL同样有⼀些低层次的嵌⼊式的逻辑门,如NOT, AND, NAND, OR, NOR, XOR, XNOR.举例如下:or u1(x,y,z); (in Verilog) <=> x <= y OR z; in VHDLand u2(i1,i2,i3); (in Verilog) <=> i3 <= i2 AND i3; in VHDL⾼层次建模另⼀⽅⾯,在⾼层次硬件建模⽅⾯,VHDL⽐Verilog HDL要强。
VHDL⽐Verilog HDL提供了更多的特点和构造结构,这些使得VHDL更适合⾼层次建模。
在⽐较VHDL和Verilog后,以下⼏个主要不同的特点来⽀撑⾼层次建模。
1、在VHDL中,⽤户⾃定义数据类型Verilog有⾮常简单的数据类型,这些数据类型全部由Verilog语⾔⾃⼰定义(⽤户不能⾃⼰定义数据类型)。
fpga的编程方法FPGA(Field-Programmable Gate Array)是一种可编程的逻辑器件,能够根据用户的需求进行编程,实现各种不同的功能。
FPGA的编程方法有多种,包括硬件描述语言和图形化编程工具。
本文将介绍几种常用的FPGA编程方法,并对其特点和应用进行详细阐述。
一、硬件描述语言(HDL)硬件描述语言是一种用于描述数字电路的语言,常用的HDL有VHDL (VHSIC Hardware Description Language)和Verilog。
这种编程方法将硬件电路抽象为逻辑门、寄存器等基本元素,并通过编写代码来描述它们之间的连接关系和功能。
HDL具有描述精确、灵活性强的特点,适用于复杂的电路设计和开发。
使用HDL进行FPGA编程的过程大致包括以下几个步骤:1. 设计电路结构:根据需求和功能设计电路的逻辑结构,包括各个模块的功能和连接关系。
2. 编写HDL代码:使用VHDL或Verilog编写描述电路结构和功能的代码,包括模块实例化、信号赋值、时序控制等。
3. 综合与布局:将HDL代码综合为门级网表,然后进行布局布线,生成可配置的FPGA逻辑电路。
4. 下载与调试:将生成的逻辑电路下载到FPGA芯片中,并进行功能验证和调试。
二、图形化编程工具除了使用HDL进行编程,FPGA的编程方法还包括使用图形化编程工具,如LabVIEW FPGA和Xilinx System Generator等。
这些工具提供了可视化的界面,用户只需通过拖拽和连接图形元件,即可完成对FPGA的编程。
图形化编程工具的使用过程相对简单,适合初学者或对硬件电路编程不熟悉的人。
用户只需选择所需的功能模块,将其拖入工作区域,并通过连接线将各个模块连接起来。
然后,通过配置模块的参数和时序,即可生成对应的FPGA逻辑电路。
三、特殊领域的FPGA编程方法除了传统的HDL和图形化编程工具,还有一些特殊领域的FPGA编程方法。
一、HDL不是硬件设计语言过去笔者曾碰到过不少VHDL或Verilog HDL的初学者问一些相似的问题,诸如如何实现除法、开根号,如何写循环语句等等。
在这个论坛上,也时常能看到一些网友提出这一类的问题。
对于这些问题,首先要明确的是VHDL和Veriglog并非是针对硬件设计而开发的语言,只不过目前被我们用来设计硬件。
HDL是Hardware Description Language的缩写,正式中文名称是“硬件描述语言”。
也就是说,HDL并不是“硬件设计语言(Hardware Design Langu age)”。
别看只差这一个单词,正是这一个单词才决定了绝大部分电路设计必须遵循RTL的模式来编写代码,而不能随心所欲得写仅仅符合语法的HDL代码。
二、HDL的来历之所以是“硬件描述语言”,要从HDL的来历说起。
VHDL于1980年开始在美国国防部的指导下开发,完成于1983年,并于1987年成为IEEE 的标准。
当初开发这种语言,是出于美国国防部采购电子设备的需要。
美军的装备采购自私人企业,时常要面对这样一种风险:如果某种武器大量装备部队,而其中某个零件的供应商却在几年后倒闭了,那这种武器的再生产、维修和保养都会出现大问题。
而电子设备、尤其是集成电路的内部结构较为复杂,若出现前面所说的情况要找其他公司生产代用品非常困难。
于是美国防部希望供应商能以某种形式留下其产品的信息,以保证一旦其破产后能由其他厂商迅速生产出代用品。
显然,当初的设计文档显然是不能交出来的,这在美国会涉及商业机密和知识产权问题。
于是美国防部就想出了一种折衷的方法——描述硬件的语言,也就是VHDL。
通过VHDL,供应商要把自己生产的集成电路芯片的行为描述出来:比如说,加了什么样的信号后过多少时间它能输出什么等等。
这样,如果有必要让其他厂商生产代用品,他们只需照着VHDL 文档,设计出行为与其相同的芯片即可。
这样的代用品相当于是新厂商在不了解原产品结构的情况下独立设计的,所以不太会涉及知识侵权。
FPGA核心知识详解(3):那些让FPGA初学者纠结的仿真核心提示:对于FPGA初学者而言,如何正确了解并理解FPGA的仿真是关键。
应广大FPGA初学者和爱好者要求,编辑根据多名在FPGA领域有过多年工作经验的前辈介绍,特此为大家整理并分享以下关于FPGA各种仿真的简洁介绍。
若大家有任何需要补充的或本文有任何不当之处,欢迎在评论中加以说明。
同时也可加入FPGA技术交流群(QQ:263281510)跟大家一起探讨,更欢迎大家加入论坛参与互动。
初学者学习FPGA,必定会被它的各种仿真弄的晕头转向。
比如,前仿真、后仿真、功能仿真、时序仿真、行为级仿真、RTL级仿真、综合后仿真、门级仿真、布局布线后仿真等。
Quartus和Modelsim软件的仿真形式Quartus II有两种仿真形式:1、功能仿真;2、时序仿真。
Quartus II调用Modelsim的两种仿真形式为:1、RTL级仿真;2、Gate-level仿真。
以下内容均经过资料查证,详细如下:理解方法一当用quartus进行仿真时,分为功能仿真(al)和时序仿真(TIming);当用Modelsim-Altera时,分为功能仿真(RTL)、综合后仿真(post-synthesis)和布局布线仿真(Gate-level)。
其中,功能仿真又称为前仿真,布局布线仿真又称为后仿真。
注:此处的功能仿真(RTL)与1中的功能仿真(al)是不一样的,前者是HDL级仿真,后者是门级网表的功能仿真。
(1)当在quartus中调用Modelsim-Altera进行RTL仿真时(前提是在第三方仿真工具中选择Modelsim-Altera),步骤如下:a)编写源文件和测试文件;b)Assignment-》setTIng-》simulaTIon-》不选中run gate leve simulaTIon.。
..。
,选中nativelink-》添加测试文件,填写文件名;c)start analysiselabration;。
共41页资源类别: HDL 语言内部公开1.0密级版本文档编号文档中心Verilog HDL 入门教程(仅供内部使用)yyyy/mm/dd日期:批准:日期:中研基础批准:2004.8.3日期:中研基础拟制:版权所有 不得复制修订记录初稿完成1.002004.8.3作者描述修订版本日期绝密请输入文档编号Verilog HDL 入门教程2004-08-16第2页,共41页版权所有,侵权必究目 录285 结构建模..............................................................274.8 case 语句. (25)4.7 条件语句 (25)4.6.6 连接运算符 (25)4.6.5 条件运算符 (24)4.6.4 按位逻辑运算符 (23)4.6.3 逻辑运算符 (22)4.6.2 关系运算符 (21)4.6.1 算术运算符 (21)4.6 运算符和表达式 (20)4.5.2 寄存器类型 (20)4.5.1 线网类型 (20)4.5 数据类型 (18)4.4.2 常量 (18)4.4.1 值集合 (18)4.4 数字值集合 (18)4.3 格式 (17)4.2 注释 (17)4.1.3 书写规范建议 (17)4.1.2 关键词 (17)4.1.1 定义 (17)4.1 标识符 (17)4 Verilog HDL 基本语法....................................................163.3.4 混合设计描述.. (15)3.3.3 行为描述方式 (14)3.3.2 数据流描述方式 (12)3.3.1 结构化描述方式 (12)3.3 三种建模方式 (11)3.2 时延 (11)3.1.3 模块语法 (10)3.1.2 模块的结构 (9)3.1.1 简单事例 (9)3.1 模块 (9)3 Verilog HDL 建模概述.....................................................72.4.2 能力. (7)2.4.1 历史 (7)2.4 Verilog HDL 简介 (6)2.3 设计方法学 (6)2.2 硬件描述语言 (5)2.1 数字电路设计方法 (5)2 HDL 设计方法学简介......................................................51 前言...................................................................绝密请输入文档编号Verilog HDL 入门教程2004-08-16第3页,共41页版权所有,侵权必究4010 附录A Verilog 保留字...................................................399 习题..................................................................398 其他方面..............................................................377.4 行为建模具体实例...................................................367.3 过程赋值语句......................................................357.2 顺序语句块........................................................357.1 简介.............................................................357 行为建模..............................................................346.3 数据流建模具体实例.................................................346.2 阻塞赋值语句......................................................346.1 连续赋值语句......................................................346 数据流建模............................................................315.4 结构化建模具体实例.................................................295.3 实例化语句........................................................285.2 模块端口..........................................................285.1 模块定义结构......................................................绝密请输入文档编号Verilog HDL 入门教程2004-08-16第4页,共41页版权所有,侵权必究Verilog HDL 入门教程关键词:摘 要:本文主要介绍了Verilog HDL 语言的一些基本知识,目的是使初学者能够迅速掌握HDL设计方法,初步了解并掌握Verilog HDL 语言的基本要素,能够读懂简单的设计代码并能够进行一些简单设计的Verilog HDL 建模。
一、HDL不是硬件设计语言过去笔者曾碰到过不少VHDL或Verilog HDL的初学者问一些相似
的问题,诸如如何实现除法、开根号,如何写循环语句等等。在这个论坛上,也时常能看到
一些网友提出这一类的问题。对于这些问题,首先要明确的是VHDL和Veriglog并非是针对
硬件设计而开发的语言,只不过目前被我们用来设计硬件。HDL是Hardware Description
Language的缩写,正式中文名称是“硬件描述语言”。也就是说,HDL并不是“硬件设计语言
(Hardware Design Language)”。别看只差这一个单词,正是这一个单词才决定了绝大部分电
路设计必须遵循RTL的模式来编写代码,而不能随心所欲得写仅仅符合语法的HDL代码。二、
HDL的来历之所以是“硬件描述语言”,要从HDL的来历说起。VHDL于1980年开始在美国国
防部的指导下开发,完成于1983年,并于1987年成为IEEE的标准。当初开发这种语言,是
出于美国国防部采购电子设备的需要。美军的装备采购自私人企业,时常要面对这样一种风
险:如果某种武器大量装备部队,而其中某个零件的供应商却在几年后倒闭了,那这种武器
的再生产、维修和保养都会出现大问题。而电子设备、尤其是集成电路的内部结构较为复杂,
若出现前面所说的情况要找其他公司生产代用品非常困难。于是美国防部希望供应商能以某
种形式留下其产品的信息,以保证一旦其破产后能由其他厂商迅速生产出代用品。显然,当
初的设计文档显然是不能交出来的,这在美国会涉及商业机密和知识产权问题。于是美国防
部就想出了一种折衷的方法——描述硬件的语言,也就是VHDL。通过VHDL,供应商要把自己
生产的集成电路芯片的行为描述出来:比如说,加了什么样的信号后过多少时间它能输出什
么等等。这样,如果有必要让其他厂商生产代用品,他们只需照着VHDL文档,设计出行为与
其相同的芯片即可。这样的代用品相当于是新厂商在不了解原产品结构的情况下独立设计的,
所以不太会涉及知识侵权。Verilog HDL也形成于差不多的年代,是由Gateway Design
Automation公司大约在1983年左右开发的。其架构同VHDL相似,但主要被用来进行硬件仿
真。或许私人公司更注重实用,Verilog要比VHDL简洁得多。由此可见,这两种最流行的用
于电路设计的语言,没有一种是为了设计硬件而开发的(更何况80年代还没有现在的那些功
能强大的EDA软件呢)。因此,当初制订HDL语言标准的时候,并没有考虑这些代码如何用硬
件来实现。换句话说,有些代码写起来简单,实现起来却可能非常复杂,或者几乎不可能实
现。三、HDL代码的可综合性现在回到最初的问题上。为什么诸如除法、循环之类的HDL代
码总是会出错?由上一部分可知,任何符合HDL语法标准的代码都是对硬件行为的一种描述,
但不一定是可直接对应成电路的设计信息。行为描述可以基于不同的层次,如系统级,算法
级,寄存器传输级(RTL)、门级等等。以目前大部分EDA软件的综合能力来说,只有RTL或更
低层次的行为描述才能保证是可综合的。而众多初学者试图做的,却是想让软件去综合算法
级或者更加抽象的硬件行为描述。比如说,要想实现两个变量相除的运算,若在代码中写下
C=A/B,你将会发现只有一些模拟软件在前仿真中能正确执行这句代码,但几乎任何软件都不
能将其综合成硬件。不要怪软件太笨。试想一下,如果我们自己笔算除法是怎么做的?从高
位到低位逐次试除、求余、移位。试除和求余需要减法器,商数和余数的中间结果必须有寄
存器存储;而此运算显然不能在一个时钟周期里完成,还需要一个状态机来控制时序。一句
简单的C=A/B同所有这些相比显得太抽象,对于只能接受RTL或更低层次描述的EDA软件来
说确实太难实现。而如果代码是类似于(Verilog)always @(posedge clk)c<=A/B;这样的,要
求除法在一个时钟延上完成,那更是不可能实现的。(注:有些FPGA的配套软件提供乘除法
的运算模块,但也只能支持直接调用,不支持把形如C=A/B的语句综合成除法模块。)又比如,
一个很多初学者常见的问题是试图让HDL进行循环运算,形同(Verilog):for (i=0; iparity
= parity xor data[i];一些功能比较简单的综合软件会完全拒绝综合循环语句;而一些功能
较强的软件仅当wordlength是常数的时候能综合;当wordlength为变量时,任何软件都不
能综合上面的语句。这是因为硬件规模必须是有限的、固定的。当综合软件遇到循环语句时,
总是将其展开成若干条顺序执行的语句,然后再综合成电路。若wordlength是常数,则展开
的语句数是确定的,具有可综合性;而若它是变量时,展开的语句数不确定,对应的硬件电
路数量也不能确定,无法被综合。或许有人说用计数器就能实现变量循环,但这情形又和上
面的除法运算相同。那需要额外的硬件,用来存储中间结果和进行时序控制,象上面那样的
循环语句对此描述得太抽象,软件接受不了。四、如何判断自己写的代码是可综合的?用一
句简单的话概括:电脑永远没有你聪明。具体来说,通常EDA软件对HDL代码的综合能力总
是比人差。对于一段代码,如果你不能想象出一个较直观的硬件实现方法,那EDA软件肯定
也不行。比如说,加法器、多路选择器是大家都很熟悉的电路,所以类似A+B-C,(A>B)?C:D
这样的运算一定可以综合。而除法、开根、对数等等较复杂的运算,必须通过一定的算法实
现,没有直观简单的实现方法,则可以判断那些计算式是不能综合的,必须按它们的算法写
出更具体的代码才能实现。此外,硬件无法支持的行为描述,当然也不能被综合(比如想在
FPGA上实现DDR内存那样的双延触发逻辑,代码很容易写,但却不能实现)。不过,这样的
判断标准非常主观模糊,遇到具体情况还得按设计人员自己的经验来判断。如果要一个相对
客观的标准,一般来说:在RTL级的描述中,所有逻辑运算和加减法运算、以及他们的有限
次组合,基本上是可综合的,否则就有无法综合的可能性。当然,这样的标准仍然有缺陷,
更况且EDA的技术也在不断发展,过去无法综合的代码或许将来行,某些软件不支持的代码
换个软件或许行。比如固定次数的循环,含一个常数参数的乘法运算等等,有些EDA软件支
持对它们的综合,而有些软件不行。所以,正确的判断仍然要靠实践来积累经验。当你可以
较准确判断代码的可综合性的时候,你对HDL的掌握就算完全入门了。