当前位置:首页 > EDA > 电子设计自动化
[导读] Verilog HDL是一种用于数字逻辑电路设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。Verilog HDL既是一种行为描述的语言,也是一种结构描述的语言。也就是说,既可以用电路的功能描述,也可

 Verilog HDL是一种用于数字逻辑电路设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。Verilog HDL既是一种行为描述的语言,也是一种结构描述的语言。也就是说,既可以用电路的功能描述,也可以用元器件和它们之间的连接来建立所设计电路的Verilog HDL模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们对应的模型类型共有以下5种。

 

  • 系统级(system):用高级语言结构实现设计模块的外部性能的模型。
  • 算法级(algorithm):用高级语言结构实现设计算法的模型。
  • RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型。
  • 门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。
  • 开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。

 

一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。

Verilog HDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。这种行为描述语言具有以下功能。

 

  • 可描述顺序执行或并行执行的程序结构。
  • 用延迟表达式或事件表达式来明确地控制过程的启动时间。
  • 通过命名的事件来触发其他过程里的激活行为或停止行为。
  • 提供了条件、if-else、case、循环程序结构。
  • 提供了可带参数且非零延续时间的任务(task)程序结构。
  • 提供了可定义新的操作符的函数结构(function)。
  • 提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。
  • Verilog HDL语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。因其结构化的特点又使它具有以下功能。
    • 提供了完整的一套组合型原语(primitive);
    • 提供了双向通路和电阻器件的原语;
    • 可建立MOS器件的电荷分享和电荷衰减动态模型。

 

Verilog HDL的构造性语句可以精确地建立信号的模型。这是因为在Verilog HDL中,提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值可以有不同的强度,可以通过设定宽范围的模糊值来降低不确定条件的影响。

Verilog HDL作为一种高级的硬件描述编程语言,有着类似C语言的风格。其中if语句、case语句等和C语言中的对应语句十分相似。如果读者已经掌握C语言编程的基础,那么学习Verilog HDL并不困难,只要对Verilog HDL某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它,利用它的强大功能来设计复杂的数字逻辑电路。下面将介绍Verilog HDL中的基本结构和语法。

Verilog HDL程序入门

首先来看几个Verilog HDL程序,然后从中分析Verilog HDL程序的特性。

 

例1:加法器。

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

 

这个例子通过连续赋值语句描述了一个名为adder的三位加法器可以根据两个三比特数a、b和进位(cin)计算出和(sum)和进位(count)。从例子中可以看出整个Verilog HDL程序是嵌套在module和endmodule声明语句里的。

 

例2:比较器。

module  compare ( equal,a,b );     //比较器模块端口声明

         output  equal;                 //输出信号equal

         input [1:0] a,b;             //输入信号a、b

         assign  equal=(a==b)?1:0; //如果a、b 两个输入信号相等,输出为1,否则为0

endmodule

 

这个程序通过连续赋值语句描述了一个名为compare的比较器。对两比特数a、b进行比较,如a与b相等,则输出equal为高电平,否则为低电平。在这个程序中,“/*........*/”和“//.........”表示注释部分,注释只是为了方便程序员理解程序,对编译是不起作用的。

 

例3:使用原语的三态驱动器。

module  trist2(out,in,enable);     //三态启动器模块端口声明

     output  out;                      //端口说明

     input   in, enable;

     bufif1  mybuf(out,in,enable);  //实例化宏模块bufif1

endmodule

 

这个例子描述了一个名为trist2的三态驱动器。程序通过调用一个在Verilog语言库中现存的三态驱动器实例元件bufif1来实现其功能。

 

例4:自行设计的三态驱动器。

module  trist1(out,in,enable);     //三态启动器模块端口声明

     output  out;                       //端口说明

     input  in, enable;

     mytri  tri_inst(out,in,enable);//实例化由mytri模块定义的实例元件tri_inst

