微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog中inout端口的使用方法和仿真方法

Verilog中inout端口的使用方法和仿真方法

时间:10-02 整理:3721RD 点击:
小弟在最近设计中用到inout端口,查看网上的资料都说需要加三态门控制。因此在设计IIC时,在底层module里面讲数据线SDA分为了sda_in和sda_out,并加了一个控制信号sda_en,
利用assign语句赋值,sda=(sda_en)?sda_out:1'bz
此处的疑问是 sda_in如何处理?
仿真时,将inout端口定义为wire型,其他输入定义为reg型,也加入三态门控制,定义data_out和link信号。
在initial块中对data_out赋值,并打开link端口
最后使用assign语句,sda=(link)?data_out:1'bz,这样测试模块的SDA就是输出端口,将激励输出到IIC模块的SDA端口。
有一个疑问是,当测试模块的SDA作为输入端口,接收来自IIC模块的数据时,应该如何操作?


自己顶一个

assign sda_in = sda;



  您好,为什么不是这样呢?sda_in = (!link)?sda : 1'bz,直接把sda给sda_in,会不会存在同时输入输出的问题?

不会同时输入输出,sda_en会控制的


那我把源代码中的sda_in这样处理,你看对不对?sda_in = (sda_en)? sda :'bz;

不用的,你搜一下designware的iic手册,查一下接口电路就明白了。



  我看到综合之后的inout端口的电路,sda_in与sda是直接连接起来的应该是高阻态就表示此时正在当做输入端口用,控制信号无效,
控制信号有效的时候当做输出用,对吧?

inout端口输出的时候不能给输入,应该是sda_in = (!sda_en)? sda :1'b0;

可以直接做为输入信号


三态门综合之后的电路,确实是直接把sda赋值给sda_in的,并没有加使能控制。我看网上关于inout端口的原理图上也是直接给的



   你的意思是 sda_in = sda是吧?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top