一、门级建模语法
1、模块定义
module 模块名(端口名1 ,端口名2 ,...);
...
endmodule
例:
module MUX4x1(Y,A,B,C,D,S1,S0,EN_);
Verilog HDL语言中标识符由字母、数字、美元符号、下划线组成,字母区分大小写,同时标识符的开头只能是字母或下划线。
2、端口声明
Verilog HDL关键字 | 端口类型 |
---|---|
input | 输入端口 |
output | 输出端口 |
inout | 双向端口 |
端口默认1位宽度,即只能传播1位有效信息
端口类型 [端口位宽左界:端口位宽右界] 端口名;
例如:
input [2:0] cin;
outout[0:4] cout;
inout [4:7] fast;
端口声明中会默认把定义的端口声明位wire类型;除了output可以定义为reg类型,input、inout只能为wire类型。
3、门级调用`
逻辑门类型 <实例名称(可选)> (端口连接)
例:
not (s1_n , s1);
buf b1 (out1 , in);
逻辑门分为两大类:
buf(缓冲器),not(非门)
单输入逻辑门的功能表
多输入逻辑门
多输入调用
and(Y,A,B);
or (Y,A,B);
and and1 (Y,A,B);
4、模块实例化
模块名称 实例名称 (端口连接)
例
MUX4*1 mymux(.Y(y), .A(a), .B(b), .C(c), .D(d), .En(e), .S1(f), .S0(g));
5、内部连接声明
wire [线宽-1 :0] 线名称;
例:
wire [3:0] b; //定义4位网线b
wire a; //定义1位网线a
二、典型门级建模
1、四位全加器
四位全加器是由1位全加器串联组成
1位全加器RTL图如下图所示
module fulladd(cin ,A ,B ,S ,cout);
output S,cout;
input cin ,A ,B;
xor (S, cin , A , B);
and (a1, cin , A);
and (a2, cin , B);
and (a3, A , B);
or (cout , a1 , a2 , a3);
endmodule
四位全加器RTL图如下图所示
module add4 (S, COUT , CIN , A , B);
output [3:0] S;
output COUT;
input [3:0] CIN, A, B;
wire c0 ,c1 ,c2;
fulladd add0(.S(S[0]) , .cout(c0) , .cin(CIN), .A(A[0]), .B(B[0]));
fulladd add1(.S(S[1]) , .cout(c1) , .cin(c0), .A(A[1]), .B(B[1]));
fulladd add2(.S(S[2]) , .cout(c2) , .cin(c1), .A(A[2]), .B(B[2]));
fulladd add3(.S(S[3]) , .cout(COUT) , .cin(c2), .A(A[3]), .B(B[3]));
endmodule
仿真结果如下图所示;
2、2-4译码器门级电路
2–4译码器即是对输入00 01 10 11,分别输出四位不同的值。
RTL电路图如下图所示:
module DEC2_4(A,B,En,Z);
input A,B,En;
output [3:0] Z;
wire n1,n2;
not (n1, A);
not (n2, B);
nand(Z[0],n1,n2,En);
nand(Z[1],n1,B,En);
nand(Z[2],A,n2,En);
nand(Z[3],A,B,En);
endmodule
仿真结果如下图所示
3、主从D触发器
D触发器是一个具有记忆功能的,同时具有零个稳定状态的储存器。
功能表
时序图
RTL门级电路图如下图所示:
module MSDFF(D,Q,Qbar,C);
output Q,Qbar;
input D,C;
not
not1(NotD, D),
not2(NotC, C),
not3(NotY, Y);
nand
nand1(D1,D,C),
nand2(D2,C,NotD),
nand3(Y,D1,Ybar),
nand4(Ybar,D2,Y),
nand5(Y1,Y,NotC),
nand6(Y2,NotY,NotC),
nand7(Q,Qbar,Y1),
nand8(Qbar,Y2,Q);
endmodule
仿真电路图如下图所示
声明:该文只适用于学习,其内容包含来自书本的摘抄和总结,欢迎大家补充,共同学习进步。