http://www.blogbus.com/uyarotxb-logs/206932748.html     inout作为输出端口时三态门为选通状态,inout作为输入端口时三态门为高阻态,可通过link_data控制使能。

芯片外部引脚很多都使用inout类型的,为的是节省管腿。一般信号线用做总线等双向数据传输的时候就要用到INOUT类型了。就是一个端口同时做输入和输出。 inout在具体实现上一般用三态门来实现。三态门的第三个状态就是高阻'Z'。 当inout端口不输出时,将三态门置高阻。这样信号就不会因为两端同时输出而出错了,更详细的内容可以搜索一下三态门tri-state的资料.

  1 使用inout类型数据,可以用如下写法:

  inout data_inout;

  input data_in;

  reg data_reg;//data_inout的映象寄存器

  reg link_data;

  assign data_inout=link_data?data_reg:1’bz;//link_data控制三态门

  //对于data_reg,可以通过组合逻辑或者时序逻辑根据data_in对其赋值.通过控制link_data的高低电平,从而设置data_inout是输出数据还是处于高阻态,如果处于高阻态,则此时当作输入端口使用.link_data可以通过相关电路来控制.

  2 编写测试模块时,对于inout类型的端口,需要定义成wire类型变量,而其它输入端口都定义成reg类型,这两者是有区别的.

  当上面例子中的data_inout用作输入时,需要赋值给data_inout,其余情况可以断开.此时可以用assign语句实现:assign data_inout=link?data_in_t:1’bz;其中的link ,data_in_t是reg类型变量,在测试模块中赋值.

  另外,可以设置一个输出端口观察data_inout用作输出的情况:

  Wire data_out;

  Assign data_out_t=(!link)?data_inout:1’bz;

  else,in RTL

  inout use in top module(PAD)

  dont use inout(tri) in sub module

  也就是说,在内部模块最好不要出现inout,如果确实需要,那么用两个port实现,到顶层的时候再用三态实现。理由是:在非顶层模块用双向口的话,该双向口必然有它的上层跟它相连。既然是双向口,则上层至少有一个输入口和一个输出口联到该双向口上,则发生两个内部输出单元连接到一起的情况出现,这样在综合时往往会出错。

  ************************************************** ***

  双向端口inout设计实例:

  module dual_port (

  ....

  inout_pin,

  ....

  );

  inout inout_pin;

  wire inout_pin;

  wire input_of_inout;

  wire output_of_inout;

  wire out_en;

  assign input_of_inout = inout_pin;

  assign inout_pin = out_en ? output_of_inout : 高阻;

  endmodule

  ************************************************** *******

  对于含有inout端口的模块内部而言, inout端口可以理解成从“映像寄存器” 接收连续赋值的线。在定义一个inout端口时,同时也要定义一个寄存器作为inout端口的“ 映像寄存器”,并将inout端口和这个“ 映像寄存器” 用一个三态门连接起来。当inout端口用作输出端口时,将inout端口的“ 映像寄存器” 设置成所希望的输出值,并且将三态门选通,这时inout端口的值随“ 映像寄存器”的变化而变化;当inout端口用作输入端口时,三态门设为高阻态, 断开“ 映像寄存器” 与inout端口的连接,此时就可以像对待普通的输入端口一样对它进行操作。

  而对于含有inout端口的模块外部而言,需要指定当它作为输入端口时,其数据的来源,以及当它作为输出端口时其数据的归属。

  对于有inout( 双向) 端口的Verilog程序设计,要注意以下几点:

  ( 1 ) 对于inout端口,要定义一个与之相连的“ 映像寄存器”。当inout端口作为输出端口时, 将二者连通; 而当inout端口不作为输出端口时,要给inout端口赋高阻态来断开与“ 映像寄存器”的连接。

  ( 2 ) 在实例化含inout( 双向)端口的模块时,与inout端口相连的只能是一个wire类型的变量

  ( 3 ) 不论是模块设计还是仿真,由于inout端口兼有输人端口和输出端口的功能,所以必须分别指定当inout端口作为输入(输出)端口时,它与其它单元的连接情况和需要完成的操作。

  (4)注意在仿真时,测试模块与被测模块之间双向接口的数据方向。测试模块的一个wire变量,必须在被测模块为输出时为'Z',而在测试模块为输入(此时其输出为'Z')时有数据输出。

http://blog.chinaaet.com/zzuxzt/p/39832

http://www.doc88.com/p-9327122453904.html

