方法一:  

在学习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. Linux学习笔记之权限与命令之间的关系(重要)及文件与文件夹知识总结

    一.让使用者能进入某文件夹成为可工作文件夹的基本权限为何: 可使用的命令:比如 cd 等变换工作文件夹的命令. 文件夹所需权限:使用者对这个文件夹至少须要具有 x的权限 额外需求:假设使用者想要在这个 ...

  2. Android 自己主动化測试之------ Monkey工具

    尽管 一般公司都有专门的測试人员,可是有时候 免不了 我们既要去开发产品,也要去測试产品,測试产品.有些机械化的 点界面的操作,谷歌已经给我们提供了工具.Monkey, 猴子測试. 什么是Monkey ...

  3. SqlDataAdapter的方法之一Fill (DataSet dataset, String datatable)解释

    一.SqlDataAdapter的方法之一Fill (DataSet dataset, String datatable)解释:根据datatable名填充Dataset.myda.Fill(ds, ...

  4. table边框不显示

    今日在做报表的时候发现,最后一行隐藏后整个报表的下边框会不显示,猜测是td的边框隐藏后但table并未设置边框,导致下边框没有出现.因此设置了table边框后问题解决.table和td的边框关系如下实 ...

  5. c++ primer plus 习题答案(6)

    p425.1 #include<iostream> #include<cstring> #include<cstdlib> using namespace std; ...

  6. BZOJ 2662: [BeiJing wc2012]冻结(最短路)

    这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...

  7. Web学习之自定义标签

    1.编写一个实现Tag接口的Java类(标签处理器类) package me.gacl.web.tag; import java.io.IOException; import javax.servle ...

  8. Maven Spring JUnit 在Maven Clean Install时报

    问题: Maven Clean Install时, 遇到报错package org.junit does not exist 明显, Unit Test在Compile阶段就被检查了. 而POM.xm ...

  9. inline-block 垂直居中

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. CSS块级元素和行内元素

    根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级 ...