Verilog HDL三种建模方式

2020-02-27 21:08发布

       如果总结使用verilog HDL进行建模的各种语法,可以将verilog HDL建模方式简单的归纳为三类:结构化描述方式、数据流描述方式、行为描述方式。一个模块中往往是将三种建模方式混合起来使用,来描述一个完整的功能。这三种建模方式是业界在使用verilog HDL的过程中不断归纳总结出来的,与IEEE 1364-2001的划分方式不太一样。这种简化后的归纳分类十分清晰,更利于掌握Verilog HDL的设计方法。学习笔记将会用四小节来分别介绍这三种建模方式的特点,以及如何使用三种方式混合建模。每小节都会介绍各种建模方式的基本概念,同时会给出详细的示例,便于读者对三种建模方式有一个概括性的了解。笔记中会以博主注的形式,说明一些需要注意的知识点并做一定延伸,并介绍三种建模方式的应用特点。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
星星之火红
2020-02-28 00:28
数据流的建模方式就是通过对数据流在设计中的具体行为的描述来建模。最基本的机制就是用连续赋值语句。在连续赋值语句中,某个值被赋给某个线网变量(信号),语法如下:
      assign [delay] net_name = expression;
      例如:
      assign #2 A = B;  


      在数据流描述方式中,还必须借助于HDL提供的一些运算符。如算术运算符:加(+)、减(-)等;关系运算符:大于(>),等于(==),不等于(!=)等等;按位逻辑运算符:逻辑与(&&),逻辑或(||)等;按位逻辑运算符:按位与(&)、按位或(|)等等;条件运算符:cond_expr ? expr1 : expr2;以及连接运算符:{expr1, expr2, . . .,exprN}。通过将这些运算符嵌入到连续赋值语句中,可以形成比较复杂的连续赋值语句,用来描述一些较复杂的线网变量的产生过程(即线网变量的行为)。
       继续以上一节中的一位全加器为例,介绍如何用数据流描述方式来来建模:
[例1]

                                                                            图1.一位全加器结构图 代码:
`timescale 1ns/100ps
module FA_flow(A,B,Cin,Sum,Cout)

input       A,B,Cin;
output    Sum, Cout;
wire       S1,T1,T2,T3;

assign #2 S1 = A ^ B;
assign #2 Sum = S1 ^ Cin;
assign #2 T1 = A & B;
assign #2 T2 = B & Cin;
assign #2 T3 = A & Cin ;
assign #2 Cout = T1|T2|T3;

endmodule


       注意,module内的各个assign 语句,是并行执行的,即各语句的执行与语句在module内出现的先后顺序无关。当assign语句右边表达式中的变量发生变化时,表达式的值会重新计算,并将结果赋值给左边的线网变量。如果赋值语句使用了时延,那么在等待时延结束后再将表达式的值赋给左边的线网变量。上例中每个assign语句都加了2个时间单位的时延,若右边表达式的值发生变化,assign语句左边的变量会在2个时间单位后获得右边表达式的新值。即,当信号A发生变化后,S1、T1、T3 也会跟着变化(A变化的2个时间单位后),S1的变化又会导致Sum的变化(A变化的4个时间单位后)。

数据流描述方式,相对行为描述方式而言,描述的都是比较简单的信号,不用类似于高级语言的高级语句(如if else,case等)就可以很容易的将信号的行为描述出来。而且通过数据流描述方式描述的电路,我们可以很容易的看出它的电路组成,如通过几个与门或者几个异或门,不需要经过很复杂的分析就可得知。对于行为描述方式,由于嵌入了大量的高级语句,我们很容易理解电路的行为,却不容易一下子看出电路的结构来。

一周热门 更多>