数据流描述方式:
用数据流描述对一个设计建模的最基本方式是连续赋值语句。连续赋值语法assign [delay] LHS_net = RHS_ expression
‘timescale 1ns/1ns
module Decoder2_4(A,B,EN,Z);
input A,B,EN;
output [0:3] Z;
wire Abar,Bbar; //线网类型定义两个连线型变量
assign #1 Abar = A~;
assign #1 Bbar = B~;
assign #2 Z[0] = (Abar&Bbar&EN);
assign #2 Z[1] = (B&Abar&EN);
assign #2 Z[2] = (A&Bbar&EN);
assign #2 Z[3] = (A&B&EN);
连续赋值语句是对电路的数据流行为建模的,连续赋值语句是并发执行的,不是顺序执行的。
行为描述方式:行为功能使用过程语句结构描述
1.initial语句:只执行一次
2.always语句:循环执行,此语句重复执行。
只有寄存器类型数据能够在initial和always中被赋值。寄存器类型数据在被赋新值前保持原有值不变所有初始化语句和always语句都在0时刻并发执行。
对1位全加器电路建模:
module FA_Seq(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 & Cin);
T2 = (B & Cin);
T3 = (A & B);
Cout = (A | B) | C;
end
endmodule
reg Sum,Cout,T1,T2,T3;在always语句被赋值说明为reg类型,@(A or B or Cin)表示只要A,B,或者Cin只要有一个发生就执行。
在always顺序执行的过程中,过程赋值可以有一个可选的时延。
语句间时延: Sum = (A ^ B) ^ Cin; #4 T1 = A & Cin;
语句内时延:Sum = #3(A^B)^Cin;
initial语句:
‘timescale 1ns/1ns
module Test(Pop,Pid);
output Pop,Pid;
reg Pop,Pid;
initial
begin
Pop = 0;
Pid = 0;
Pop = #2 5;
Pid = #3 5;
end
endmodule
这个代码是测试代码,initial语句可用于测试时初始化值。
结构化描述形式:
1) 内置门原语(在门级); 2) 开关级原语(在晶体管级); 3) 用户定义的原语(在门级); 4) 模块实例 (创建层次结构)通过线网来相互连接
使用内置门原语描述的全加器电路实例
module FA_Str( A,B,Cin,Cout,Sum);
input A,B,Cin;
output Cout,Sum;
wire S1,T1,T2,T3;
xor
X1(S1 ,A ,B),
X2(Sum ,S1 ,Cin);
and
A1(T3 ,A ,B),
A2(T2 ,B ,Cin),
A3(T1 ,A ,Cin),
or
01(Cout ,T1 ,T2 ,T3);
endmodule
混合结构描述:
使用多种的上述描述方式对电路结构进行描述
原文地址:https://www.cnblogs.com/1mpanda/p/8295804.html