从Verilog到VHDL(上)基本语法
vhdl转verilog hdl的规则

vhdl转verilog hdl的规则VHDL转Verilog HDL的规则引言:VHDL(VHSIC Hardware Description Language)和Verilog HDL 都是硬件描述语言,用于描述数字电路的功能和结构。
在实际的工程中,经常会遇到需要将VHDL代码转换为Verilog HDL的情况。
这篇文章将介绍VHDL转Verilog HDL的规则,以帮助读者成功完成转换过程。
一、了解VHDL和Verilog HDL的语法差异在进行VHDL转Verilog HDL之前,我们需要了解这两种语言的语法差异。
以下是一些常见差异的例子:1. 信号声明:- VHDL: signal a, b, c: std_logic;- Verilog HDL: reg a, b, c;2. 过程和行为描述- VHDL: process (a, b) is begin ... end process;- Verilog HDL: always @(a or b) begin ... end3. 选择结构- VHDL: case (a) is when "00" => ... end case;- Verilog HDL: case (a) "00": ... endcase;二、代码整理准备在进行VHDL转Verilog HDL之前,我们需要对VHDL代码进行整理和准备。
以下是一些常见的准备步骤:1. 删除VHDL中不支持的语法Verilog HDL不支持VHDL中的某些特性,如非标准包等。
在转换过程中,我们应该删除这些不支持的语法。
2. 替换数据类型VHDL中的数据类型和Verilog HDL有所不同,我们需要逐一替换VHDL数据类型为对应的Verilog HDL数据类型。
3. 检查命名规范VHDL和Verilog HDL在命名规范上有所不同。
在进行转换之前,我们需要检查VHDL代码中的命名规范是否符合Verilog HDL的要求,并进行相应的修改。
verilog vhdl知识点

Verilog HDL在系统级抽象方面比VHDL略差一些,而在门级开关电路描述方面比VHDL要强的多写了第一个verilog程序,是一个加法器内容如下module adder(count,sum,a,b,cin);input[2:0] a,b;input cin;output count;output [2:0] sum;assign{count,sum}=a+b+cin;endmodule开始编译出现了几次错误,后来发现给实体的命名和程序中实体要一致而且大小写要一样,整个程序是嵌套再module和endmodule当中的而其中的注释和C/C++类似,用//和/*…*/来标明module compare(equal,a,b);output equal;input [1:0] a,b;assign equal=(a==b)?1:0;//和C语言中的相同endmoduleverilog的基本设计单元是“模块(BLOCK)”。
一个模块由两个部分组成,一部分描述端口,一部分描述逻辑功能,即定义输入是如何影响输出的。
如下module block(a,b,c,d);input a,b;output c,d;assign c=a|b;assign d=a&b;endmodule模块中最重要的部分是逻辑功能定义。
有三种方法可以再模块中产生逻辑。
1、用“assign”声明语句如:assign a=b&c;2、用实例元件,如同调入库元件一样如:and and_inst(q,a,b);3、用“always”块如:always @(posedge clk or posedge clr) //always块生成了一个带有异步清除端的D触发器。
beginif(clr) q<=0;else if(en) q<=d;采用assign语句是最常用的方法之一。
“always”块可以用于产生各种逻辑,常用于描述时序逻辑。
了解VerilogHDL语法规则吗,看完这篇就知道了

