VHDL 与 VerilogHDL 详细对比

VHDL 与 VerilogHDL 详细对比序号区别之处VHDLVerilog1文件的扩展名不一样.vhd.v2结构不一样包含库、实体、结构体。ENTITY实体名ISPORT(端口说明)END实体名;ARCHITECTU…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

序号

区别之处

VHDL

Verilog

1

文件的扩展名不一样

.vhd

.v

2

结构不一样

包含库、实体、结构体。
ENTITY 实体名 IS
PORT(端口说明)
END 实体名 ;

ARCHITECTURE 结构体名 OF 实体名 IS
说明部分
BEGIN
赋值语句/ 元件语句/ 进程语句
END 结构体名 ;

模块结构 (module… endmodule)
module 模块名 (端口列表) ;
输入/输出端口说明; 变量类型说明;
assign 语句 (连续赋值语句) ;
元件例化语句;
always@(敏感列表)
begin

end
endmodule

其中assign语句、元件例化语句、always语句的顺序可以更换

3

对库文件的要求不一样

须有相应的库或程序包支持,实体间调用子程序,需要将子程序打成程序包

没有专门的库文件 (只有基本门的库),模块可以通过例化直接调用,不需要打成程序包

4

端口定义的地方不一样

实体中定义

module的模块名后面先列出端口列表,再在模块中用input,output等定义

5

端口定义方式不一样

端口名(端口名,端口名) : 方向 数据类型名(Default Value) ;
例如:
Q1 : IN Std_Logic_Vector(31 DOWNTO 0) ;

端口类型    端口1,端口2,端口3,…;
例如:
inout [31:0]Q;

6

端口定义类型不一样

有IN, OUT, INOUT, BTFFER 四种

有input ,output, inout 三种

7

内部信号(SIGNAL)声明不一样

在结构体中声明,有些局部变量还可在进程中声明

在端口定义后进行声明内部变量

8

标识符规则不一样

不区分大小写

区分大小写

9

关键词要求不一样

允许大小写混写
例如:
EnTity

关键词必须小写

10

常量定义的关键词和格式表示不一样

CONSTANT 常量名:数据类型 :=数值;

parameter 常量名1 = 数值1, 常量名2 = 数值2,…,常量名n = 数值n;

11

常量表示不一样

用双引号.
例如:
B”011100″

<位宽>’<进制符号><数字>
例如:
8’b10110011

12

数组定义方式不一样

定义4位数组A:
A(3 DOWNTO 0 ) 或者A(0 TO 3)

定义4位数组A:
A[3:0] 或者A[0:3]

13

下标名表示不一样

用小括号表示,
例如:
a(0)

用中括号表示,
例如:
a[0]

14

数据对象不一样,且二者变量的含义不一样

常量,变量,信号.
变量是一个局部量,只能在进程和子程序中使用。变量的赋值是一种理想化的数据传输,是立即发生,不存在任何延时的行为。
信号是描述硬件系统的基本数据对象,它类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道。
数据对象没有默认

常量,变量
变量是在程序运行时其值可以改变的量。变量默认为wire型

15

数据默认值

默认值为本类型的最小非负值(某个类型的范围是以0为对称的)

wire类型默认值为 z, reg类型默认值为x ;

16

变量定义的格式不一样

VARIABLE 变量名:数据类型 :=初始值
例如:
VARIABLE k:Integer RANGE 0 TO 7;

数据类型 [位宽] 变量1,变量2,…,变量n;

17

数据类型不一样

布尔(BOOLEAN)、位(BIT)、位矢量(BIT_VECTOR)、标准逻辑位(STD_LOGIC)、标准逻辑矢量(STD_LOGIC_VECTOR)。
VHDL的数据类型比较复杂。

wire,tri,reg,interger,real,time型,主要是wire和reg型,比较简单。

18

赋值不一样

按数据对象赋值分,变量赋值使用“:=”,信号赋值使用”<=”< span=””>

按语句的执行情况分,assign语句和阻塞语句用“=”赋值,非阻塞语句用“<=”< span=””>

19

赋值要求不一样

强类型语言,赋值两边的赋值目标和表达式的数据类型必须一样。不同类型和宽度的数据之间不能运算和赋值,需要调用包来完成转换;
例如:
A:IN STD_LOGIC_VECTOR(2 DOWNTO 0)
B:IN STD_LOGIC_VECTOR(2 DOWNTO 0)
C:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
则C<=A OR B;会出错

不是强类型语言,可以自动完成不同类型数据的运算和赋值;
例如:
input [2:0]a;
input [2:0]b;
output [3:0]c;
assign c=a&b;不会出错

20

操作符不一样

逻辑操作符(Logica Operator)、关系操作符(Relationa Operator)、算术操作符(Arithmetic Operator)、符号操作符(Sign Operator),没有缩减操作符,没有三目的条件操作符

