方法一:  

在学习IIC的时候我们知道这么设计inout

  inout   scl ;

  reg    scl_reg ,  scl_en ;

  scl  = scl_en ?   scl_reg : 1'dz ;

当scl_en 有效输出scl_reg 的波形,就是output,否则就是input。

方法二:

  后来在工作中遇到了一个IIC的IP核 ,这个IIC的IP核接口是这样子的

 mi2c  U_mi2c(
.CLK (clock),
.NRST (reset),
.A (a),
.DI (di),
.WR (wr),
.SEL (sel),
.ISCL (iscl),
.ISDA (isda),
.DA (da),
.NOE (noe),
.INTR (intr),
.OSCL (oscl),
.OSDA (osda)
);

这个IP中,将IIC的input 和output分开了。并且没有上面说的使能scl_en。这下子我就懵了,经过一番苦心寻找,终于知道如何合并了,废话不多说,直接上代码,最后变成这个样子。

 module mi2c_top (
clock ,
reset,
a,
di,
wr,
sel,
scl,
sda,
da,
noe,
intr
);
input clock ,reset ;
input [:] a ;
input [:] di ;
input wr ,sel ; output [:] da ;
output noe ,intr ; inout tri1 scl ;
inout tri1 sda ; wire isda,iscl,osda,oscl ; mi2c U_mi2c(
.CLK (clock),
.NRST (reset),
.A (a),
.DI (di),
.WR (wr),
.SEL (sel),
.ISCL (iscl),
.ISDA (isda),
.DA (da),
.NOE (noe),
.INTR (intr),
.OSCL (oscl),
.OSDA (osda)
); assign iscl = scl ;
assign isda = sda ;
assign scl = (oscl == 'd0) ? 1'd0 : 'dz ;
assign sda = (osda == 'd0) ? 1'd0 : 'dz ; endmodule

在modelsim中仿真可以看到,如果是高电平,会显示虚线,也就是弱上拉的意思。

方法三:

还有一种情况就是,如果是多bit线呢。我这里就有一个例子

wire [:]    IPMC_CPLD_D_O;
wire [:] IPMC_CPLD_D_I;
wire DATA_OUT_ENA ;
wire DATA_INP_ENA ;
wire DATA_IOP_ENA ;

wire [7:0] IPMC_CPLD_D_O;  输出
wire [7:0] IPMC_CPLD_D_I;  输入
wire DATA_OUT_ENA ;         输出使能
wire DATA_INP_ENA ;          输入使能
wire DATA_IOP_ENA ;          片选使能

以上使能都是1有效

那么就需要这么干:

 reg [:]    IPMC_CPLD_D_I_reg;
assign IPMC_CPLD_D = (DATA_IOP_ENA&DATA_OUT_ENA)?IPMC_CPLD_D_O:'dz ;
assign IPMC_CPLD_D_I = IPMC_CPLD_D_I_reg;
always @ (posedge CLOCK or negedge RST_N)
if (!RST_N)
IPMC_CPLD_D_I_reg <= 'd0;
else if(DATA_IOP_ENA&DATA_INP_ENA)
IPMC_CPLD_D_I_reg <= IPMC_CPLD_D;
IPMC_CPLD_D 就是inout 口

小伙伴儿们,以后再也不用担心inout口了。

欢迎加入: FPGA广东交流群:162664354

      FPGA开发者联盟: 485678884

在verilog中关于inout口的设计方法的更多相关文章

  1. 6.Inout双向端口信号处理方法

    Verilog中inout端口的使用方法 (本文中所有Verilog描述仅为展示inout端口的用法,实际描述则需要更丰富的功能描述) Inout端口的使用 在芯片中为了管脚复用,很多管脚都是双向的, ...

  2. 【设计经验】1、Verilog中如何规范的处理inout信号

    在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号).比如,IIC总线中的SDA信号就是一个双向信号,QSPI Flash的四线操作的时候四根信号线均为双向信号. ...

  3. verilog简易实现CPU的Cache设计

    verilog简易实现CPU的Cache设计 该文是基于博主之前一篇博客http://www.cnblogs.com/wsine/p/4661147.html所增加的Cache,相同的内容就不重复写了 ...

  4. 关于Verilog 中的for语句的探讨

    在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...

  5. Verilog中锁存器与多路选择器

    Verilog中锁存器与多路选择器 Verilog是一种硬件描述语言,它代表的是硬件. Verilog代表的就是逻辑门和连接线. 对于一个always@(*)控制的块而言,只要块中的表达式包含的任意的 ...

  6. 基于Verilog HDL的超前进位全加器设计

    通常我们所使用的加法器一般是串行进位,将从输入的ci逐位进位地传递到最高位的进位输出co,由于电路是有延迟的,这样的长途旅行是需要时间的,所以为了加快加法器的运算,引入了超前进位全加器. 全加器的两个 ...

  7. 怎么用Verilog描述双向IO口

    在很多情况下,需要使用双向IO.不过最好谨慎使用,在top层使用.网上很多描述的代码甚至是不可以综合并且有语法错误的,还是老实自己写个模块吧. 如果你需要一个口既做输入端口也做输出端口,那么你就需要去 ...

  8. 在verilog中调用VHDL模块

    习惯了自己发现一些小问题,既然发现了,就记下来吧,不然又要忘了,这是多么悲痛的领悟. 今天在用vivado进行块设计时所生成的顶层模块居然是用VHDL语言描述的,这时郁闷了,表示只看过VHDL语法但没 ...

  9. verilog实现的16位CPU设计

    verilog实现的16位CPU设计 整体电路图 CPU状态图 idle代表没有工作,exec代表在工作 实验设计思路 五级流水线,增加硬件消耗换取时间的做法. 具体每一部分写什么将由代码部分指明. ...

随机推荐

  1. The Highest Mark(01背包)

    The Highest Mark Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  2. SGU 200 Cracking RSA (高斯消元)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出m个整理,因子全部为前t个素数.问有多少 ...

  3. JavaScipt实现倒计时方法总结

    JavaScript中提供了两种实现计时.延时的方法,分别如下: 一. t = setTimeout(“function()", millisecond) 与 clearTimeout(t) ...

  4. CopyU!新插件 CopyPC2U正式发布!

    CopyPC2U双向拷贝插件今天正式上线!该插件需要CopyU!较新版本的支持,可以帮助将文件从电脑自动的复制到移动设备上. 下载地址:http://kuai.xunlei.com/d/BiIvAED ...

  5. 倒计时IE6+

    很简单的 下面是我为了做多个倒计时更改之后的 dome 下载链接   兼容 IE7以上 IE6没测试应该没问题 http://yunpan.cn/cf29rxmGKuMyJ  提取码 ca61

  6. c 跟字符串有关的函数

    1.字符串查找 strstr char * strstr(const char *s1, const char *s2); 在s1中查找s2,如果找到返回首个s2的首地址 char * strcase ...

  7. wpf 如何设置滚动条在超出范围的时候才显示?(转)

    VerticalScrollBarVisibility="Auto"  垂直自动显示 HorizontalScrollBarVisibility="Auto" ...

  8. Queue(队列)

    队列是一种后进后出的数据结构,下面介绍一下队列中常见的函数: 一.queue 中的 empty 函数 queue<int> q ; q.empty() ;  // 若队列中无元素,返回tr ...

  9. servlet三种实现方式之二继承GenericServlet开发

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第二种示例代码如下(已去掉包名): //这是第二 ...

  10. string模板

    string模块中包含了一个很有用的Template类,可以先写好字符串模板,后期使用的时候直接替换就可以了.         模板中使用$作为占位符前缀,使用{}包裹占位符以支持间断的标量名,使用$ ...