• 关于i2c(1)


    看到de2程序中wire I2C_SDAT=SDO?1'bz:0 ;当时觉得SD0的状态要是1的话,则高阻则做作为输入,而作为输出地话只有0状态,这样是不是不对??上网找了一些资料·~发现也是潜规则,同学说跟485的规则差不多~~

    来自~~http://www.cnblogs.com/yuphone/archive/2010/11/01/1866662.html
    解释如下:
    对于主机来说,要使得SDA作为输入口,就必须先将其拉成高阻态。而SDA作为输出口的情况下,就有一个技巧,不仔细还真有点难以捉摸:主机输出高电平, 可以直接输出高电平;也可以输出高阻,由于接有上拉电阻,因此从机会接收到高电平。而主机输出想要输出低电平,为了摆脱上拉电阻的束缚,就必须直接输出低电平。

    另外关于inout:

    输入口din定义:input[7:0] din;当双向端口dinout作为输出口时,我们从din端口输入数据到模块中,让数据从dinout口出来。

    输出口dout定义output[7:0] dout;当双向端口dinout作为输入口时,

    我们让数据从dinout 口输入,从输出口dout 输出。
    双向端口dinout定义: inout [7:0]  dinout;
    三态门选通信号 z : input z ;
    当z=1时,把三态门置为高阻态,这时dinout作为输入口用;当z=0时,开通三态门,这时dinout作为输出口用。
    三态门控制语句为:
      assign  dinout = (!z) ? din_reg : 8'bz;
    总的完整程序如下:

     moduled  inout(din,z,clk,dout,dinout);
      input [7:0]  din;
      input z;
      input clk;
      output [7:0]  dout;
      inout [7:0]  dinout;

      reg [7:0]  dout;
      reg [7:0]  din_reg;

      assign  dinout=(!z)? din_reg: 8'bz ;
    always @(posedge clk)
      begin
        if(!z)
          din_reg=din;
        else
          dout=dinout;
      end
    endmodule

    oc门,高阻就是输入,其它就是输出

     

  • 相关阅读:
    let与const的区别
    IOS客户端UIwebview下web页面闪屏问题
    移动端click事件延迟300ms问题
    css3+visbibilty解决淡入淡出问题
    git学习之branch分支
    git学习之冲突解决办法
    webpack+vue-cli项目打包技巧
    一个高级PHP工程师所应该具备的
    多站点
    PHP error_reporting() 错误控制函数功能详解
  • 原文地址:https://www.cnblogs.com/woshitianma/p/2823535.html
Copyright © 2020-2023  润新知