Verilog HDL三种建模方式

2020-02-27 21:08发布

       如果总结使用verilog HDL进行建模的各种语法,可以将verilog HDL建模方式简单的归纳为三类:结构化描述方式、数据流描述方式、行为描述方式。一个模块中往往是将三种建模方式混合起来使用,来描述一个完整的功能。这三种建模方式是业界在使用verilog HDL的过程中不断归纳总结出来的,与IEEE 1364-2001的划分方式不太一样。这种简化后的归纳分类十分清晰,更利于掌握Verilog HDL的设计方法。学习笔记将会用四小节来分别介绍这三种建模方式的特点,以及如何使用三种方式混合建模。每小节都会介绍各种建模方式的基本概念,同时会给出详细的示例,便于读者对三种建模方式有一个概括性的了解。笔记中会以博主注的形式,说明一些需要注意的知识点并做一定延伸,并介绍三种建模方式的应用特点。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
星星之火红
2020-02-28 04:34
行为描述方式是指通过对信号的行为进行描述来建模。在表示方面,类似数据流建模方式,但一般是把用initial 块语句或always 块语句描述的归为行为建模方式。行为描述方式中,我们不关心电路使用到哪些基本逻辑单元(如逻辑门、厂商的基本逻辑单元LUT等),也不关心这些基本逻辑单元最终是怎么连起来的,只关心电路具有什么样的功能。为了达到这个目的,行为描述建模方式中使用了大量的类似C语言的高级语句,如if else、case、for、while等等,可以很方便的用简洁的代码描述复杂的电路。 task(任务)和function(函数)也属于行为描述方式建模。
      和数据流建模方式一样,行为建模方式也需要使用到各种运算符,如算术运算符:加(+)、减(-)等;关系运算符:大于(>),等于(==),不等于(!=)等等;按位逻辑运算符:逻辑与(&&),逻辑或(||)等;按位逻辑运算符:按位与(&)、按位或(|)等等;条件运算符:cond_expr ? expr1 : expr2;以及连接运算符:{expr1, expr2, . . .,exprN}。将各种运算符和高级语句配合起来使用,可以对复杂的电路进行抽象建模,只关心电路的功能,不关心电路的具体实现。电路的具体实现过程由软件自动完成。
      采用行为描述的建模方式,对电路的描述效率更高,可以用简洁的语句描述复杂的逻辑电路。下面还是以一位全加器为例,简单介绍行为建模的基本方式,让大家有一个概念。行为建模的具体细节以及一些高级语句的介绍放在后续专门的章节中介绍。

[例1]
                                                                            图1.一位全加器结构图(行为建模1)
代码:
module FA_behav1(A, B, Cin, Sum, Cout );
input       A,B,Cin;
output    Sum,Cout;
reg         Sum, Cout;
reg         T1,T2,T3;

always@ ( A or B or Cin )
begin
      Sum = (A ^ B) ^ Cin ;
      T1 = A & B ;
      T2 = B & Cin;
      T3 = A & Cin;
      Cout = (T1| T2) | T3;
end

endmodule
      上例中,出现了一个行为建模中的关键字:reg、always、begin end。对于行为建模方式,以下几点概念必须建立:
             1.只有寄存器类型的信号才可以在always和initial 语句中进行赋值,类型定义使用reg关键字声明。由于信号默认的类型
                是wire,所以reg型变量必须在module中声明。

             2.always 语句是一直重复执行的,由敏感表(always 语句括号内的变量)中的变量触发,每次敏感列表中的变量发生
                变化时,always语句内部的各个语句都要重新执行一次。

             3.always 语句从0 时刻开始。
             4.在begin 和end 之间的语句是顺序执行,属于串行语句。


[ 例2]                                                                        图2.一位全加器结构图(行为建模2)

代码:
module FA_behav2(A, B, Cin, Sum, Cout );
input        A,B,Cin;
output     Sum,Cout;
reg          Sum, Cout;

always@ ( A or B or Cin )
begin
      {Cout ,Sum} = A + B + Cin ;
end

endmodule


        在例2中,采用更加高级(更趋于行为级)描述方式,即直接采用“+”来描述加法。{Cout,Sum}表示对位数的扩展,因为两个1bit 相加,和有两位,低位放在Sum 变量中,进位放在Cout 中。
行为描述方式可以使用一些类似于C语言的高级语句,例如if else和case等。一段使用case语句的进行行为描述方式建模的代码,如果改为用数据流描述方式来实现(假设都是组合逻辑,组合逻辑可用数据流描述方式和行为描述方式建模,时序逻辑只能用行为描述方式建模),代码量会剧增,可读性也会很差。行为描述方式体现了verilog HDL的精髓和强大的建模能力,同时代码具有很好的可读性和抽象性,体现了高级语言的优点。当然,结构建模方式和数据建模方式也是必不可少的,应该根据需要合理的搭配使用三种不同的方式进行建模。


一周热门 更多>