了解VerilogHDL语法规则吗,看完这篇就知道了本节介绍Verilog HDL语法规则,包括文字规则、数据对象及运算符的使用等。
Verilog HDL文字规则1.关键词与标识符关键词是Verilog HDL中预先定义的单词,它们在程序中有特别的使用目的。
已经被用作关键词的单词不可以在程序中另作他用,见表3-1。
不同版本的Verilog HDL硬件描述语言中定义的关键词数目略有变化,Verilog 1995的关键词有97个,Verilog 2001共102个。
标识符是用户编程时给对象定义的名称,对象包括:常量、变量、模块、寄存器、端口、连线、示例和beginend块等元素。
定义标识符时应遵循如下规则:只能由26个大小写英文字母、数字和下划线组成。
标识符的第一个字符必须是英文字母或下划线。
字符中的英文字母区分大小写。
【例3-7】判断下面标识符是否合法。
2.注释与C语言一样,硬件描述语言中的注释也不会被编译。
在Verilog HDL中有两种形式的注释方式:采用/* */,多用于多行注释。
采用//,用于单行注释。
【例3-8】注释举例。
在实际使用中,很多公司的编程规范明确表明,注释行中不提倡采用第一种/**/的注释方式,不允许使用中文注释。
3.常数的表示在Verilog HDL中,常数用来表示在程序中不随意变化的量,常数分为整数、实数及字符串三大类型。
(1)整数型常数是数字电路中最常用到的类型,在Verilog HDL中有两种表示方法:简单的十进制格式,例如-50、6等。
基数格式,其表达方式一般如下:〈位宽〉是十进制数值表示的常数化成二进制时对应的宽度,〈进制符号〉用进制符号b或B(二进制)、o或O(八进制)、d或D(十进制)、h或H(十六进制)表示常数的进制格式,即二进制、八进制、十进制、十六进制这4种进制表示。
数字的位宽可以默认,如果没有定义长度,数的长度由具体机器系统决定(至少是32位)。
【例3-9】常数表示方法举例。
FPGA笔记之verilog语言(基础语法篇)

FPGA笔记之verilog语言(基础语法篇)笔记之verilog语言(基础语法篇)写在前面:verilogHDL语言是面对硬件的语言,换句话说,就是用语言的形式来描述硬件线路。
因此与等软件语言不同,假如想要在实际的中实现,那么在举行verilog语言编写时,就需要提前有个硬件电路的构思和主意,同时,在编写verilog语言时,应当采纳可综合的语句和结构。
1. verilog 的基础结构1.1 verilog设计的基本单元——module在数字电路中,我们经常把一些复杂的电路或者具有特定功能的电路封装起来作为一个模块用法。
以后在运用这种模块化的封装时,我们只需要知道:1.模块的输入是什么;2.模块的输出是什么;3.什么样的输入对应什么样的输出。
而中间输入是经过什么样的电路转化为输出就不是我们在用法时需要特殊重视的问题。
当无数个这样的模块互相组合,就能构成一个系统,解决一些复杂的问题。
verilog语言的基础结构就是基于这种思想。
verilog中最基本的模块是module,就可以看做是一个封装好的模块,我们用verilog来写无数个基本模块,然后再用verilog描述多个模块之间的接线方式等,将多个模块组合得到一个系统。
那么一个module应当具有哪些要素呢?首先对于一个module,我们应当设计好其各个I/O,以及每个I/O的性质,用于与模块外部的信号相联系,让用法者知道如何连线。
第二,作为开发者,我们需要自己设计模块内部的线路来实现所需要的功能。
因此需要对模块内部浮现的变量举行声明,同时通过语句、代码块等实现模块的功能。
综上所述,我们把一个module分成以下五个部分:模块名端口定义I/O解释第1页共9页。
VHDL与Verilog语言

VHDL与Verilog语言VHDL(VHSIC hardware description language)和Verilog是用于电子系统设计的硬件描述语言(HDL)。
这两种语言被广泛应用于数字逻辑设计和仿真,以及硬件描述、验证和综合。
1. VHDL(VHSIC hardware description language)VHDL是一种结构化的硬件描述语言,最初由美国国防部高速集成电路计划办公室(VHSIC,Very High Speed Integrated Circuits)开发。
VHDL以其强大的功能和灵活性而闻名,并被广泛用于数字系统的设计和验证。
VHDL的编写包括实体(Entity)和体(Architecture)两个主要部分。
实体部分描述了数字系统的输入输出接口、信号和组件的声明,而体部分描述了实体的内部结构、信号处理和逻辑功能。
VHDL具有丰富的数据类型、运算符和控制结构,可以方便地描述数字电路的行为和结构。
它还提供了强大的仿真和验证功能,使设计人员能够在开发和测试阶段快速迭代和调试设计。
2. VerilogVerilog是一种硬件描述语言,最初由Gateway Design Automation公司(现在是Cadence Design Systems的一部分)开发。
Verilog以其简洁的语法和易学易用的特性而受到广泛欢迎,并成为工业界标准。
Verilog的设计由模块(Module)组成,每个模块描述了一个黑盒子,包含输入和输出端口以及内部的逻辑功能。
模块可以进行层次化组合,从而实现较复杂的系统级设计。
Verilog的语法类似于C语言,具有类似的数据类型、运算符和控制结构。
它还提供了时序建模的能力,使设计人员能够描述数字电路的时序行为。
3. VHDL与Verilog的比较VHDL和Verilog在语法和功能上有一些区别,但它们都可以用于数字电路的设计和仿真。
以下是它们之间的一些比较:3.1 语法风格VHDL采用结构化的编程风格,需要明确的体、过程和信号声明,可以更好地控制和描述系统的结构和行为。
VHDL语法简单情况总结

