HDL语言的INOUT双向端口仿真暨三态门仿真

时间:2025-05-11

HDL语言的INOUT端口仿真暨三态门仿真

------VHDL和VerilogHDL

韦志恒 weizhiheng99@http://www.77cn.com.cn

关键词:inout双向端口 三态门原理 inout双向端口方针 三态门仿真

概述

三态门是FPGA编程开发中经常遇到的一个问题。一个典型的应用就是TI的DSP的EMIF总线。针对HDL语言的三态门应用示例和仿真示例在网上很多,但是往往只讲述一种语言的,没有给予两种语言下三态门的一个综合评述,如讲述二者使用、仿真时的区别等。特别是VerilogHDL语言下的三态门仿真,很多讲述都是语焉不详,包括使用Force语句等,这些使用人手工干预的仿真方法明显违背了EDA自动化的宗旨,是使用者对其仿真方法不明确的情况下的一种权益之计。

本文将使用一个DSP EMIF接口逻辑的例子,详细讲述: (0)什么叫做Z态?三态的晶体管级实现是怎样的? (1)VHDL语言下同步、异步三态门的实现和仿真;

(2)VerilogHDL语言下同步、异步三态门的实现和仿真; (3)综述两种语言下仿真的要点。

一 双向管脚INOUT与三态门介绍

图1 一个典型的FPGA的管脚

由图1可以看出,一个FPGA的管脚由一个输入缓冲器和一个三态输出缓冲器构成。 三态输出缓冲器,即三态门,是指逻辑门的输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路。高阻态相当于隔断状态(电阻很大,相当于开路)。 三态门都有一个EN控制使能端,来控制门电路的通断。 可以具备这三种状态的器件就叫做三态。

准确来讲,三态的高阻态(Z态)指的就是门的输出脚的两个驱动TTL或MOS管都处于截止状态时的输出状态。参考图2、图3和图4有更详细的理解。

图2 TTL逻辑三态门的构成图

当EN端接低电平时,反相器输出一个高电平给T1 ,使整个电路处于工作状态,这样,电路将按与非关系把A, B接受到的信号传送到输出端, 使Y或为高电平,或为低电平。当EN端接高电平时,反相器输出低电平给T1,使 T1、T5截止。另一方面,通过D把T4的基极电位钳在1v左右,使T4截止。由于T4、T5均截止,从输出端Y看进去,电路处于高阻状态。

图3 CMOS三态门实现A

对于CMOS的三态门,可以分析:当EN为0时,T1’和T2’都处于导通状态,因此T1和T2能够在A为1或0时分别导通,因此Y输出A的状态;反之,当EN为1时,T1’和T2’都处于截止状态,T1和T2自然也处于截止状态,因此Y就处于高阻状态。

图4 CMOS三态门实现B—利用传输门实现的三态门

图5 传输门的逻辑构成图

对于利用传输门实现的三态门,分析传输门的逻辑构成可知,当S即EN为0时,传输门导通,反之,传输门的两个MOS管截止,门输出高阻态。

通过上面几种情况的介绍,希望大家能够深刻理解下面这句话:

高阻态(Z态)指的就是门的输出脚的两个驱动TTL或MOS管都处于截止状态时的输出状态。

图6 文章中的所要仿真的三态总线

如图7所示,总线宽度设为4bit。WE和RE分别是读写使能信号,低有效。假设这是一个和DSP的EMIF接口的逻辑模块,在DSP写(WE=0)时,将dataInOut(EMIF)上的数据从dataOut输出;当DSP读(RE=0)时,将dataIn上的数据送到dataInOut(EMIF)上。约定WE和RE在空闲时都为高,并且二者不能同时为低。[附:DSP总线往往还有CE即片选信号,这里为简单计,略去。]

二 VHDL的三态门实现与仿真

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM;

--use UNISIM.VComponents.all; entity vhdlTBUF is

Port ( clk : in STD_LOGIC;

datain : in STD_LOGIC_VECTOR (3 downto 0); dataout : out STD_LOGIC_VECTOR (3 downto 0); dsta : inout STD_LOGIC_VECTOR (3 downto 0); we : in STD_LOGIC; re : in STD_LOGIC); end vhdlTBUF;

architecture Behavioral of vhdlTBUF is begin

process(clk,we) begin

if(clk'event and clk='1') then

if(we='0') then dataout<=dsta; end if; end if;

end process; --读取部分

process(clk,re) begin

if(clk'event and clk='1') then if(re='0') then dsta<=datain; else dsta<="ZZZZ"; end if; end if;

---================================================================ --如果期望和verilog的代码有一样的综合结果,请使用下面的话描述读取,即异步读取。 --dsta<=datain when re='0' else -- "ZZZZ";

---================================================================ end process; end Behavioral;

在上面的程序中可以看出,对DSP的写数据,三态逻辑模块直接将其同步锁存到寄存器中;对DSP的读数据,在RE有效时输出数据,RE无效时输出Z态。这样的实现符合图1所示的FPGA的管脚结构。

testbench:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_TEXTIO.ALL; USE STD.TEXTIO.ALL;

ENTITY test IS END test;

ARCHITECTURE testbench_arch OF test IS

FILE RESULTS: TEXT OPEN WRITE_MODE IS "results.txt";

COMPONENT vhdlTBUF PORT (

clk : In std_logic;

datain : In std_logic_vector (3 DownTo 0); dataout : Out std_logic_vector (3 DownTo 0); dsta : InOut std_logic_vector (3 DownTo 0); …… 此处隐藏:4402字,全部文档内容请下载后查看。喜欢就下载吧 ……

HDL语言的INOUT双向端口仿真暨三态门仿真.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219