>
首页 » 技术文章 » GPIB接口的FPGA实现

GPIB接口的FPGA实现

作者:■ 电子科技大学自动化工程学院 王术群 师奕兵 田书林  时间:2004-10-15 17:01  来源:本站原创

电子设计应用2004年第10期

摘 要:GPIB接口是测试仪器中常用的接口方式。通过将接口设计分解为同步状态机设计和寄存器读写电路设计,采用Verilog语言实现了满足IEEE488.1协议的IP Core设计。将此IP Core固化到FPGA芯片中即可实现GPIB各种接口功能。
关键词:GPIB接口;状态机;FPGA

引言
在自动测试领域中,GPIB通用接口是测试仪器常用的接口方式,具有一定的优势。通过GPIB组建自动测试系统方便且费用低廉。而GPIB控制芯片是自动测试系统中的关键芯片,此类芯片只有国外少数公司能生产,不仅价格昂贵,而且购买不便。因此,GPIB 接口的FPGA实现具有很大的实用价值。
本文论述的是采用Verilog语言来设计基于IEEE488.1协议的IP Core,然后将用户逻辑与此Core集成在一片FPGA中实现GPIB接口功能。

图1 GPIB接口内部结构

图2 AH功能状态图

图3 AH功能仿真图

GPIB 接口体系结构设计
首先把整个待设计系统划分为若干基本功能模块,其中包括复杂的同步状态机以及寄存器读写电路。内部结构如图1所示。

接口功能设计
接口功能的设计是设计的核心。按照IEEE488.1协议与实际设计的要求,设计选取了八种接口功能:源方挂钩 、受方挂钩、讲者、听者、服务请求、远控/本控、器件清除和器件触发。其中源方挂钩接口功能保证多项消息的正确传输;受方挂钩接口功能保证正确地接受远地消息;讲者接口功能让器件在接口上把数据发送到其他一些器件去;听者接口功能让器件在接口上接受来自于其他器件的数据;本控就是本地控制(面板或后背板)。在实际设计中,再把各接口功能划分为若干相关状态,这样在用VerilogHDL实现这些相互作用影响的状态跃迁的时候就可以引入状态机设计。为了保持状态机之间相互的状态挂钩的协调一致性,设计采用同步状态机,在时钟信号的触发下,完成各个状态之间的转移。
接口功能的Verilog HDL实现
由于八种接口功能实现方式较为相似,这里以最具有代表性的受方挂钩功能(AH)来具体说明其用VerilogHDL的实现方式。对受者接口功能应具有的能力、作用及变迁条件,用一组互相排斥而又互相联系的状态图来给定,如图2所示。状态图中,各状态之间的变迁分别用状态之间的箭头来表示。每一个状态变迁都用一个逻辑表达式来表示变迁的条件。表达式由本地消息、远地消息、状态交连、运算符等组成。其中本地消息用三个小写的英文字母表示。远地消息用三个大写的英文字母来表示。状态交连是指一个接口功能的状态变迁受其他接口功能的状态的制约。
在用VerilogHDL语言对状态机进行的设计中,采用了一位热码状态编码。虽然一位热码采用的触发器较多,但可以简化组合电路。对于寄存器数量多,而组合逻辑门相对缺乏的FPGA器件,一位热码可以提高电路的速度和可靠性,也有利于提高器件资源的利用率。AH功能状态机代码如下:
module
input clk,reset,swrst,LADS, LACS,rdy,ATN,DAV;
output AIDS,ANRS,ACRS, ACDS,AWNS,NRFD,NDAC;
parameter S1=5'h01,S2=5'h02, S3=5'h04,S4=5'h08,S5=5'h10;
assignNRFD=(ANRS| ACRS|ACDS|AWNS ) ? NRFDt: 1'bz;
assignNDAC = (ANRS| ACRS|ACDS|AWNS) ? NDACt: 1'bz;
always @(negedge clk )
begin if ((~reset)|swrst|((~ATN) &(~(LACS|LADS)))) present=S1;
else present=next; end
always @(present or LADS or LACS or rdy or ATN or DAV)
begin AIDS=0 ;ANRS=0; ACRS=0; ACDS=0; AWNS=0; NRFDt=0; NDACt=0;
case (present)
S1: begin if (ATN) next=S3;
else if((~ATN)& (LADS|LACS)) next=S2;
else next=S1; AIDS=1; NRFDt=0;NDACt=0; end
S2: begin if (ATN|rdy) next=S3;
else next=S2; ANRS=1; NRFDt=1;NDACt=1; end
S3: begin if (~(ATN|rdy)) next=S2;
else if (DAV) next=S4;
else next=S3; ACRS=1; NRFDt=0;NDACt=1; end
S4: begin if( (ATN)|(~ATN)&(~rdy)) next=S5;
else next=S4; ACDS=1; NRFDt=1;NDACt=1; end
S5: begin if (~DAV) next=S2;
else next=S5; AWNS=1; NRFDt=1;NDACt=0; end
default: next=S1;
endmodule
AH功能逻辑设计的功能仿真
对前述AH功能编码进行编译和功能仿真,仿真结果如图3所示。由图可见,当同步触发信号reset为0,swrst为1时,系统回到空闲态。LADS(听者被寻址态)与LACS(听者作用态)同时为0时,系统进入AIDS(受者空闲态),此时受者NRFD、NDAC为高阻态。LADS与LACS任一为1时,受者进入ANRS(受者未准备好态)。rdy为1与ATN为0时,受者进入ACRS(受者准备好态),NRFD、NDAC为0。可以看出,随着输入条件的变化,输出相应变化,满足时序逻辑。接下来,生成受者功能模块符号图,以便于下一步系统级的设计。
其他接口功能的状态机实现与AH功能类似。最后将每个接口功能的状态机实现,生成便于互连的符号模块,各个模块连接起来就组成系统的接口主状态机模块。其中状态机子集模块所需的信号一些来自状态交连(图2阴影部分即各接口功能之间的互相影响信号),另外一些则来自其他模块所产生的信号。

寄存器读写电路设计
在设计图1中的寄存器读写电路时,选择设计了9个8位内部寄存器。其中可读寄存器有5个:中断状态寄存器0(ISR0)、中断状态寄存器1(ISR1)、总线状态寄存器(BSR)、数据输入寄存器(DIR)和地址状态寄存器(ADSR);可写寄存器有4个:中断屏蔽寄存器0(IMR0)、中断屏蔽寄存器1(IMR1)、地址寄存器(ADR)和辅助命令寄存器(AUXCR)。其中可读寄存器用来存储状态机的当前状态、中断情况、仪器地址、输入数据和控制信息。计算机把中断屏蔽位,辅助命令写入可写寄存器,从而实现对GPIB总线的控制。在上位机与芯片之间引入D0~D7 作为本地双向数据总线,通过译码模块实现对内

相关推荐

没有退路的FPGA与晶圆代工业者

FPGA  晶圆代工  2014-01-03

采用FPGA的可编程电阻的设计结构分析

FPGA  电阻  2013-09-24

从FPGA的制程竞赛看英特尔与Fabless的后续变化

FPGA  Fabless  2013-07-16

物联网融合自动化推动高效生产模式变革

物联网  FPGA  SoC  2013-07-09

14纳米FPGA展现突破性优势

14纳米  FPGA  2013-06-20

高清视频监控FPGA应用迎来小高峰

视频监控  FPGA  2013-06-20
在线研讨会
焦点