VHDL语法简单总结一个VHDL程序代码包含实体(entity)、结构体(architecture)、配置(configuration)、程序包(package)、库(library)等。
一、数据类型1.用户自定义数据类型使用关键字TYPE,例如:TYPE my_integer IS RANGE -32 TO 32;–用户自定义的整数类型的子集TYPE student_grade IS RANGE 0 TO 100;–用户自定义的自然数类型的子集TYPE state IS (idle, forward, backward, stop);–枚举数据类型,常用于有限状态机的状态定义一般来说,枚举类型的数据自动按顺序依次编码。
2.子类型在原有已定义数据类型上加一些约束条件,可以定义该数据类型的子类型。
VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。
子类型定义使用SUBTYPE关键字。
3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起形成的一种新的数据类型。
TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型语法结构SIGNAL signal_name: type_name [:= initial_value];–使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明例如:TYPE delay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0);–滤波器输入延迟链类型定义TYPE coeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0);–滤波器系数类型定义SIGNAL delay_regs: delay_lines; –信号延迟寄存器声明CONSTANT coef: coeffs := ( ); –常量系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。
VHDL语法简单总结

VHDL语法(yǔfǎ)简单总结VHDL语法简单(jiǎndān)总结VHDL语法(yǔfǎ)简单总结一个(yī ɡè)VHDL程序代码包含实体(shítǐ)(entity)、结构(jiégòu)体(architecture)、配置(pèizhì)(configuration)、程序包(package)、库(library)等。
一、数据类型1.用户自定义数据类型使用关键字TYPE,例如:TYPE my_integer IS RANGE -32 TO 32;–用户自定义的整数类型的子集TYPE student_grade IS RANGE 0 TO 100;–用户自定义的自然数类型的子集TYPE state IS (idle, forward, backward, stop);–枚举数据类型,常用于有限状态机的状态定义一般来说,枚举类型的数据自动按顺序依次编码。
2.子类型在原有已定义数据类型(lèixíng)上加一些约束条件,可以定义(dìngyì)该数据类型的子类型。
VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。
子类型定义使用(shǐyòng)SUBTYPE关键字。
3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起(yīqǐ)形成的一种新的数据类型。
TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型(lèixíng)语法结构SIGNAL signal_name: type_name [:=initial_value];–使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明例如:TYPE delay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0);–滤波器输入延迟链类型定义TYPE coeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0);–滤波器系数(xìshù)类型定义SIGNAL delay_regs: delay_lines; –信号延迟(yánchí)寄存器声明CONSTANT coef: coeffs := ( ); –常量(chángliàng)系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以(suǒyǐ)必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。
fpga语法知识点总结