操作符比较丰富,有算数操作符,逻辑操作符,位运算、关系操作符,等式操作符,缩减操作符,转移操作符,条件操作符,位并接操作符

21

条件中,等于判断符号不一样

等于= ; 不等于 /=

等于(= =)或全等(= = =)
不等于(! =)或不全等(! = =)

22

逻辑操作符不一样

AND, NAND, NOT, OR, NOR, XNOR, XOR等
该逻辑操作符运算结果跟Verilog HDL的位运算一样

&&(逻辑与), || (逻辑或), !(逻辑非), ~ (按位取反), &(按位与), |(按位或), ^(按位异或), ^~ 或~ ^(按位同或)

23

移位操作符不一样

除了逻辑左移SLL、逻辑右移SRL之外,还有算数左移SLA、算数右移SRA、循环左移ROL、循环右移ROR。其中逻辑左移SLL、逻辑右移SRL与Verilog HDL的左移<<,>>一致

只有逻辑左移<<>>,没有算数左移、算数右移、循环左移、循环右移。

24

并置操作符不一样

用&并置,
例如:
a&b

用{ }并置,
例如:
{a, b}

25

并行赋值语句不一样

信号赋值语句 (直接赋值、条件赋值、选择赋值)

assign语句 (连续赋值) 只对wire型

26

顺序语句不一样

信号赋值
变量赋值(变量赋值只能在进程和子进程中进行)

阻塞语句
非阻塞语句

27

并行语句中的进程语句不一样

PROCESS(敏感列表)
BEGIN
顺序语句;
END PROCESS;

always@ (敏感列表)
begin
顺序语句;
end

28

条件判断语句if的格式不一样

IF 条件1 THEN
顺序描述语句;
ELSIF 条件2 THEN
顺序描述语句;

ELSE
顺序描述语句;
END IF;

if (条件1)
    顺序描述语句;
else if (条件2)
    顺序描述语句;

else
    顺序描述语句;

29

条件控制语句case的格式不一样

CASE 表达式 IS
    WHEN 条件表达式1 =>
        顺序描述语句;
    WHEN 条件表达式2 =>
        顺序描述语句;
    WHEN 条件表达式3 =>
        顺序描述语句;
    …
    WHEN 条件表达式n =>
        顺序描述语句;
END CASE
如果没有列举出CASE和IS之间的表达式的全部取值,则WHEN OTHERS =>必不可少

case (表达式)
        选择值1:语句1;
        选择值2:语句2;
        选择值3:语句3;
        …
        选择值n:语句n;
        default:语句n+1;
endcase
default没有,不会出现语法错误,但逻辑有可能产生错误

30

case语句的应用范围也不一样

在CASE语句中,条件表达式是没有优先级的,如优先级编码器可以用IF语句进行描述,但不可以使用CASE语句描述

除了case以外,还有相关的casex和casez语句,如用casex可以实现优先编码器

31

循环控制语句不一样

循环控制语句有:FOR_LOOP循环语句、WHILE_LOOP循环语句、NEXT语句、EXIT语句

for语句、repeat语句、while语句、和forever语句

32

for循环控制语句格式不一样

[标号:]  FOR  循环变量  IN  循环次数范围
                      LOOP
                         顺序语句
                      END LOOP   [标号];

for(循环指针=初值; 循环指针<终值; 循环指针=循环指针+步长值)
    begin
        顺序语句;
        …
    end

33

for循环中的循环变量存在区别

循环变量不需要定义

循环指针需要定义

34

while语句格式不一样

[标号:] WHILE 条件 LOOP
                顺序描述语句;
           END LOOP [标号];
在循环体内,必须包含条件式中判别变量的赋值语句。

while(循环执行条件表达式)
        begin
        重复执行语句;
        修改循环条件语句;
        end

35

元件例化不一样

COMPONENT 元件名 IS
GENERIC 说明;
PORT 说明;
END COMPONENT 元件名;

设计模块名 <例化电路名> (端口列表) ;

36

时钟定义不一样

时钟列在PROCESS的敏感列表中,如若上升沿有效,则
PROCESS(clk)
BEGIN
IF (clk’EVENT AND clk=‘1’) THEN

END PROCESS;

在always结构中,上升沿直接体现在always的敏感列表中。如
always@ (posedge clk)
begin

end

37

时钟边沿定义方式不一样

上升沿(clk’EVENT AND clk=‘1’)
下降沿(clk’EVENT AND clk=‘0’)

上升沿posedge clk
下降沿negedge clk

38

生成重复结构的能力不同

