首页 > 其他分享 >pullup和pulldown在verilog中的使用方法

pullup和pulldown在verilog中的使用方法

时间:2023-06-10 22:33:06浏览次数:39  
标签:10 dout initial pulldown b0 verilog pullup sel

0 前言

这段时间涉及到了IO-PAD,在IO-PAD的RTL的时候注意到了pullup和pulldown,对这个知识比较好奇,就研究了一下,顺便记录下来,IO-PAD的内容等我再研究研究再考虑记录吧 >_<

1 pullup和pulldown的介绍

pullup和pulldown并非是verilog的内置原语,仅在仿真或综合过程中起作用,用来设置信号的默认状态

在实际的硬件电路中,用来代表上拉和下拉,就比如在I2C中,SCL和SDA两个信号是open-drain的,在实际使用过程中往往需要接上拉电阻,如下图

接在VCC的两个电阻就是上拉电阻,这个上拉电阻在verilog中就可以用pullup表示

下面结合实例来看看怎么使用

2 不使用pullup和pulldown的情况

`timescale 1ns/10ps
module tb;
   logic dout;
   logic sel;
   
   assign dout = sel ? 1'bz : 1'b0;
   
   
   initial begin
      sel = 1'b0;

      #10;
      sel = 1'b1;

      #10;
      sel = 1'b0;

      #10;
      $finish;
      
   end // initial begin

   initial begin
      $monitor("\t", $time, ,"sel = %0b,  dout = %0b", sel, dout);
   end
   
endmodule

在这个例子中,当sel = 1'b1时输出highzsel = 0时输出0,在initial·中对sel先后赋值0和1,来看看运行结果

可以看到当sel = 0时,dout = 0,当sel = 1时,dout = z,这个结果符合预期

注意,在这个例子中,并没有使用到pullup,下面给出使用pullup的例子

2 使用pullup和pulldown的情况

`timescale 1ns/10ps
module tb;
   logic dout;
   logic sel;
   
   assign dout = sel ? 1'bz : 1'b0;
   pullup(dout);
      
   initial begin
      sel = 1'b0;

      #10;
      sel = 1'b1;

      #10;
      sel = 1'b0;

      #10;
      $finish;
      
   end // initial begin

   initial begin
      $monitor("\t", $time, ,"sel = %0b,  dout = %0b", sel, dout);
   end
 
endmodule

同样的例子,加上了pullup(dout)语句(第7行),其他的均为改变,首先可以看到pullup有被highlight,说明这是一个关键词

下面开始编译

报错了,给的原因是logic声明的变量不能连接到带有驱动强度的gate输出端,那把logic声明改成wire,修改后的代码如下

