tag 标签: 三态门

相关博文
  • 热度 15
    2016-4-20 10:27
    1642 次阅读|
    0 个评论
      三态指其输出既可以是一般二值 逻辑电路 的正常的高电平(逻辑1)或低电平(逻辑0),又可以保持特有的高阻抗状态(Hi-Z)。 处于高阻抗状态时,输出电阻很大,相当于开路,没有任何逻辑控制功能。 高阻态 的意义在于实际电路中不可能断开电路。三态电路的输出逻辑状态的控制,是通过一个输入引脚 实现的           在之前的实验中,我们所接触到的 IO 都是单纯的输入( input) 或者输出 (output)类型,而我们的一些总线协议如 IIC 等,要求信号为三态类型,也就是 我们所说的输入输出( inout) 类型。 接下来,我们就来看一下这类信号的具体用法,输入输出类型,顾名思义就 是既可以作为输入,也可以作为输出   我们可以通过如下代码学习这类信号的赋 值驱动方式 代码: module state_3(clk,rst_n,sda); input clk,rst_n; inout sda; reg flag;//三态门开关 reg sda_buf;//待发送数据寄存器 assign sda = (flag == 1)?sda_buf : 1'bz; always @(posedge clk or negedge rst_n) if(!rst_n)begin flag = 0; sda_buf = 1; end else begin flag = 1; end endmodule `timescale 1ns/1ns `define clock_period 20 module state_3_tb; reg clk,rst_n; wire sda; initial clk =1; always #(`clock_period/2) clk = ~clk; initial begin rst_n = 1'b0; #(`clock_period*5)  rst_n = 1'b1; #(`clock_period + 1); #(`clock_period*200); $stop; end state_3 state_3(.clk(clk),.rst_n(rst_n),.sda(sda)); endmodule rtl: 仿真:   典型的三态门应用: 如果你的设备端口要挂在一个总线上, 必须通过三态缓冲器。 因为在一个总线上 同时只能有一个端口作输出, 这时其他端口必须在 高阻态 , 同时可以输入这个输出端口的数据。 所以你还需要有总线控制管理, 访问到哪个端口, 那个端口的三态缓冲器才可以转入输出状态。
  • 热度 28
    2015-9-29 15:59
    1404 次阅读|
    0 个评论
    一 .USB2.0简介 USB2.0协议时一种高速串行的通信协议,它是半双工的,最高传输速率可达480MHZ/s,并且支持热插拔等特点,目前被广泛使用。 二.项目描述 既然是图像采集,就要有采集图像的设备,它将采集到的数据发送给FPGA,通过LVDS_BUFF模块将串行数据转换成并行数据,并完成时钟域的转换;然后通过SDRAM_CTRL控制模块将数据缓存到SDRAM中;再通过GEN_F(成帧模块)为数据加上帧结构,以及时钟域的切换;最后通过USB_CTRL模块将数据传送给USB芯片,等待上位机来将数据读走。 该项目一共有四个字模块,各个模块之间的关系可见下图,今天首先介绍USB2.0模块,我们使用的USB芯片型号为CY7C68013A。 项目整体架构图  三.USB子模块介绍 如下图, FPGA 与PC之间通过USB芯片完成数据的传输,USB芯片为两FIFO机制,分别为读、写FIFO。写数据时,FPGA将数据写入到W_FIFO中,FPGA发送一个PKG_END(结束信号),通知PC来取数据。读数据时,PC机先将数据写入R_FIFO,在一定条件下,FPGA通过USB控制模块将数据取出。       从开发板手册上可以看到这样几个管脚(管脚名字已改为笔者自己定义的名字)usb_clk,addr,w_en,usb_data,oe,r_en,flag_b,flag_c。我们来分别看看这些管脚的含义。 usb_clk:usb时钟 addr:选择哪一个FIFO。这个很好理解,既然有两块FIFO,那么我当前使用的是哪一块,就要通过这么一个地址来说明。 w_en:写使能,低有效。w_en有效数据才可写入W_FIFO。 oe:读数据时使用,数据导通到管脚。 r_en:读使能,低有效。在oe有效的前提下,r_en有效,才可从R_FIFO中读出数据。 flag_c:空标志。 flag_b:满标志。 usb_data:数据线,FPGA与USB的数据线只有这么一条,它要完成读写操作,因此它的接口类型为IO(输入输出),是一个三态结构。    1.三态门结构图解说明 注:斜线代表该信号位宽大于1。   三态门结构在IOB中,IOB通过连接PAD(芯片上的IOB与pin连接的接口)与pin连接,将数据输入输出。当en使能时,W_data通过usb_data输出到USB W_FIFO中;当en无效时,R_data通过usb_data将数据读入到R_data中。     2.接口说明 1)写接口       2)读接口   3.关键信号时序 1)写时序 FPGA写数据时: 1. 首先addr选中W_FIFO,延时一个时钟(等待读写FIFO的切换)。 2. 检测FIFO为空(flag_C)将W_en有效,同时开始向FIFO中写入数据W_data,记过两个时钟,flag_C拉高。 3. 写满FIFO后,W_en无效,通知PC来读数据。 4. Pkg_end 为结束标志,随时可以拉底信号,结束写操作,通知 PC 机来读,这里没有使用该信号。只有写满 FIFO ,上位机才来取数据。 2)读时序   FPGA读数据时: 1. 首先addr选中R_FIFO,延时一个时钟(等待读写FIFO的切换)。 2. 检测FIFO为满(flag_b)同时将O_en、R_en有效(或者O_en先有效、R_en再有效),开始从FIFO中读出数据R_data,记过两个时钟,flag_b拉高。 3.读空 FIFO后, O_en、R _en无效。   注:该项目中只使用了写操作,读操作没有使用,但还是把读时序给出,便于大家理解。USB控制模块是这四个模块中最简单的一个模块,后续还会把其它模块按照笔者自己的理解给出,希望对大家有益。   
相关资源