·888 北京科技大学学报 2006年第9期 3.5DATA-Poc数据处理模块 数据总线通讯[6], DATA-ProC模块用于对采集的数据进行处 为了使用快速同步方式传输数据,需对2131 理,根据项目要求,其工作主要是对信号进行滤波 进行如下设置: 和边缘提取,从而提取有效数据,减少数据的传输 (1)能使S0F中断,使51内核能接受S0F 量.为了减少工作量,采用了Xilinx公司的Sys- 中断,从而保证1ms传输一桢数据 temGenerator软件来设计这部分模块[, (2)本系统使用了等时传输IN8端点,所以 SystemGenerator是Xilinx公司和Mathworks 须设置INIS0VAL为00000001”. 合作开发的FPGA辅助设计工具,只需在 (③)设置IN8端点将使用的等时FIF0的大 Simulink中完成模型的搭建,启动SystemGenera~ 小.为了加快数据传输的速度,这里设置该FIF0 tor,就能自动生成VHDL源程序及其他一些工程 的大小为1024. 文件,并将系统模型映射到目标器件FPGA上进 (4)设置寄存器PORTACFG,设置PA口第 行硬件实现[] 4位和第5位复用功能.其复用功能是快速等时 3.6FF0模块 传输的FRD和FWR信号. 视频信号进入PGA的时钟为13.5MHz, (5)设置寄存器FASTXFR,使能快速等时传 而USB接口芯片的时钟为12Mz,两者时钟速 输方式,设置FRD低电平有效,并且设置了 率不匹配.这就出现了异步时序设计问题,由于 nFRD的宽度和相位, 需要进行跨时钟领域的数据传输,必须在FPGA 为了响应SOF中断,需要在中断响应函数 和EZ-USB之间加入缓冲数据单元.这个缓冲器 ISR-Sof()中编写数据处理程序,将数据传送到 一般由异步First-In FirstOut(FIFO)实现.异 内部寄存器IN8DATA,另一方面清除SOF中断 步FFO在每个写时钟时写入数据,而用每一个 请求和USB中断请求,以便程序能对下一个SOF 读时钟时读出数据,这两个时钟是异步的, 做出正确的响应 FIFO的工作原理是:在写时钟的上升沿,当 写允许有效时,将写数据总线上的数据写入双口 5PC机应用程序 RAM中写地址对应的存储单元中;而始终将读地 EZUSB通用驱动程序GPD(general purpose 址对应的双口RAM中的数据输出到读数据总线 driver)用来和EZUSB外设接口的通用设备驱动 上,在读允许有效时,输出数据 程序,为应用程序访问EZUSB硬件提供了途径. 4 EZUSB模块 EZUSB开发包提供了默认的驱动程序文件 EZUSB.SYS7. 在系统中,EZUSB2131主要完成两方面的工 对于应用程序而言,调用CreateFile()来打开 作:完成对SAA7111A的配置和基于快速同步传 输方式的数据传输, 设备并取得访问设备驱动程序的句柄,用户程序 为了使视频解码芯片SAA7111A正常工作 使用函数DeviceloControl()来提交控制码,并为 必须通过℃总线对其内部的寄存器进行正确的 CreateFile()函数返回的设备句柄设置I/O缓冲 配置,当通过C配置SAA7111A时,写入数据 区 格式为:首先为起始信号,然后是7位的从机地址 连接到主机的EZUSB设备,GPD为其创建 和方向位(0'表示写入SAA7111A寄存器,‘1 一个链接符.调用函数CreateFile(),实质上就是 表示读出相应寄存器)共8位数据,此时从机应该 获取驱动程序产生的目标设备句柄,EZUSB开 向主机发送一位响应信号,然后是从机中被写入 发包中提供了I/0控制码,使用这些I/0控制码 的寄存器的地址和从机的响应信号,然后才是要 能非常方便地实现USB通讯,当使用快速传输 写入子地址寄存器的的数据,最后是结束信号, 方式时,需要将IOCTL-EZUSB-START-ISO- USB总线支持4种数据传输方式:控制传 STREAM,IOCTL-EZUSB-READ-ISO-BUFFER, 输、中断传输、等时传输和块传输,EZUSB系列 IOCTL-EZUSB-STOP-ISO-STREAM等控制码 的2131Q支持快速等时传输方式,为了提高数据 提供给函数DeviceloControl(),从而实现开启等 传输的速度,应用这种方式进行数据传输,能够使 时传输、读取等时传输数据、停止等时传输等 FPGA内部的FIFO模块直接与EZUSB内部的 功能3∙5 DATA-Proc 数据处理模块 DATA—Proc 模块用于对采集的数据进行处 理根据项目要求其工作主要是对信号进行滤波 和边缘提取从而提取有效数据减少数据的传输 量.为了减少工作量采用了 Xilinx 公司的 SystemGenerator 软件来设计这部分模块[4]. SystemGenerator 是 Xilinx 公司和 Mathworks 合作 开 发 的 FPGA 辅 助 设 计 工 具只 需 在 Simulink 中完成模型的搭建启动 SystemGenerator就能自动生成 VHDL 源程序及其他一些工程 文件并将系统模型映射到目标器件 FPGA 上进 行硬件实现[5]. 3∙6 FIFO 模块 视频信号进入 FPGA 的时钟为13∙5MHz 而 USB 接口芯片的时钟为12MHz两者时钟速 率不匹配.这就出现了异步时序设计问题.由于 需要进行跨时钟领域的数据传输必须在 FPGA 和 EZ—USB 之间加入缓冲数据单元.这个缓冲器 一般由异步 First—In—First—Out (FIFO)实现.异 步 FIFO 在每个写时钟时写入数据而用每一个 读时钟时读出数据这两个时钟是异步的. FIFO 的工作原理是:在写时钟的上升沿当 写允许有效时将写数据总线上的数据写入双口 RAM 中写地址对应的存储单元中;而始终将读地 址对应的双口 RAM 中的数据输出到读数据总线 上在读允许有效时输出数据. 4 EZUSB 模块 在系统中EZUSB2131主要完成两方面的工 作:完成对 SAA7111A 的配置和基于快速同步传 输方式的数据传输. 为了使视频解码芯片 SAA7111A 正常工作 必须通过 I 2C 总线对其内部的寄存器进行正确的 配置.当通过 I 2C 配置 SAA7111A 时写入数据 格式为:首先为起始信号然后是7位的从机地址 和方向位(‘0’表示写入 SAA7111A 寄存器‘1’ 表示读出相应寄存器)共8位数据此时从机应该 向主机发送一位响应信号.然后是从机中被写入 的寄存器的地址和从机的响应信号然后才是要 写入子地址寄存器的的数据最后是结束信号. USB 总线支持4种数据传输方式:控制传 输、中断传输、等时传输和块传输.EZUSB 系列 的2131Q 支持快速等时传输方式为了提高数据 传输的速度应用这种方式进行数据传输能够使 FPGA 内部的 FIFO 模块直接与 EZUSB 内部的 数据总线通讯[6]. 为了使用快速同步方式传输数据需对2131 进行如下设置: (1) 能使 SOF 中断使51内核能接受 SOF 中断从而保证1ms 传输一桢数据. (2) 本系统使用了等时传输 IN8端点所以 须设置 INISOVAL 为“00000001”. (3) 设置 IN8端点将使用的等时 FIFO 的大 小.为了加快数据传输的速度这里设置该 FIFO 的大小为1024. (4) 设置寄存器 PORTACFG设置 PA 口第 4位和第5位复用功能.其复用功能是快速等时 传输的 FRD 和 FWR 信号. (5) 设置寄存器FASTXFR使能快速等时传 输方式设置 nFRD 低电平有效并且设置了 nFRD 的宽度和相位. 为了响应 SOF 中断需要在中断响应函数 ISR—Sof ()中编写数据处理程序将数据传送到 内部寄存器 IN8DATA另一方面清除 SOF 中断 请求和 USB 中断请求以便程序能对下一个 SOF 做出正确的响应. 5 PC 机应用程序 EZUSB 通用驱动程序 GPD(general purpose driver)用来和 EZUSB 外设接口的通用设备驱动 程序为应用程序访问 EZUSB 硬件提供了途径. EZUSB 开 发 包 提 供 了 默 认 的 驱 动 程 序 文 件 EZUSB.SYS [7]. 对于应用程序而言调用 CreateFile()来打开 设备并取得访问设备驱动程序的句柄.用户程序 使用函数 DeviceIoControl()来提交控制码并为 CreateFile()函数返回的设备句柄设置 I/O 缓冲 区. 连接到主机的 EZUSB 设备GPD 为其创建 一个链接符.调用函数 CreateFile()实质上就是 获取驱动程序产生的目标设备句柄.EZUSB 开 发包中提供了 I/O 控制码使用这些 I/O 控制码 能非常方便地实现 USB 通讯.当使用快速传输 方式时需要将 IOCTL—EZUSB—START —ISO— STREAMIOCTL—EZUSB—READ—ISO—BUFFER IOCTL—EZUSB—STOP—ISO—STREAM 等控制码 提供给函数 DeviceIoControl()从而实现开启等 时传输、读取等时传输数据、停止等时传输等 功能. ·888· 北 京 科 技 大 学 学 报 2006年第9期