• 第十一章 开关级建模


    基本概念

    • 在少数情况下,可能会选择用晶体管作为设计的底层模块,即叶级模块(leaf-level)。Verilog语言具有对MOS晶体管级进行设计的能力。
    • 由于电路复杂性的增加,及各种更加先进的CAD工具,开关级为基础的设计慢慢少了。
    • Verilog HDL仅提供用逻辑值0,1,x,z和它们相关的驱动强度进行数字设计的能力(MOS管用于开关应用),无法用于模拟设计。
    • 学习流程图在这里插入图片描述

    建模元件

    • 最基本的电路模型元件

    MOS开关

    • 关键字:nmospmos
    • nmos与pmos开关符号
      在这里插入图片描述
    • 调用实例
    // 调用nmos和pmos开关
    nmos n1(out, data, control);
    pmos p1(out, data, control);
    
    // 调用nmos和pmos开关,可以无实例名称
    nmos (out, data, control);
    pmos (out, data, control);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 上例中,out的值由data和control控制,逻辑值如下
      在这里插入图片描述

    CMOS开关

    • 关键字:cmos
    • cmos开关符号
      在这里插入图片描述
    • 实例引用
    // 有实例名调用和无实例名调用
    cmos c1(out, data, ncontrol, pcontrol);
    cmos (out, data, ncontrol, pcontrol);
    
    • 1
    • 2
    • 3
    • 可以使用nmos和pmos器件来建立cmos器件的模型
    nmos (out, data, ncontrol);
    pmos (out, data, pcontrol);
    
    • 1
    • 2
    • 逻辑值可以由pmos和nmos的逻辑值推导而来,这里不再赘述。

    双向开关

    • 关键字:trantranif0tranif1
    • 开关符号
      在这里插入图片描述
    • 引用实例
    tran t1(inout1, inout2);
    tranf0 (inout1, inout2, control);
    tranf1 (inout1, inout2, control);
    
    • 1
    • 2
    • 3
    • 逻辑如下:
      • tran开关作为两个信号inout1和inout2之间的缓存。inout1和inout2都可以是驱动信号。
      • control为0,tranf0 开关连接inout1和inout2。
      • control为1,tranf0没有驱动源的信号取高阻态z,有驱动源信号仍从驱动源取值。
      • control为0,tranf1 开关导通。
    • 双向开关经常用来在总线或信号之间提供隔离。

    电源和地

    • 源极(Vdd,逻辑1),漏极(Vss,逻辑0)。关键字:supply1supply0
    • supply1等于电路中Vdd,并将逻辑1放在网表中。
    • supply0等于电路中Vss或地,并将逻辑0放在网表中。
    • 使用如下
    supply1 vdd;
    supply0 gnd;
    
    assign a = vdd;	//a连接到电源电压vdd
    assign b = gnd;	// b连接到gnd
    
    • 1
    • 2
    • 3
    • 4
    • 5

    阻抗开关

    • 阻抗开关具有更高的源极到漏极的阻抗,用以减小信号强度。
    • 在一般开关关键字前加带r前缀,即可声明阻抗开关。
    rnmos rpmos //阻抗性nmos和pmos
    rcmos 	// 阻抗性CMOS开关
    rtran rtranf0 rtranf1 	// 阻抗性双向开关
    
    • 1
    • 2
    • 3
    • 阻抗开关的强度如下
      在这里插入图片描述

    延迟说明

    • 可以为通过开关级元件的信号指定延迟,延迟是可选项,紧跟在开关的关键字之后。
    • MOS和CMOS开关延迟说明
      在这里插入图片描述
    • 双向传输开关
      在这里插入图片描述
    • specify块的延迟完全可以用于该模型的建模。

    举例说明

    CMOS或非门(nor)

    • 电路图
      在这里插入图片描述
    • Verilog代码
    module my_nor(
    	output out,
    	input a,b
    );
    
    // 定义内部连线
    wire c;
    
    // 定义地和电源线
    supply0 gnd;
    supply1 pwr;
    
    // 引用PMOS
    pmos (c, pwr, b);
    pmos (out, c, a);
    
    // 引用nmos
    nmos (out, gnd, a);
    nmos (out, gnd, b);
    
    endmodule
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 可惜我的quartus并不能综合MOS开关门,运行报错如下:Error (10014): Verilog HDL unsupported feature error at file "my_nor.v" (line 14): cannot synthesize MOS switch gate primitive
    • 可见这么使用,确实是很少用,做了解即可。
    • 仿真代码如图:
      在这里插入图片描述

    二选一多路选择器

    • 用cmos开关来定义二选一多路选择器

    • 电路图
      在这里插入图片描述

    • Verilog描述如下
      在这里插入图片描述

    CMOS锁存器

    • 定义一个可以存储值的存储元件,电路图如下
      在这里插入图片描述
    • 逻辑:clk=1,则C1开关关闭;clk=0,则C2开关关闭,clk的相反值送给C2的ncontrol输入端。
    • 用MOS开关定义CMOS反相器
      在这里插入图片描述
    • 反相器Verilog描述
      在这里插入图片描述
    • CMOS锁存器描述
      在这里插入图片描述
  • 相关阅读:
    [运维|系统] go程序设置开机启动踩坑笔记
    企业架构LNMP学习笔记32
    如何解决bootstrap覆盖css样式的问题?
    docker学习记录(二)
    [模块化编写驱动控制LED灯]
    Redis高并发分布式锁详解
    Rust语言从入门到入魔 (更新中)
    SQL日期函数
    openradar中最后跟踪的解释
    DBRichEdit关联ClientDataSet不能保存的Bug
  • 原文地址:https://blog.csdn.net/Cherish1ove/article/details/126148315