I2C三态门Verilog
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的更多相关文章
- Verification of WISHBONE I2C Master Core(IRUN+Simvision)
一.前言 很久没写技术博客了,有些懈怠,生活还得继续折腾.转眼工作一年多,时间越长越发觉得自己知之甚少,当然这跟IC行业技术密集有关.用空余时间在opencores网站上下载些小的IP看看 验证下,让 ...
- Verilog之i2c合约
说明:i2c乔布斯.有这么多的事情在网上参考. 时刻:2014年5一个月6周二星期 1.问题叙述性说明: 正如图.已知的时钟clk为100k,rst为复位信号.上升沿有效,基于Verilog HDL或 ...
- i2c状态机方法设计-verilog
2010-09-05 21:04:00 verilog语言基础学的差不多了.接着就是看看华为的语言编写规范.状态机设计方法是fpga的重要设计方法.所以我要记上一笔. 只要会FSM方法,用fpga编写 ...
- 学习笔记一:I2C协议学习和Verilog实现
////////////////////////////////////////////////// //clk = 20 MHz ,一个周期50ns //sck = 100 kHz (scl) ,一 ...
- I2C控制器的Verilog建模之三(完结版)
前言:终于到了测试篇,不过悲剧了一下.按照之前<二>里面的思路,在顶层用一个复用器驱动读写独立模块的I2C总线确实失败.虽然综合过去了,不过警告里已经说明:底层的2个原本是inout三态口 ...
- I2C控制器的Verilog建模之二
前言:接着上一篇的I2C写操作,今天要实现一个I2C的读操作.虽然在ADV7181B配置内部寄存器时没有必要使用到读操作,但是为了进一步确认寄存器是否在I2C写模块下被正确配置,这一步是必不可少的. ...
- I2C控制器的Verilog建模之一
前言:之前申请了ADI公司的一款ADV7181CBSTZ的视频解码芯片,正好原装DE2板子安的是同系列的ADV7181BBSTZ.虽然都是ADV7181的宗出,但是寄存器配置等等还是有些诧异,引脚也不 ...
- I2C Verilog的实现(二)
1. 起始结束信号的判断 //--------------------------------------------- //start,stop condition judgement //---- ...
- I2C Verilog的实现(一)
<span style="font-size:14px;">`timescale 1ns / 1ps module test( sda ); reg scl; inou ...
随机推荐
- 在AE10.1环境下调试其他版本的程序
不同人的可能使用的开发环境不一样,使用SDK版本也不一样,比如用ArcEngine9.3开发的程序在ArcEngine10.1下就不能运行,需要重新调试,才能运行. 这里的例子程序是其他网友在ArcE ...
- python2.7中minetypes.py的UnicodeDecodeError
问题: python错误提示: UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not ...
- Unable to read TLD "META-INF/c.tld" from JAR file
Unable to read TLD "META-INF/c.tld" from JAR file CreationTime--2018年7月18日17点46分 Author: ...
- venus之hello world
Venus Service Framework提供服务器端开发SDK以及客户端SDK.它们之间采用Venus自定义的私有协议.encoder.decoder采用多种序列化方式,客户端根据自己的语言选择 ...
- 理解SVG的图形填充规则
SVG的图形填充规则通过fill-rule属性来指定. 有效值: nonzero | evenodd | inherit 默认值: nonzero fill-rule属性用于指定使用哪一种算法 ...
- 19、Java访问修饰符
修饰符 本类 同一个包中的类 子类 其它类 public 可以访问 可以访问 可以访问 可以访问 protected 可以访问 可以访问 可以访问 不能访问 默认 可以访问 可以访问 不能访问 不能访 ...
- rabbitmq vhost
参考 http://blog.163.com/sky20081816@126/blog/static/16476102320107173226920/ http://blog.csdn.net/kev ...
- Loadrunner脚本编程(3)- 检查点,关联等函数
http://www.360doc.com/content/10/0806/13/1698198_44078093.shtml 1. 错误预防和恢复 参数默认是用{}括起来的,但也可以指定用< ...
- ContactsContract.Contacts之sort_key
// 从Contacts表中找出所有联系人 Cursor cursor = context.getContentResolver().query( ContactsContract.C ...
- java.lang.UnsupportedClassVersionError: org/hibernate/SessionFactory : Unsupported major.minor version 52.0
问题: 在学习hibernate的过程中,涉及导入jar包的问题,写该文的时候是从官网下载的最新的hibernate的jar包hibernate-release-5.2.10.Final .在测试时, ...