当前位置:首页 > 电源 > 数字电源
[导读]目前,许多公司都提出了新型的计算机高速总线,如Arapahoe总线标准和HyperTransport技术,但各协议互不兼容,没有形成统一标准。作为传统的通用局部总线,PCI总线仍然占据着

目前,许多公司都提出了新型的计算机高速总线,如Arapahoe总线标准和HyperTransport技术,但各协议互不兼容,没有形成统一标准。作为传统的通用局部总线,PCI总线仍然占据着主流个人电脑市场,具有顽强的生命力。

现在市面上存在着各种PCI接口芯片,如AMCC公司的S5933,PLX的9080系列等。专用芯片可以实现完整的PCI主设备与从设备模式的接口功能,将复杂的PCI总线接口转化相对简单的用户接口,但系统结构受接口芯片的限制,不能灵活地设计目标系统,且成本较高。本文使用符合PCI电气特性的FPGA芯片进行简化的PCI接口逻辑设计,实现了33MHz、32位数据宽度的PCI从设备模块的接口功能,节约了系统的逻辑资源,且可以将其它用户逻辑集成在同一块芯片,降低了成本,增加了设计的灵活性。另外,还给出了Windows9x系统下的设备驱动程序,可以与应用程序接口,形成一个完整的系统。目前,本系统已经被印染企业应用在数据采集和处理等方面。

1 系统构成与功能描述

系统的总体框图如图1所示。

由图1可见,系统的硬件平台为一块PCI卡。此卡的结构十分简洁,主要由FPGA芯片、RAM芯片和输出接口三部分组成。其中,FPGA芯片集成了PCI接口模块和数据处理模块。PCI接口模块实现了33MHz工作时钟、32位总线宽度的接口功能,支持I/O空间、内存空间及配置空间的读写和PCI中断功能。由于简化的PCI接口占用的逻辑资源较少,可在同一块芯片中集成其他用户逻辑。作为一个应用实例,本文加入了一个数据处理模块,对PCI接口传送来的数据进行处理,通过片外的输出接口输出到下位机。RAM芯片为数据处理提供缓存功能。

 

 

2 从设备模式下的简化PCI协议的实现

为了实现PCI接口的基本功能,必须完成以下几个模块:

(1)PCI配置空间设置。PCI协议支持三种地址空间:I/O空间、内存空间和配置空间。配置空间提供了支持PCI设备自动配置的机制,是必需的。

(2)PCI从设备状态机。PCI总线状态机是具有PCI总线的计算机系统状态流,是由一个已知状态到另一个状态的条件、时序的描述。这是PCI接口设计中最基本也是最重要的部分。

(3)地址译码和命令译码。地址译码用来确定PCI设备是否应当响应当前总线的操作;命令译码则用来指示PCI设备根据不同的总线命令作出相应的动作。

本文采用ALTERA公司的Max+PlusII软件平台,硬件描述语言使用ALTERA HDL语言,也可以方便地转换民VHDL或VerilogHDL语言。在此之前,先引入PCI总线信号的定义。

2.1 总线信号定义

根据PCI总线协议2.2版,从设备模式下PCI接口至少包含47根引脚。图2给出了按功能划分的引脚分布,左边是必需引脚。右边是可选引脚。为简化起见,本文采用了如下引脚,其他引脚均不使能或置为高阻态。

(1)由系统提供的33MHz的同步时钟信号CLK和复位信号RST#(#表示低电平有效);

(2)关于数据传输的核心信号:32位地址/数据复用线AD[31:0]、总线命令/字节使能复用线C/BE[3:0]#和偶校验信号PAR;

(3)接口控制信号FRAME#、TRDY#、IRDY#、STOP#、DEVSEL#和IDSEL。其中,FRAME#为数据传输起止信号,TRDY#为主设备准备好信号,IRDY#为从设备准备好信号,STOP#为从设备停止请求信号,DEVSEL#为设备选择信号,IDSEL为配置空间读写时的片选信号;

(4)中断引脚INTA#。

为简化PCI协议,本文只实现了最重要的总线命令,表1给出了所支持的总线命令对应的C/BE[3:0]#编码值。

表1 支持的总线命令

C/BE[3:0]#命令类型说明

0010

0011

0110

0111

1010

1011I/O读

I/O写

存储器读

存储器写

配置空间读

配置空间写

2.2 配置空间设置

配置空间大小为256字节,前64字节必需,记录了PCI设备的基本住处,比较重要的有:

(1)VendorID、DeviceID和Class Code域:分别表示设备的生产厂商、设备编号和类型;

(2)Command和Status域:分别给出了对PCI设备的控制命令和当前状态;

(3)Base Adress Register域:指示此PCI设备按I/O方式还是内存方式进行读写以及需要的地址空间大小;

