方法一:  

在学习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. TCP的核心系列 — SACK和DSACK的实现(一)

    TCP的实现中,SACK和DSACK是比较重要的一部分. SACK和DSACK的处理部分由Ilpo Järvinen (ilpo.jarvinen@helsinki.fi) 维护. tcp_ack() ...

  2. 恢复sudo的权限的命令

    出错的原因:不小心给了/etc/的所有文件的777属性,出现了sudo 的错误. 1.pkexec chmod 0440 /etc/sudoers 2.pkexec chmod 0440 /etc/s ...

  3. 新手不得不注意HTML CSS 规范

    作为一名新进的程序菜鸟,根本不知道从哪里开始学起好,前辈都说HTML CSS 规范是一个十分需要注意的点,要我记下,特地转来保存一下,大家相互学习 //总论 本规范既然一个开发规范,也是一个脚本语言参 ...

  4. /usr/bin/env: node: no such file or directory

    今天在安装gulp的之后,运行gulp命令出现了如下报错: /usr/bin/env: node: no such file or directory 网上找了好久,终于解决了,所以记录一下,便于下次 ...

  5. Objective-c 数组对象

    首先我们必须知道数组的概念:数组是有序的对象集合,一般情况下,一个数组的对象都是相同类型的.数组当中也存在可变数组和不可变数组. 1. 不可变数组 (NSArray) 可变数组 NSMutable 是 ...

  6. BZOJ 3444: 最后的晚餐( )

    把暗恋关系看成无向边, 那某个点度数超过2就无解.存在环也是无解.有解的话对连通分量进行排列就行了. ------------------------------------------------- ...

  7. load和ready

    <一>ready和load ready先执行,load后执行 DOM文档加载的步骤: () 解析HTML结构. () 加载外部脚本和样式表文件. () 解析并执行脚本代码. () 构造HT ...

  8. 6.PHP 教程_PHP数据类型

    PHP数据类型 String(字符串),Integer(整型),Float(浮点型),Boolean(布尔型),Array(数组),Object(对象), NULL(空值). PHP字符串 一个字符串 ...

  9. zoj 3195 Design the city lca倍增

    题目链接 给一棵树, m个询问, 每个询问给出3个点, 求这三个点之间的最短距离. 其实就是两两之间的最短距离加起来除2. 倍增的lca模板 #include <iostream> #in ...

  10. c语言各类问题 代码

    定义一个结构体,有两个成员变量,一个整型的n,一个字符型的c,利用结构体类型声明一个具有5个元素的数组,并随机初始化,根据成员变量n进行从小到大排序,然后输出 冒泡排序然后 在输出结构体#includ ...