I2C三态门Verilog的更多相关文章

  1. Verification of WISHBONE I2C Master Core(IRUN+Simvision)

    一.前言 很久没写技术博客了,有些懈怠,生活还得继续折腾.转眼工作一年多,时间越长越发觉得自己知之甚少,当然这跟IC行业技术密集有关.用空余时间在opencores网站上下载些小的IP看看 验证下,让 ...

  2. Verilog之i2c合约

    说明:i2c乔布斯.有这么多的事情在网上参考. 时刻:2014年5一个月6周二星期 1.问题叙述性说明: 正如图.已知的时钟clk为100k,rst为复位信号.上升沿有效,基于Verilog HDL或 ...

  3. i2c状态机方法设计-verilog

    2010-09-05 21:04:00 verilog语言基础学的差不多了.接着就是看看华为的语言编写规范.状态机设计方法是fpga的重要设计方法.所以我要记上一笔. 只要会FSM方法,用fpga编写 ...

  4. 学习笔记一:I2C协议学习和Verilog实现

    ////////////////////////////////////////////////// //clk = 20 MHz ,一个周期50ns //sck = 100 kHz (scl) ,一 ...

  5. I2C控制器的Verilog建模之三(完结版)

    前言:终于到了测试篇,不过悲剧了一下.按照之前<二>里面的思路,在顶层用一个复用器驱动读写独立模块的I2C总线确实失败.虽然综合过去了,不过警告里已经说明:底层的2个原本是inout三态口 ...

  6. I2C控制器的Verilog建模之二

    前言:接着上一篇的I2C写操作,今天要实现一个I2C的读操作.虽然在ADV7181B配置内部寄存器时没有必要使用到读操作,但是为了进一步确认寄存器是否在I2C写模块下被正确配置,这一步是必不可少的. ...

  7. I2C控制器的Verilog建模之一

    前言:之前申请了ADI公司的一款ADV7181CBSTZ的视频解码芯片,正好原装DE2板子安的是同系列的ADV7181BBSTZ.虽然都是ADV7181的宗出,但是寄存器配置等等还是有些诧异,引脚也不 ...

  8. I2C Verilog的实现(二)

    1. 起始结束信号的判断 //--------------------------------------------- //start,stop condition judgement //---- ...

  9. I2C Verilog的实现(一)

    <span style="font-size:14px;">`timescale 1ns / 1ps module test( sda ); reg scl; inou ...

随机推荐

  1. Android 之布局(二)

    3.TableLayout(表格布局) 像表格一样布局,通常情况下,TableLayout有多个TableRow组成,每个TableRow就是一行. <?xml version="1. ...

  2. VC操作MPP文件

    1.背景简介 因需要对Office系列进行程序操作,特需要使用COM编程. Microsoft Project生成进度计划,office家族软件,文件后缀为.mpp. 具体信息见维基百科http:// ...

  3. 心电图html js控件

    https://github.com/joakimkemeny/jke.d3.ecg/tree/master/demo/js

  4. Web 前端攻防(2014版)-baidu ux前端研发部

    http://fex.baidu.com/articles/page2/ Web 前端攻防(2014版) zjcqoo | 20 Jun 2014 禁止一切外链资源 外链会产生站外请求,因此可以被利用 ...

  5. MySQL user表简介

    mysql> DESC MYSQL.USER \G *************************** . row ***************************   Field:  ...

  6. spring-tool-suite(STS) 创建 spring boot项目

    1.创建一个Spring Starter Project工程(new --> Spring Starter Project) 2.选择自己需要的依赖,因为想要通过REST方式来验证是否成功创建, ...

  7. html 语义化标签拾遗

    1.del和ins标签 兼容性:浏览器全部支持 del:定义文档中已被删除的文本. ins:定义已经被插入文档中的文本. <!DOCTYPE html> <html lang=&qu ...

  8. hmac库 密钥相关的哈希运算消息认证码

    # -*- coding: cp936 -*- #xiaodeng #python 2.7.10 #HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一 ...

  9. Python pycharm(windows版本)部署spark环境

    一 部署本地spark环境 1.1  安装好JDK       下载并安装好jdk1.7,配置完环境变量.   1.2 Spark环境变量配置       去http://spark.apache.o ...

  10. VMware Player 12.5.0 中文免费版

    VMWare Player优点:– 免费的 VMWare Player 体积仅90多MB,相比7百多MB且还要付费的 VMware Workstation 无疑更适合个人用户使用– 主界面清爽简洁,几 ...