(4)Interrupt Line和Interrupt Pin域:分别指明了设备使用的断号和中断引脚。

在对配置空间的访问中,用AD[7:2]寻址一个双字DWORD。在本设计中,配置空间设置如表2所示。

2.3 简化的从设备状态机

在PCI协议中,标准的从设备状态机包含五种状态,而且各状态的跳转条件比较复杂。本文在不违反PCI协议的前提下,简化了从设备的状态机,如图3所示。

图3中,状态转移条件信号a、b、c定义如下:a代表配置空间访问条件,b代表I/O空间或内存空间访问条件,c代表总线传输开始条件。这三个条件的实现由后面的命令译码模块给出。

表2 配置空间设置(均为十六进制)

字 段值或含义字段值或含义

VendorID1172Class Code040000,即视频卡

DeviceID8901Base Adress Register映射到I/O空间

Command0082Interrupt Line中断号A

Status0400Interrupt Pin使用INTA中断引脚

IDLE是系统的缺省状态,表示总线当前空闲。通常,设备处在IDLE状态时,要检测来自PCI总线和后级设备的信号,便设备作出合适的响应。设备处于S_DATA状态时完成第一次数据传输,直接无条件跳到BACKOFF状态。设备在BACKOFF状态时进行多个数据传输,直到主设备断开访问。需要注意的是:任何对I/O空间、配置空间以及内存空间的突发传输的地址超过了设备映射地址的范围时,从设备要在此状态建立STOP信号,断开访问。当帧信号无效或主设备终止传输时,设备回到初始的IDLE状态。BUS_BUSY状态时总线忙,表示总线正在被其它设备使用。有两条转移路径,若总线仍然被占用,则停留在BUS_BUSY状态,否则返回空头状态IDLE。[!--empirenews.page--]

2.4 地址译码和命令译码模块

地址译码模块主要检测PCI地址与本PCI卡的基地址是否匹配,可以通过AD[31:00]信号线上的值与设备的基地址作比较判断。如果PCI地址落在设置的基地址范围内,则PCI卡响应当前的总线操作。

命令译码模块指示PCI卡响应不同的总线命令,通过检测C/BE[3:0]#信号线上的值,与表1列出的总线命令作比较,完成命令译码。

 

 

3 Windows9x系统下驱动程序的设计

对PCI设备而言,驱动程序提供了获取PCI卡的配置空间信息、勾挂PCI中断、总线数据传输等功能。本文介绍使用Numega公司的VtooIsD软件进行驱动设计的方法。

3.1 寻找PCI卡并读取配置空间信息

配置空间包含了系统初始化PCI设备所必需的信息,首先需要遍历整个硬件树结构来寻找指定的PCI设备。对于每一个设备,比较其厂商号(Vendor ID)和设备编号(Device ID),如果与设计的PCI卡的信息匹配,则读取它的配置空间信息。

3.2 I/O方式下的读写操作

I/O方式下的读写比较简单。在得到PCI设备基地址信息后,通过C++语言中的端口读写函数inpd和outpd即可完成。举例如下:

Temp=_inpd(gBaseAddresses);//Temp中得到读出的数据

_outpd(gBaseAddresses,Data);//向基地址写入数据

其中,gBaseAddresses为基地址值,Data为写操作时的数据。

3.3 内存方式下的读写

对于内存方式下的读写,一个重要问题就是地址的映射。因为硬件设备读写的是物理内存,但应用程序读写的是虚拟地址,所以存在着将物理内存地址映射到用户程序线性地址的问题。

映射功能通过调用VtoolsD软件的标准库函数完成。根据给定的物理地址和所要求的空间大小,在系统内存中分配相应空间。首先,用PageReserve函数分配当前保留页的线性地址空间,再利用PageCommitPhys函数的服务对开始的线性地址空间分配相应的物理地址空间。程序如下:

ULONG nPages=_NPAGES_(PhysAddress,SizeInByte);

Linear=PageReserve(PR_SYSTEM,nPages,PR_FIXED);

PageCommitPhys(PAGENUM(Linear),nPages,PAGENUM

(PhysAddress),PC_INCR|PC_WRITEABLE|PC_USER);

LinPageLock(PAGENUM(Linear),nPages,0);

其中,PhysAddress为给定的物理地址,SizeInBytes为需要的空间大小。

建立了物理RAM到系统内存的映射后,就可以利用C++语言中的文件操作基类CFile类完成数据的读写。首先使用CFile类的成员函数Open打开文件,为保证数据读写的准确无误,必须使用二进制方式打开;接下来使用Read和Write成员函数进行文件读写;完毕后用Close成员函数关闭文件。

3.4 中断的勾挂和处理