fpga语法知识点总结一、Verilog语言Verilog是一种硬件描述语言(HDL),用于描述数字电路和系统级设计。
在FPGA设计中,Verilog语言常常用于描述逻辑功能和时序控制。
Verilog语言包括模块、端口、信号声明、组合逻辑、时序逻辑、行为模拟等部分。
1. 模块:Verilog中的模块是一个最基本的组织单位,它类似于面向对象编程中的类。
每个模块都有自己的输入输出端口和内部逻辑实现。
在FPGA设计中,通常会设计多个模块来实现不同的功能,然后将这些模块连接起来,构成一个完整的系统。
2. 端口:在Verilog中,端口用于定义模块与外部环境的接口。
端口可以被定义为输入端口(input)、输出端口(output)、双向端口(inout)等,用于进行与外部信号的通信。
3. 信号声明:在Verilog中,信号用于传递逻辑信息。
信号可以是单个的位(bit)信号,也可以是多位(bus)信号。
在FPGA设计中,对信号的声明和使用是非常重要的,可以影响到设计的性能和资源占用。
4. 组合逻辑:组合逻辑是一种不含时钟的逻辑电路,其输出仅由输入决定。
在Verilog中,组合逻辑常常使用逻辑运算符和条件语句来描述。
5. 时序逻辑:时序逻辑是一种包含时钟信号的逻辑电路,其输出由时钟信号和输入信号共同决定。
在FPGA设计中,时序逻辑和时序约束非常重要,可以影响到设计的时序性能。
6. 行为模拟:行为模拟是一种用于验证设计功能和性能的技术。
在Verilog中,可以使用行为模拟语句来描述设计的行为,并进行仿真验证。
二、VHDL语言VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述数字电路和系统级设计。
在FPGA设计中,VHDL语言和Verilog语言一样,用于描述逻辑功能和时序控制。
VHDL语言包括实体、端口、信号声明、组合逻辑、时序逻辑、行为模拟等部分。
1. 实体:在VHDL中,实体是描述一个硬件单元的基本描述。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从Verilog 到VHDL(上)基本语法
16 六
从学校里开始,我所接触的就一直是VerilogHDL 而非更老牌的VHDL, 而且后续接触的项目中也多半是Verilog 的用户,坦白的讲,Verilog 的活力也确实更足一些,从
IEEE1800-2005 开始的SystemVerilog 的标准化,将
Verification 和Design 的一体化的尝试,我个人认为,是走在正确的道路上。
所以,我确实想不到,我竟然也要回头学起VHDL 来了,毕竟一些老牌公司,特别是欧洲的公司,往往因为历史原因,仍然在使用VHDL ,看来终究是绕不过去的了正如一个Design Verification 工程师在目前想完全的不和SpecmanE 打交道是很难的一样。
面记载的是两种语言学习过程中的一些体会,而且更多的是从语法角度出发,算是梳理一下思路吧,而且,以前从来
没有接触过VHDL ,当然会存在很多非常初级的东西。
而在本文之后,打算再写一篇简单阐述下结合Cadence 的IUS 工具,使用SystemVerilog 对VHDL 进行验证的基本方
法。
起手式从Verilog 撞进VHDL 的世界,有些东西要先搞清
楚,否则会一头雾水:
1. 大小写敏感:Verilog 是大小写敏感的,VHDL 则非;
2.注释:Verilog 的行注释为// ,块注释为/**/;VHDL 只
支持
行注释–;[1. 这个算是不方便的一个地方了,不过不
基本结构
论是在Vim 还是Emacs 当中,批量做行注释也很容易实现;] VHDL 被认为是要求更严格,更多讲究的语言,相比和 C 类
似的Verilog ,架构上更严谨一些:
1.基本结构:从上往下为
USE 定义区(调用库和包);Package 定义区(自定义程序包);Entity定义区(定义电路实体外观,I/O接口的规
格);
[2. Entity 感觉像是 C 的头文件定义之类的东西,而在Verilog
当中,这些其实都是被整合在Module 里头一起完成
了。
]Architecture 定义区(描述内部功能);[3. 同
上,相当于Verilog 的Module 内部实现。
]Configuration 定义区(决定那个Architecture 被使用)[4. 这也许就是
之所以要分开
Arch 和Entity 的原因,类似的效果在Verilog 里实现,则
要使用那个configuration blocks/library map files这需
些在
要使用那个 configuration blocks/library map files 这些在 Verilog 2001 当中增加的 features ,不过这些部分在 Verilog
当中属于 Beyond language ,更多的是位于语言之上的
2. 并行与串行: 在这一点上, VHDL 和 Verilog 有些类似,书写在 Architecture
内的语句,直接被认为是并行执行,无论书写顺序的(就如 中的并列的 Always 语句块);而顺序执行的串
行 语句必须放置在进程语句 (process )当
中,正如 Verilog 的
begin…end 。
3. process :
和 Verilog 不同的是这里的 Process 是要求有敏感变量列表 逻辑时类似。
所以当写这样的语句,不妨多回想 Verilog 中 对于敏感变量列表的要求。
4. 例化: 在 VHDL 当中尝试例化一个 entity ,比起 Verilog 要麻烦不少。
首先,必须在 Architecture 当中用 Component 语法来声明 这个实体的 Port 和 Generic (参数);然后才可在后续内容 当中例化实体, 并且用 generic map 和 port map 来进行参数
scope 中了。
]
同 Verilog 作为输入的, 正如试图在 Verilog 中用 Always 语句实现组合
赋值和port 连接。
5.库,包和配置:
VHDL 这方面的组织比起Verilog 显然要严密多了,使用
configuration ,用简单的语句,就可以把不同的architecture
实现和entity 实现绑定,而此时我们就能看出VHDL 之所以要分开所谓entity 和architecture 的目的所在了。
CONFIGURATION 配置名OF 实体名IS
FOR 为实体选配的构造体名
END FOR ;
END 配置名;而事实上,configuration还可以直接指定某个Hierachy的某
个实体究竟适用那种entity 来例化,语法如下(参见VHDL Configuration ):
configuration TopMixed of Top is —TopMixed 是配置名,Top 是实体名
for Structure
是结构体名,是和实体Top 相对应的结构体
—B1 和B2Structure
for B1: Blk
是结构体structure 中的元件例化语句的标
use entity Work.Blk(RTL); —此
语
句说明,在元件例化的时候,利用用户自定义
的实体blk 来例化,其结构体是RTL
end for;
for B2: Blk
use entity Work.GateLevelBlk(Synth) —
此
语句说明,元件例化B2 时,利用实体
GateLevelBLK 对应的Synth 构造体来例化
port map (IP => To_Vector(A),
To_Int8(OP) => F);
end for;
end for;
end TopMixed;
只不过这似乎太麻烦了一点。
而Library 和Package 更好理
解一些。
用户可以将一些公共的定义统一靠Package 和Package Body 的关键字来定义到一个包里面去,而这些包又可以被编译在Library 当中。
不过Library 的建立似乎只
依赖于工具的解决,例如在编译的时候选择将包内容编译到某
个库之中,然后再使用。
使用的过程,则是利用Library ,Use 等关键字来import 这些内容。
而要提醒的是,当前编译代码都是被认为是缺省的编入到了work 库当中,所以如果需要引用代码中定义的某个包内容,应该用work.
(packet_name).all 之类的path 来声明。
操作
1. 强类型语言:
VHDL 是强类型语言,对类型要求非常严,一个对象只能有
种数据类型,而且不同类型数据间赋值是严格禁止的,这点Verilog 用户应当注意。
2. Procedure 和Function :
很好理解,直接对应Verilog 的Task 和Function ,需要注意
的就是在VHDL 中还可以对Function 进行重载,这个,也许有用吧。
3.属性:
VHDL 针对不同的对象,都具有不同的属性,这些属性不妨理解成Verilog 当中的Predefined tasks or methods ,但是似乎更加的丰富和多样,相信能够有效的减少代码量。
小结
本文目的不在于语法的教程或者指导(本来我也刚看VHDL 不过一个下午而已…… ),更希望能够迅速、扼
要的抽出VHDL 和Verilog 的一些区别和共性,加速学习的过程。
不过,我相信,一个熟悉Verilog 的工程师,在吃透了上面这些不同点后,至少可以跌跌撞撞的开始写VHDL 代码了,更多的东西,自然需要在实践中去体会和学习。
接下来,我的计划是结合Cadence 的IUS 工具,写一写最
基本的SystemVerilog 对于VHDL 的验证的QuickStart 了。
[5. 从目前了解的来看,VHDL 对于验证方面的支持还真是有限,比起Verilog 都有所不及,在最基本的打印,仿真控制上都要麻烦一些,所以,这种情况下,干脆一律交给
SystemVerilog/Vera/E/ 去做,可能还更直接一些]。