资源描述:
《verilog建模方式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、verilogHDL建模方式简单的归纳为三类:结构化描述方式、数据流描述方式、行为描述方式。一个模块中往往是将三种建模方式混合起来使用,来描述一个完整的功能。系统级、算法级、RTL级属于行为级,门级、开关级属于结构级。系统级:用高级语言实现设计模块的外部性能的模型。算法级:用高级语言结构实现设计算法的模型。RTL级:描述数据在寄存器之间流动和如何树立这些数据的模型门级:描述逻辑门以及逻辑门之间的连线的模型开关级:描述器件中三极管和存储节点以及他们之间连线的模型1)结构化的建模方式是通过对电路的层次和组成结构进行描述来建模,即通过对器件的调用(HDL概念称为例化),并使用线网来连接各
2、器件来描述一个模块的结构。这里的器件包括VerilogHDL的内置门如与门and,异或门xor等,也可以是用户自定义的一个模块,还可以是FPGA厂商的提供的一个基本逻辑单元或者宏。结构化的描述方式反映了一个设计的层次结构。moduleFA_struct(A,B,Cin,Sum,Cout);inputA;inputB;inputCin;outputSum;outputCout;wireS1,T1,T2,T3;//--statements--//xorx1(S1,A,B);xorx2(Sum,S1,Cin);andA1(T1,A,B);andA2(T2,B,Cin);andA3(T3,
3、A,Cin);orO1(Cout,T1,T2,T3);endmodule该实例显示了一个全加器由两个异或门、三个与门、一个或门构成。S1、T1、T2、T3则是门与门之间的连线。代码显示了用纯结构的建模方式,其中xor、and、or是VerilogHDL内置的门器件。以xorx1(S1,A,B)该例化语句为例:xor表明调用一个内置的异或门,器件名称xor,代码实例化名x1(类似原理图输入方式)。括号内的S1,A,B表明该器件管脚的实际连接线(信号)的名称,其中A、B是输入,S1是输出。2)数据流建模方式数据流的建模方式就是通过对数据流在设计中的具体行为的描述来建模。最基本的机制就是
4、用连续赋值语句。在连续赋值语句中,某个值被赋给某个线网变量(信号)。语法如:assign#2A=B;在数据流描述方式中,还必须借助于HDL提供的一些运算符。如算术运算符、关系运算符、逻辑运算符、按位逻辑运算符、条件运算符,以及连接运算符等。通过将这些运算符嵌入到连续赋值语句中,可以形成比较复杂的连续赋值语句,用来描述一些较复杂的线网变量的产生过程(即线网变量的行为)。`timescale1ns/100psmoduleFA_flow(A,B,Cin,Sum,Cout)inputA,B,Cin;outputSum,Cout;wireS1,T1,T2,T3;assign#2S1=A^B;
5、assign#2Sum=S1^Cin;assign#2T1=A&B;assign#2T2=B&Cin;assign#2T3=A&Cin;assign#2Cout=T1
6、T2
7、T3;endmodulemodule内的各个assign语句,是并行执行的,即各语句的执行与语句在module内出现的先后顺序无关。当assign语句右边表达式中的变量发生变化时,表达式的值会重新计算,并将结果赋值给左边的线网变量。如果赋值语句使用了时延,那么在等待时延结束后再将表达式的值赋给左边的线网变量。上例中每个assign语句都加了2个时间单位的时延,若右边表达式的值发生变化,assign语句左边的变量
8、会在2个时间单位后获得右边表达式的新值。即,当信号A发生变化后,S1、T1、T3也会跟着变化(A变化的2个时间单位后),S1的变化又会导致Sum的变化(A变化的4个时间单位后)。数据流描述方式,相对行为描述方式而言,描述的都是比较简单的信号,不用类似于高级语言的高级语句(如ifelse,case等)就可以很容易的将信号的行为描述出来。而且通过数据流描述方式描述的电路,我们可以很容易的看出它的电路组成,如通过几个与门或者几个异或门,不需要经过很复杂的分析就可得知。对于行为描述方式,由于嵌入了大量的高级语句,我们很容易理解电路的行为,却不容易一下子看出电路的结构来。3)行为描述方式建模
9、行为描述方式是指通过对信号的行为进行描述来建模。在表示方面,类似数据流建模方式,但一般是把用initial块语句或always块语句描述的归为行为建模方式。行为描述方式中,我们不关心电路使用到哪些基本逻辑单元(如逻辑门、厂商的基本逻辑单元LUT等),也不关心这些基本逻辑单元最终是怎么连起来的,只关心电路具有什么样的功能。为了达到这个目的,行为描述建模方式中使用了大量的类似C语言的高级语句,如ifelse、case、for、while等等,可以很方便的用简洁的代码描述复