Verilog HDL三种建模方式

2020-02-27 21:08发布

       如果总结使用verilog HDL进行建模的各种语法,可以将verilog HDL建模方式简单的归纳为三类:结构化描述方式、数据流描述方式、行为描述方式。一个模块中往往是将三种建模方式混合起来使用,来描述一个完整的功能。这三种建模方式是业界在使用verilog HDL的过程中不断归纳总结出来的,与IEEE 1364-2001的划分方式不太一样。这种简化后的归纳分类十分清晰,更利于掌握Verilog HDL的设计方法。学习笔记将会用四小节来分别介绍这三种建模方式的特点,以及如何使用三种方式混合建模。每小节都会介绍各种建模方式的基本概念,同时会给出详细的示例,便于读者对三种建模方式有一个概括性的了解。笔记中会以博主注的形式,说明一些需要注意的知识点并做一定延伸,并介绍三种建模方式的应用特点。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
星星之火红
2020-02-27 23:32
结构化的建模方式就是通过对电路的层次和组成结构进行描述来建模,即通过对器件的调用(HDL概念称为例化),并使用线网来连接各器件来描述一个模块的结构。这里的器件包括Verilog HDL的内置门如与门and,异或门xor等,也可以是用户自定义的一个模块,还可以是FPGA厂商的提供的一个基本逻辑单元或者宏。结构化的描述方式反映了一个设计的层次结构。

[例1]


                                                                         图1.一位全加器的结构图

代码:
module FA_struct (A, B, Cin, Sum, Cout);
input   A;
input   B;
input   Cin;
output  Sum;
output  Cout;
wire    S1, T1, T2, T3;

// -- statements -- //
xor     x1 (S1, A, B);
xor     x2 (Sum, S1, Cin);
and     A1 (T1, A, B );
and     A2 (T2, B, Cin);
and     A3 (T3, A, Cin);
or      O1 (Cout, T1, T2, T3 );

endmodule
      该实例显示了一个全加器由两个异或门、三个与门、一个或门构成。S1、T1、T2、T3则是门与门之间的连线。代码显示了用纯结构的建模方式,其中xor 、and、or 是Verilog HDL 内置的门器件。以 xor x1 (S1, A, B) 该例化语句为例:xor 表明调用一个内置的异或门,器件名称xor ,代码实例化名x1(类似原理图输入方式)。括号内的S1,A,B 表明该器件管脚的实际连接线(信号)的名称,其中 A、B是输入,S1是输出。其他同。

[例2]
                                                                    图2.两位全加器的结构图
代码:
module Four_bit_FA (FA, FB, FCin, FSum, FCout ) ;parameter   SIZE = 2;
input   [SIZE-1:0]  FA;
input   [SIZE-1:0]  FB;
input               FCin;
output  [SIZE-1:0]  FSum;
output              FCout;
wire                FTemp;FA_struct FA1(
.A      (FA[0]),
.B      (FB[0]),
.Cin    (FCin) ,
.Sum    (FSum[0]),
.Cout   (FTemp)
);FA_struct FA2(
.A      (FA[1]),
.B      (FB[1]),
.Cin    (FTemp) ,
.Sum    (FSum[1]),
.Cout   (FCount )
);endmodule      该实例用结构化建模方式进行一个两位的全加器的设计,顶层模块Four_bit_FA 调用了两个一位的全加器 FA_struct 。在这里,以前的设计模块FA_struct 对顶层而言是一个现成的器件,顶层模块只要进行例化就可以了。注意这里的例化中,端口映射(管脚的连线)采用名字关联,如 .A (FA[2]) ,其中.A 表示调用器件的管脚A,括号中的信号表示接到该管脚A的电路中的具体信号。wire 保留字表明信号Ftemp 是属线网类型(下面有具体描述)。另外,在设计中,尽量考虑参数化的问题。器件的端口映射必须采用名字关联。

文中的代码可以直接用于综合,文中图片即为Synplify综合后的RTL View做过简单修改后的图像。为了获得和博文中一样的RTL View,必须将Synplify的Implementation Option->Disable I/O Insertion选中。

一周热门 更多>