[转帖](原创) 深入探讨inout port (SOC) (Verilog) (VHDL) (Quartus II) (SignalTap II) (DE2-70)

来源:http://www.cnblogs.com/oomusou/archive/2011/02/21/inout_port.html

Abstract
inout port在硬件是很特别的东西,本文从各种面象去讨论,包括如何用Verilog、VHDL撰写RTL? 如何用Verilog、VHDL写testbench做simulation,如何在SignalTap II去观察inout port?

Introduction
使用环境:Quartus II 8.1 + ModelSim SE 6.3e + Debussy 5.4 v9 + DE2-70 (EP2C70F896CN)

本文将讨论以下主题:

1.什么是inout port?

2.最简单的inout port (FPGA/Schematic/Verilog/VHDL)

3.如何用Vector Waveform File对inout port做simulation?

4.如何使用testbench对inout port做simulation?

5.如何在DE2-70使用inout port?

6.如何使用SignalTap II on inout port?

什么是inout port?

就是1个port同时可以当input也可以当output,其实在我们生活中就存在这种东西,在每个台北捷运出口都会有个『双向门』,既可进也可以出,也就是可以『output』也可以『input』,这就是一个inout port。

 

为什么捷运的inout port不会打架呢?只要一方要『output』时,就会拉起output enable,此时『input』就被挡住无法进入,反之,若要『input』时,则output enable反向拉起,此时『output』就被挡住无法出去。总之,就是靠一个『output enable』去做控制。

电路上的inout port机制其实跟捷运的『双向门』几乎一样。

最简单的inout port

 

其中oe_i为input,控制tri-state gate,a_i为input,c_io为inout,可input也可output,b_o为output。

当oe_i为high时,tri-state gate打通,此时c_io为output,a_i为input。

当oe_i为low时,tri-state gate为high impedance,也就相当于tri-state gate断开,此时c_io为input,b_o为output。

FPGA如何实现?

 

根据[5] Cyclone II Device Family Datasheet,每个IOE如上图所示,若要以FPGA实现最简单的inout port,则如上图红线所示,即可使用FPGA实现之。

使用Schematic File表示

 

使用Verilog表示

bidir_simple.v / Verilog

 1 /*
 2 (C) OOMusou 2011 http://oomusou.cnblogs.com
 3
 4 Filename    : bidir_simple.v
 5 Synthesizer : Quartus II 8.1
 6 Description : simple inout port in Verilog
 7 Release     : Mar.07,2011 1.0
 8  */
 9
10 module bidir_simple (
11   oe_i,
12   a_i,
13   b_o,
14   c_io
15 );
16   
17 input  oe_i;
18 input  a_i;
19 output b_o;
20 inout  c_io;
21
22 assign c_io = (oe_i) ? a_i : 1'bz;
23 assign b_o  = c_io;
24
25 endmodule

原理图确定后,使用Verilog表示就很容易了,只是把图用Verilog表示。

22行

assign c_io = (oe_i) ? a_i : 1'bz;

当inout当成output时,在Verilog中,tri-state gate是利用?:配合z来表示。

23行

assign b_o  = c_io;

当inout当成input时,只需直接assign即可,不须在搭配?:。

Summary

当使用Verilog描述inout port时,RTL部分只需在inout当output时加上?:与Z,当input时直接assign即可。

使用VHDL表示

bidir_simple.vhd / VHDL

 

 

 

Reference
[1] 赤松子耶的博客, INOUT双向端口仿真 三态门构成 三态门原理 三态门仿真
[2] 刘福奇 刘波 2009, Verilog HDL应用程序设计
[3] FPGARelated.com, Bidirectional signals with Altera SignalTap II
[4] 葛叶明, 彭永丰, 薛冰 2010, 零基础学FPGA  基于Altera FPGA器件&Verilog HDL语言, 机械工业出版社
[5] Cyclone II Device Family Datasheet

未完,待续。

分类: DE2-70, Quartus II, SignalTap II, SOC, Verilog, VHDL

 

http://blog.sina.com.cn/s/blog_66eaee8f0100hrjl.html

你可能感兴趣的:(Verilog)