首先在ON_DEVICE_INIT函数中完成中断的初始化。即通过前面读取的PCI设备的中断号,使用VPICD_Virtualize_IRQ函数进行中断勾挂,外调用VPICD_Physically_Unmask函数开中断。

RTCIRQHandle=VPICD_Virtualize_IRQ(&IRQdesc);

VPICD_Physically_Unmask(RTCIRQHandle);

然后在RTCInt_Handler函数中进行中断处理,可以进行各种操作,例如向应用程序发送自定义的消息来通知中断的发生。

 

 

3.5 与应用程序的通信

一般地,应用程序通过CreateFile函数调用VxD驱动程序,得到一个VxD的文件句柄。使用如下的语句可以打开一个名为mydriver.VXD的文件,得到的句柄保存在hVxD中。

hVxD=CreateFile(.mydriver.VXD,0,0,0,CREATE-NEW,FILE-FLAG-DELETE-ON-CLOSE,0);

通过句柄hVxD和DeviceIoControl函数就可以与驱动程序进行数据传输。

本文采用ALTERA公司的FLEX6000系列芯片,型号为EPF6016TC144-3,实现了简化的从设备模式PCI协议,并在Windows9x系统下实现驱动程序的设计。整个系统工作良好。资源占用情况如下:可用I/O引脚113根,占用51根,占用率45%;可用逻辑单元数1320个,占用151个,占用率11%。

简化的PCI协议的实现占用较少的逻辑资源,可以灵活方便地进行功能添加和改进,同时可以在同一块芯片中集成其他用户模块,实现不同功能,以降低成本。目前,本系统已经应用在数据采集处理、图像处理等方面。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京2024年5月13日 /美通社/ -- 5月11日,软通动力在鲲鹏昇腾开发者大会2024期间举办"软硬全栈,加速智能化赋能"分论坛。业界专家学者和优秀企业代表齐聚一堂,共同交流分享鲲鹏昇腾生态的创...

关键字: 智能化 全栈 PEN 计算机

卡西欧计算机株式会社宣布推出与冲浪者基金会合作设计的G-SHOCK系列新款防震手表G-5600SRF,旨在保护海洋。这款手表的表圈和表带由回收树脂废料制成,展现独特设计。配备Tough Solar太阳能充电系统,强调环保...

关键字: 手表 SHOCK SOLAR 计算机

对于大规模数据处理,最佳性能不仅取决于原始计算能力,还取决于高存储器带宽。 因此,全新 AMD Alveo™ V80 计算加速卡专为具有大型数据集的内存受限型应用而设计,这些应用需要 FPGA 硬件灵活应变能力以实现工作...

关键字: 自适应计算 FPGA

8b10b编码作为数字通信领域中的一项重要线路编码方案,其核心理念在于将每8位数据映射到10位编码中。这个映射过程严格按照特定规则进行,旨在保证编码中的电平转换足够,以维持信号的直流平衡,并提供足够的时钟信息,使接收端能...

关键字: FPGA 8b/10b编码 IC设计

在FPGA和IC设计领域,经常会面临一个挑战:多个端口同时竞争一个端口的数据。在这种情况下,采用RR调度策略可能是一种解决方案。

关键字: FPGA 嵌入式系统 IC设计

2024 年5月13日 – 专注于推动行业创新的知名新品引入 (NPI) 代理商™贸泽电子 (Mouser Electronics) 是英特尔®产品的全球授权代理商。英特尔®宣布正式成立Altera™,作为其独立运营的全...

关键字: FPGA 人工智能 以太网

随着信息技术的迅猛发展和大数据时代的到来,机器学习成为了人工智能领域中的核心技术之一。机器学习是通过模拟人类学习行为,使计算机系统能够从数据中自动发现规律、提取特征并进行预测和决策的过程。它在诸多领域取得了广泛的应用,包...

关键字: 计算机 人工智能 机器学习

随着大数据时代的到来,数据处理成为了一项至关重要的任务。传统的数据处理方法往往面临着效率低下、准确性不高等问题,而机器学习技术的兴起为数据处理带来了全新的解决方案。本文将深入探讨机器学习在数据处理中的应用,并分析其优势和...

关键字: 数据处理 计算机 机器学习

机器学习是人工智能领域的一个重要分支,它使用各种算法来使计算机系统能够从数据中学习和改进,而无需进行明确的编程。在机器学习的广阔领域中,有多种算法被广泛应用,每种算法都有其独特的适用场景和优势。本文将详细介绍机器学习中的...

关键字: 机器学习 人工智能 计算机

Bluespec支持加速器功能的RISC-V处理器将Achronix的FPGA转化为可编程SoC

关键字: RISC-V处理器 FPGA SoC
关闭
关闭