`timescale 1ns/10ps
module tb;
   wire dout;
   logic sel;
   
   assign dout = sel ? 1'bz : 1'b0;
   pullup(dout);
      
   initial begin
      sel = 1'b0;

      #10;
      sel = 1'b1;

      #10;
      sel = 1'b0;

      #10;
      $finish;
      
   end // initial begin

   initial begin
      $monitor("\t", $time, ,"sel = %0b,  dout = %0b", sel, dout);
   end
   
   
endmodule

再次编译

编译通过,下面执行仿真,来看看仿真结果

可以看到在这个例子中,当sel = 1时,dout = 1,不再是highz

3 push-pull和open-drain的介绍

就拿mos管来简单介绍一下吧

这是一个push-pull的电路,由两个mos管组成,上面的是PMOS,下面的是NMOS

IN = 1时,NMOS导通,PMOS截止,最终OUT = 0,电流方向为OUT -> NMOS,这个过程叫

IN = 0时,NMOS截止,PMOS导通,最终OUT = 1,电路方向为PMOS -> OUT,这个过程叫

这就是push-pull(推挽)

这是open-drain,与push-pull不同的是上面的PMOS换成了电阻,这个电阻就是上拉电阻

同样的,当IN = 1时,NMOS导通,OUT = 0

那当 IN = 0时呢?NMOS截止,如果此时不接上拉电阻,那么OUT端此时的状态是不确定的(单看这个电路的情况下)

当接入一个上拉电阻后,由于MOS管截止后,电阻可以看做是无穷大,此时从VDD -> GND就可以看做是一个电阻R和一个电阻无穷大的NMOS串联,那么在OUT点的电压自然约等于VDD


OK,先这样,至于在用pullup的时候为什么不能用logic声明,下次介绍吧

标签:10,dout,initial,pulldown,b0,verilog,pullup,sel
From: https://www.cnblogs.com/ICcode/p/17472109.html

相关文章

  • m基于FPGA的8点DCT变换verilog实现,包含testbench,并对比matlab的计算结果
    1.算法仿真效果本系统进行了两个平台的开发,分别是:Vivado2019.2Quartusii18.0+ModelSim-Altera6.6dStarterEdition其中Vivado2019.2仿真结果如下:Quartusii18.0+ModelSim-Altera6.6dStarterEdition的测试结果如下:matlab对比结果如下:部分小的误差是由于FPGA设计......
  • m基于FPGA的BPSK调制解调通信系统verilog实现,包含testbench,包含载波同步
    1.算法仿真效果vivado2019.2仿真结果如下:对比没载波同步和有载波同步的仿真效果,我们可以看到,当不存在载波同步时,数据的包络会有一个缓慢的类正弦变换,这是由于存在频偏导致的。而当加入载波同步之后,数据的包络会存在少量起伏,但数据反转的情况已经没有了,说明频偏得到了补偿。......
  • m基于FPGA的8点DCT变换verilog实现,包含testbench,并对比matlab的计算结果
    1.算法仿真效果本系统进行了两个平台的开发,分别是: Vivado2019.2 Quartusii18.0+ModelSim-Altera6.6d StarterEdition 其中Vivado2019.2仿真结果如下:  Quartusii18.0+ModelSim-Altera6.6d StarterEdition的测试结果如下:  matlab对比结果如下:   ......
  • m基于FPGA的BPSK调制解调通信系统verilog实现,包含testbench,包含载波同步
    1.算法仿真效果vivado2019.2仿真结果如下:         对比没载波同步和有载波同步的仿真效果,我们可以看到,当不存在载波同步时,数据的包络会有一个缓慢的类正弦变换,这是由于存在频偏导致的。而当加入载波同步之后,数据的包络会存在少量起伏,但数据反转的情况已经没有了,说......
  • m基于FPGA的FOC控制器verilog实现,包括CLARK,PARK,PID及SVPWM,含testbench
    1.算法仿真效果QuartusII12.1(64-Bit) ModelSim-Altera6.6dStarterEdition 仿真结果如下:   2.算法涉及理论知识概要整个系统的结构如下所示: 1、采集到两相电流 2、经过clarke变换后得到两轴正交电流量, 3、经过旋转变换后得到正交的电流量Id、Iq......
  • 合并数组与非合并数组 -- SystemVerilog
    合并型数组(packed):合并型数组可以实现连续的存储,赋值时不需要用 ’{}。 数组中,数据排列为{ b_pack[2], b_pack[1],b_pack[0]},其中每个b_pack为8个bit;bit是二值逻辑,每位bit只占据1位。故24位(8bit*3)只占据一个word(一般一个word为32bit)的存储空间。 非合并型数组......
  • verilog工程建立
    1,新建工程 2, 3,工程建立在prj目录下。 4, 5,选择对应的器件。 6, 语言选择verilongHDL 7,完成工程创建。  8,8.1创建一个VerilogHDL文件 8.1.2保存VerilogHDL文件建议新建一个文件夹,保存在rtl文件夹下后续,编写代码,编译。 8.2导入一个已有的VerilogHDL文件 打开,编......
  • SystemVerilog for Design Edition 2 Chapter 7
    SystemVerilogforDesignEdition2Chapter7SystemVerilogaddsseveralnewoperatorsandproceduralstatementstotheVeriloglanguagethatallowmodelingmoreconcisesynthesizableRTLcode.Additionalenhancementsconveythedesigner’sintent,helping......
  • Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别
    顺序块:顺序块中的语句执行都是从上到下顺序执行,和C语言执行过程一样,关键词是begin、end。initialbegin//顺序块关键字 tb_sel=1'b0; #5tb_in1=1'b1;//时刻5执行 #10tb_in2=1'b1;//时刻15执行 #20tb_sel=1'b1;//时刻35执行end编辑 上图为顺序块仿真时序图,可以看......
  • 每天都有一点新发现:Questa的Verilog仿真
        在自己的电脑里安装了QuestaIntelStarter和ModelSimStarter版本,因为不熟悉Questa,但是搜索了一下,发现它和ModelSim几乎是完全一样的。准备后续尽可能多的练习Questa的使用。    在Verilog里很多教材都会提供代码和生成的电路,今早用Questa试了一下生成的电路,......