有生成语句(GENERATE)生成由大量相同单元构成的模块,格式为:
[标号:] FOR 循环变量 IN 取值范围
GENERATE
[说明部分]
BEGIN
[并行语句]; – -元件例化语句,以重复产生并行元件。
END GENERATE [标号];
或者
IF 条件 GENERATE
[说明部分]
BEGIN
[并行语句]
END GENERATE [标号];

没有对应的生成语句,有相近的实例数组,格式为:
<模块名字> <实例名字> <范围> (<端口>);

39

子程序不一样

procedure和function

task 和 function

40

注释方法不一样

用- -引导注释信息

用//或/*…*/注释

– END –

VHDL 与 VerilogHDL 详细对比

NOW现在行动!
推荐阅读
【Vivado那些事】如何查找官网例程及如何使用官网例程【Vivado使用误区与进阶】总结篇【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键SystemVerilog数字系统设计_夏宇闻 PDFVerilog 里面,always,assign和always@(*)区别图书推荐|ARM Cortex-M0 全可编程SoC原理及实现高级FPGA设计技巧!多时钟域和异步信号处理解决方案现代计算机的雏形-微型计算机MCS-4AD9361 和Zynq及其参考设计说明1202年了,还在使用虚拟机吗?Win10安装Ubuntu子系统及图形化界面详细教程谈谈Xilinx FPGA设计的实现过程
Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目
AD936x+ZYNQ搭建收音机(一)
AD936x+ZYNQ搭建收音机(二)含视频演示
AD936x+ZYNQ搭建收音机(三)-终篇
AD936x+ZYNQ搭建OpenWIFI
Verilog 版本:Verilog-95、Verilog-2001与System Verilog区别简谈
FPGA时钟设计方案无招胜有招-Vivado非工程模式下的详细设计
追寻ARM的起源-Acorn电脑简史及FPGA实现
面试中经常会遇到的FPGA基本概念,你会几个?
Xilinx FPGA MIPI 接口简单说明
介绍一些新手入门FPGA的优秀网站
Vivado ML(机器学习) 2021尝鲜
推荐一些可以获取免费的国外的原版书籍(电子版)网站
【Vivado那些事】FPGA的配置方式
FPGA 的重构
浅析FPGA局部动态可重构技术
点击上方字体即可跳转阅读
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190885.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月12日 上午7:43
下一篇 2026年2月12日 上午8:15


相关推荐

  • IDEA中web项目maven项目打war包的方式

    IDEA中web项目maven项目打war包的方式手动打包 amp maven 工具打包方式详解 1 打开 idea 如图 2 如图 1 2 3 步 3 就出现一个新的 接下来配置一下 4 点加号 选 D C 5 选择你项目得到 webapp 点 OK6 创建文件夹 WEB INF7 在 WEB INF 里建 classes8 选中 classes 点加号 选 M O 9 选你的项目 点 OK 这时候的结构是这样的 11 在 WEB INF 下创建 lib 放 jar 包

    2026年3月17日
    2
  • java编码native2ascii下载_native2ascii.exe

    java编码native2ascii下载_native2ascii.exenative2ascii.exe是一款好用的转码工具,主要用于字符转码和反转码,在Java开发过程中总会出现一些乱码问题或者无法正确识别读取的问题,这时候就需要进行转码,可对属性文件和其他字符编码进行转换,从而解决上述问题。需要的Java开发人员可下载!基本介绍native2ascii工具是对属性文件和其他字符编码进行相互转换。在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的…

    2025年10月30日
    5
  • cmake编译时遇到的问题解决

    cmake编译时遇到的问题解决

    2022年1月21日
    106
  • Claude Code 最佳实践 • Anthropic

    Claude Code 最佳实践 • Anthropic

    2026年3月16日
    2
  • 第1坑 pycharm里的python解释器路径问题

    第1坑 pycharm里的python解释器路径问题我的 python 入门踩坑记录 成功安装 python3 并运行了第一条代码后 又继续下载安装了 pycharm 一打开 pycharm 就疯狂弹出 ModifySetup 通过网上的搜索 得知了问题所在 但是因为不熟悉 所以把两个软件都卸载了重新安装 安装 python 的时候 学聪明了 自己选择了安装路径 并且改了个简单的名字 好找 再到安装 pycharm 的时候 听从建议 把它装到了 D 盘 因为需要占较大内存空间 重新安装之后 pycharm 的路径选择那里自动出现了 python3 的路径 接下来就直接选择 然后

    2026年3月26日
    2
  • python字典和json字符串相互转化的方法_pythonjson文件存储

    python字典和json字符串相互转化的方法_pythonjson文件存储序列化与反序列化按照某种规则,把内存中的数据保存到文件中,文件是一个字节序列,所以必须要把内存数据转换成为字节序列,输出到文件,这就是序列化;反之,从文件的字节恢复到内存,就是反序列化;pytho

    2022年7月29日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号