在verilog中关于inout口的设计方法
方法一:
在学习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口的设计方法的更多相关文章
- 6.Inout双向端口信号处理方法
Verilog中inout端口的使用方法 (本文中所有Verilog描述仅为展示inout端口的用法,实际描述则需要更丰富的功能描述) Inout端口的使用 在芯片中为了管脚复用,很多管脚都是双向的, ...
- 【设计经验】1、Verilog中如何规范的处理inout信号
在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号).比如,IIC总线中的SDA信号就是一个双向信号,QSPI Flash的四线操作的时候四根信号线均为双向信号. ...
- verilog简易实现CPU的Cache设计
verilog简易实现CPU的Cache设计 该文是基于博主之前一篇博客http://www.cnblogs.com/wsine/p/4661147.html所增加的Cache,相同的内容就不重复写了 ...
- 关于Verilog 中的for语句的探讨
在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...
- Verilog中锁存器与多路选择器
Verilog中锁存器与多路选择器 Verilog是一种硬件描述语言,它代表的是硬件. Verilog代表的就是逻辑门和连接线. 对于一个always@(*)控制的块而言,只要块中的表达式包含的任意的 ...
- 基于Verilog HDL的超前进位全加器设计
通常我们所使用的加法器一般是串行进位,将从输入的ci逐位进位地传递到最高位的进位输出co,由于电路是有延迟的,这样的长途旅行是需要时间的,所以为了加快加法器的运算,引入了超前进位全加器. 全加器的两个 ...
- 怎么用Verilog描述双向IO口
在很多情况下,需要使用双向IO.不过最好谨慎使用,在top层使用.网上很多描述的代码甚至是不可以综合并且有语法错误的,还是老实自己写个模块吧. 如果你需要一个口既做输入端口也做输出端口,那么你就需要去 ...
- 在verilog中调用VHDL模块
习惯了自己发现一些小问题,既然发现了,就记下来吧,不然又要忘了,这是多么悲痛的领悟. 今天在用vivado进行块设计时所生成的顶层模块居然是用VHDL语言描述的,这时郁闷了,表示只看过VHDL语法但没 ...
- verilog实现的16位CPU设计
verilog实现的16位CPU设计 整体电路图 CPU状态图 idle代表没有工作,exec代表在工作 实验设计思路 五级流水线,增加硬件消耗换取时间的做法. 具体每一部分写什么将由代码部分指明. ...
随机推荐
- 有关Gcd,Lcm的一点小结论
先介绍两个: 大数的Gcd Stein+欧几里德 function stein(a,b:int64):int64; begin if a<b then exit(stein(b,a)); the ...
- UVA - 297Quadtrees(四分图)
Quadtrees Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Statu ...
- 取文件的大小 (KB,MB,GB...)
取文件的大小 (KB,MB,GB...) 2种方式: VB 和 C# 1, VB Public Function GetFileSize(ByVal iFileSizeKB As Long) As ...
- Linux系统源码安装过程中的prefix选项
在linux和unix环境中,源码安装是最常用的软件安装方式,一些软件除了提供源码外,也提供各种发行版的二进制安装包(如基于redhat包管理工具的rpm包),但强烈建议使用源码安装方式.原因是:(1 ...
- LeetCode Backpack
Given n items with size Ai, an integer m denotes the size of a backpack. How full you can fill this ...
- 在C语言中基本数据类型所占的字节数
基本数据类型所占的字节数其实跟C语言本身没有太大的关系,它取决于编译器的位数,下面这张表说明了不同编译器下基本数据类型的长度: 32位编译器中各基本类型所占字节数: 注:对于32位的编译器,指针变量的 ...
- Hadoop学习笔记(3)hadoop伪分布模式安装
为了学习这部分的功能,我们这里的linux都是使用root用户登录的.所以每个命令的前面都有一个#符号. 伪分布模式安装步骤: 关闭防火墙 修改ip地址 修改hostname 设置ssh自动登录 安装 ...
- eclipse集成jetty开发web项目(不采用maven方式)
以前开发过程部署项目都是采用tomcat,偶然发现jetty,所以试了下,挺方便的,直切主题. 1.下载jetty,楼主使用的jetty8,地址http://download.eclipse.org/ ...
- JSP——页面三大部分(指令、脚本、动作组件)
一.JSP简介: JSP(Java Server Pages,Java服务器端页面开发技术) JSP可以实现的技术都可以通过Servlet实现,他们本质上是一样的.但JSP设计的目的在于简化表示层的表 ...
- php学习笔记(3)
1.计数器 <?php /* simple access counter for php3 (c)1998 David W. Bettis dbettis@eyeintegrated.com m ...