Verilog电路实例

1.二选一数据选择器---mux2tol(7月9号)


mux2tol.png

``门级描述方式:

module mux2tol(D0,D1,S,Y);
    input D0,D1,S;
    output Y;
    wire Snot,A,B;//内部节点说明
    //对电路的逻辑功能进行描述
    not U1(Snot,S);
    and U2(A,D0,Snot);
    and U3(B,S,D1);
    or U4(Y,A,B);
endmodule

``数据流描述方式:

module mux2tol_dataflow(D0,D1,S,Y)
    input D0,D1,S,Y;    //输入端口声明
    output Y;           //输出端口声明
    wire Y;             //变量的数据类型声明
   //电路功能描述
    assign Y = ( ~S & D0 | S & D1);  //存疑:与门用逻辑与还是按位与
endmodule

``

``行为描述方式:

module mux2tol_bh(D0,D1,S,Y);
      input D0,D1,S;
      output Y;
      reg Y;
      //高级语言对电路的行为进行描述:
          always @(S or D0 or D1)  //敏感变量列表:循环执行语句 
          if(S==1) Y = D1;
          else Y = D0;
  endmodule       //利用if-else的过程性语言

``
always PK assign:
always:过程赋值语句只能给寄存器变量赋值,描述时序逻辑,且内部包含的语句是按代码排列顺序执行。

assign:描述组合逻辑电路,多条assign语句都是并行执行的。
修订后的Verilog标准的敏感变量列表中,可以用逗号代替or,也可以用*号来代替敏感变量列表中所有输入信号
``修订后:

module mux2_tol_bh( )
    input D0,D1,S,Y;
    output reg Y ;
       always@(D0,D1,S)
          if(S)  Y = D1;
          else   Y = D0;

``


2018.7.11

1.CMOS反相器:
Nnot.png

``开关级建模方法:nmos(d,s,g);
module NAND2(L,A,B);
  input A,B;
  output L;
  supply1 Vdd;
  supply0 GND;
  wire W1;
  pmos(L,Vdd,A);     //顺序:d,s,g
  pmos(L,Vdd,B);
  nmos(L,W1,A);
  nmos(W1,GND,B);
endmodule

``


2.CMOS传输门构成的异或门:
TG异或门.png
``CMOS传输门:开关级建模
//cmos C1(输出信号,输入信号,Tn管控制信号,Tp管控制信号)
module mymux2tol(A,B,L);
     input A,B;
     output L;  
     wire Anot,Bnot;
     inverterV1(Anot,A); 
  //调用开关级自定义下层模块inverter,调用名不能省略
     inverterV2(Bout,B);
     cmos (L,Anot,B,Bnot);  
     cmos (L,A,Bnot,B);
 endmodule

***********************************************************************************3.CMOS反相器
CMOS反相器.png

``CMOS反相器

module inverter(Vo,Vi);
  input Vi;
  output Vo;
  supply1 Vdd;
  supply0 GND;
  pmos (Vo,Vdd,Vi);
  nmos(Vo,GND,Vi);
endmodule

``

你可能感兴趣的:(Verilog电路实例)