endmodule

     module  mytri(out,in,enable); //三态启动器模块端口声明

     output  out;                            //端口说明

     input  in, enable;

     assign  out = enable? in : 'bz;    //三态启动器算法描述

endmodule

 

这个例子通过另一种方法描述了一个三态门。在这个例子中存在着两个模块。模块trist1调用由模块mytri定义的实例元件tri_inst。模块trist1是顶层模块。模块mytri则被称为子模块。

通过上面的例子可以看到。

  • Verilog HDL程序是由模块构成的。每个模块的内容都是嵌在module和endmodule两个语句之间。每个模块实现特定的功能。模块是可以进行层次嵌套的。正因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。
  • 每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行行为逻辑描述。
  • Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。
  • 除了endmodule语句外,每个语句和数据定义的最后必须有分号。
  • 可以用“/*.....*/”和“//.......”对Verilog HDL程序的任何部分作注释。一个好的、有使用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。

 

模块的框架

模块的内容包括I/O声明、I/O说明、内部信号声明和功能定义。

1.I/O声明

模块的端口声明了模块的输入输出端口,其格式如下:

Module     模块名(端口1,端口2,端口3,端口4, …);

 

2.I/O说明

I/O说明的格式如下:

 

输入口:input  端口名1,端口名2,…,端口名i;   //(共有i个输入口)

输出口:output 端口名1,端口名2,…,端口名j;       //(共有j个输出口)

 

I/O说明也可以写在端口声明语句里,其格式如下:

 

module  module_name(input port1,input port2,…,output port1,output port2… )

 

3.内部信号声明

在模块内用到的和与端口有关的wire和reg变量的声明,如下所示:

 

reg [width-1 : 0] R变量1,R变量2 …;

wire [width-1 : 0] W变量1,W变量2 …;

 

4.功能定义

模块中最重要的部分是逻辑功能定义部分,有3种方法可在模块中产生逻辑。

(1)用“assign”声明语句。

assign a = b & c;

这种方法的句法很简单,只需写一个“assign”,后面再加一个方程式即可。例子中的方程式描述了一个有两个输入的与门。

 

(2)用实例元件。

and and_inst( q, a, b );

采用实例元件的方法在电路图输入方式下,调入库元件。键入元件的名字和相连的引脚即可,表示在设计中用到一个跟与门(and)一样的名为and_inst的与门,其输入端为a、b,输出为q。要求每个实例元件的名字必须是惟一的,以避免与其他调用与门(and)的实例混淆。

 

(3)用“always”块。

always @(posedge clk or posedge clr) begin         //时钟上升沿触发,异步清零

    if(clr)  q <= 0;                               //清零

    else  if(en) q <= d;                           //使能赋值

    end

 

采用“assign”语句是描述组合逻辑最常用的方法之一,而“always”块既可用于描述组合逻辑,也可描述时序逻辑。上面的例子用“always”块生成了一个带有异步清除端的D触发器。

“always”块可用很多种描述手段来表达逻辑,例如上例中就用了“if...else”语句来表达逻辑关系。如按一定的风格来编写“always”块,可以通过综合工具把源代码自动综合成用门级结构表示的组合或时序逻辑电路。需要注意的是,如果用Verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。

上面3个例子分别采用了“assign”语句、实例元件和“always”块。这3个例子描述的逻辑功能是同时执行的。也就是说,如果把这3项写到一个Verilog模块文件中去,它们的次序不会影响逻辑实现的功能。这3项是同时执行的,也就是并发的。

然而,在“always”模块内,逻辑是按照指定的顺序执行的。“always”块中的语句称为“顺序语句”,因为它们是顺序执行的。请注意,两个或更多的“always”模块也是同时执行的,但是模块内部的语句是顺序执行的。

看一下“always”内的语句,就会明白它是如何实现功能的。“if…else… if”必须顺序执行,否则其功能就没有任何意义。如果else语句在if语句之前执行,功能就会不符合要求。为了能实现上述描述的功能,“always”模块内部的语句将按照书写的顺序执行。

 

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