第 28卷 第 11期
2009年 11月
实 验 室 研 究 与 探 索
RESEARCH AND EXPLORATION IN LABORATORY
Vol. 28 No. 11
Nov. 2009
·计算机技术应用 ·
多 FPGA系统中自定义高速串行数据接口设计
李兆国 1, 2 , 宋 跃 1 , 谭爱群 1 , 许 浩 1, 2
(1. 东莞理工学院 电子工程学院 ,广东 东莞 523808; 2. 华南理工大学 电子工程学院 ,广东 广州 510640)
摘 要 :为方便多 FPGA系统中主从 FPGA之间的命令与数据传输 ,节省连接的引脚数量 ,设计了一种
基于 FPGA的自定义高速串行数据传输模块。对主从串行模块进行了详尽的协议设计 ,得出了串行传
输时序设计图 ,编写了 verilog硬件代码并仿真通过硬件实测在 25 MHz工作正常。该设计作为一个 IP
软核 ,略作修改后 ,可以被无缝整合到各种形式的嵌入式系统中。
关键词 :串行数据接口 ; 现场可编程门阵列 ; IP核
中图分类号 : TP 274 文献标识码 : A 文章编号 : 1006 - 7167 (2009) 11 - 0057 - 05
De sign of Custom High2speed Se ria l Pe riphe ra l Inte rface in
Multip le FPGA System
L I Zhao2guo1, 2 , SON G Yue1 , TAN A i2qun1 , XU Hao1, 2
(1. School of Electronic Engineering, Dongguan University of Technology, Dongguan 523808, China;
2. School of Electronic Engineering, South China University of Technology, Guangzhou 510640, China)
Abstract: The design of custom high2speed serial peripheral interface based on FPGA was introduced. It could be used
in transferring instruction or data among p rincipal and subordinate modules in multip le FPGA system . The detailed com2
munication p rotocol was designed. The p rogram waswritten with verilog HDL and simulated successfully. Itworks stably
for 25 MHz in the reality testing. A s an IP core, it could be transp lanted to various form s of embedded system s after
slightly modified.
Key words: serial peripheral interface; FPGA /SOPC; IP core
收稿日期 : 2009 - 06 - 18
基金项目 :国家自然科学基金重大项目 ( 10890095) ;广东省高等教
育教学改革项目 (BKJGYB2008096)
作者简介 :李兆国 (1984 - ) ,男 ,广东肇庆人 ,在职硕士生 ,研究方
向为嵌入式操作系统与软件。E2mail: zhaoguolee@163. com
通信作者 :宋 跃 (1963 - ) ,男 ,湖南邵阳人 ,教授 ,从事电路与系
统、测量仪器等研究与教学。E2mail: eda815@163. com1 引 言在基于 FPGA的多功能仪器的开发中 ,模块之间尽量取消耦合 ,保持其独立性 ,使得不同仪器可以并行开发 ,集成与调试都相对简单。既然要实现模块化设计就需要提供模块与上层控制模块的接口 ,这就需要定制 1种用户外设 ,设计 1种主从模块的数据传输与控制电路来协调这个矛盾。SOPC Builder提供了 1个元件编辑器 ,通过元件 编辑器 ,用户可以将用户逻辑封装成 1个 SOPC Build2er元件 ( IP核 ) ,用户可以像使用 A ltera提供的外设元件一样使用该自定义的元件 ,并且可以提供给其他设计者使用 (发布元件 ) [ 1 ]。2 自定义高速串行数据接口时序设计自定义的高速串行数据传输模块 HSP I ( H igh2speed Serial Peripheral Interface)分为主端和从端 2部分 ,主端与 N iosII处理器相连 ,主端的每 1次操作对应于一个时序传送过程 ,当 CPU需要读写操作时 ,首先给出 1个读写起始地址 ,发出写地址数据时序 ,这个地址通过串行线路送到从端并锁存 ,这时 CPU可以发出读写命令 ,数据通过双向串行线路传送 [ 2 ]。当 CPU连续读写 1段内存时为了保证数据传送的高效 ,只需要发送 1次写地址时序 ,从端的电路加入了地址自动增1逻辑 ,接下来的读写控制时序可以连续产生。表 1
表 1 主从 HSP I设备接口信号
主端信号类型
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
从端信号类型 说明
work_clk 来自 N IOS的同步时钟 H sp i_clk 从端工作时钟
clk_en 输出从端脉冲使能 shift_en 移位数据使能
shift_en 移位数据使能 hsp i_odata 从端串行输出
hsp i_state 主端忙闲标志 hsp i_idata 从端串行输入
hsp i_mode 从端启动信号 r_flag 读信号输出
hsp i_odata 主端串行输出 w_flag 写信号输出
hsp i_idata 主端串行输入 update_addr_flag 更新地址信号
hsp i_clk 从端时钟输入 addr[ 31. . 0 ] 地址输出
— — Dataout[ 31. . 0 ] 数据输出
— — Datain[ 31. . 0 ] 数据输入
给出了主从端信号说明 ,这些信号中 ,在顶层设计图中
主从端的连接只需要用到 4个信号线 ,其中 : 1个开始
传输指示信号 ; 2个双向串行数据传输信号 ; 1个从端
时钟输入信号 ,其他信号均为内部逻辑辅助信号 [ 3, 4 ]。
HSP I主从端的读写时序关系 ,如图 1所示。整个
传输过程经过状态机的不同状态 ,没有操作时电路处
于等待状态 ,当主端选通从外设后 ,发出读写操作指令
并启动状态机 ,不同的状态对应不同的电路动作 [ 5 ]。
图 1 HSP I主从端的读写时序关系
85 实 验 室 研 究 与 探 索 第 28卷
3 HSP I与 N IO S2II的连接
考虑到用户逻辑要与 N ios处理器进行通信 ,要增
加 2个信号 : chip select和 address信号。其中 chip se2
lect信号是片选信号 , address信号是地址信号。对于
独立的用户逻辑 ,如果不需要与 N ios进行通信 ,则片
选信号和地址信号是不需要的。在这种情况下 , N iosII
也不知道这个用户逻辑是存在的 ,两者是并行对等的
关系 ,即 N ios在工作的同时 ,用户逻辑可以并行的独
立工作。但当需要用户逻辑与 N ios进行通信时 ,则必
须加入片选信号和地址信号。只有这样 ,用户逻辑才
能正确地连接到 N ios总线上与 N ios进行通信 [ 6 ]。
自定义元件需要多少位地址是根据自定义元件自
身的需求定义的 ,地址的译码可以用来选择不同的存
储单元 ,也可以用来产生不同的命令 ,完全取决于设计
者对译码的使用目的。在本实例中 ,不同的地址译码
对应 N iosII传送给模块的不同操作 [ 7 ]。
在这里 N iosII需要完成的命令有 5种 ,分别是写
32位地址命令 (发送 32位地址数据到从端并在从端
发出写信号 )、写 32位数据命令 (发送 32位数据到从
端并发出写信号 )、发送读操作时序命令 (启动读操作
序列 ,从端 32位数据送主端寄存 ) ,读 32位数据命令
(读取主端的移位寄存器 )、读主端忙闲状态命令 (通
过读取 hsp i_state值 )。3位地址信号可以处理 8个地
址 ,这里只用了 5个 ,以下是主端 verilog地址定义 :
assign addr_reg_selected = ! address[ 2 ] & ! address[ 1 ]
& ! address[ 0 ];
assign readdata_ reg_ selected = ! address[ 2 ] & ! address
[ 1 ] & address[ 0 ];
assign writedata_selected = ! address[ 2 ] & address[ 1 ] & !
address[ 0 ];
assign state_ reg_ selected = ! address[ 2 ] & address[ 1 ] &
address[ 0 ];
assign read_data_cmd_ selected = address[ 2 ] & ! address
[ 1 ] & ! address[ 0 ];
以上代码对应的地址依次从“000”到“100”,是模
块中的相对地址。这个相对地址与基地址结合在一
起 ,形成绝对地址。比如 , state_reg_selected (读主端忙
闲状态 )分配到相对地址“011”,则它的绝对地址为
0x00400000 + 33 4 = 0x0040000C,其中 0x00400000是
系统分配的基地址。每个寄存器占据 32位 ,所以在计
算绝对地址时 ,相对地址要乘 4。
信号定义好以后通过 SOPC Builder工具编辑元件
信号 ,并指定相关信号的时序关系进而封装并生成元
件模块 [ 8 ]。这里先给出主端的自定义模块信号列表
如图 2所示。
clk为系统同步时钟信号 ,所有信号与 clk同步 ;
reset_n为外设复位信号 ,当有效时 ,从端口必须进入
Name Interface Signal Type W idth D irection
clk clock clk 1 input
reset_n clock reset_n 1 input
hsp i_idata export_hsp i export 1 input
hsp i_odata export_hsp i export 1 output
hsp i_clk export_hsp i export 1 output
hsp i_mode export_hsp i export 1 output
chip_select avalon_slave_hsp i chip select 1 input
address avalon_slave_hsp i address 3 input
write avalon_slave_hsp i write 1 input
writedata avalon_slave_hsp i writedata 32 input
read avalon_slave_hsp i read 1 input
readdata avalon_slave_hsp i readdata 32 output
图 2 HSP I主端 Avalon信号定义
确定的复位状态 ; hsp i_idata、hsp i_odata、hsp i_clk、hsp i_
mode为与应用相关的信号 ,在任务逻辑中将会有硬件
代码加以描叙 ;地址线 address[ 2. . 0 ]、写请求 write、写
数据线 writedata [ 31. . 0 ]、读请求 read、读数据线
readdata[ 31. . 0 ]为 Avalon从端口信号的 1个子集。
4 Ver ilog设计实现与仿真
参考图 2 HSP I主端 Avalon信号 ,当 N IOS2II对电
路模块寻址时 chip _ select信号有效 ,当为写命令时
write输出有效 ,同理读命令时 read输出有效 ,通过这
些信号及以上定义的 5个地址译码信号相与 ,则可以
分别解析各个不同的命令 ,解析代码如下 :
/ / determ ine if a vaild transaction was initiated
assign valid_write = chip_select & write;
assign valid_read = chip_select & read;
/ /determ ine if a command occurred to a specific address
assign write_to_addr_reg = valid_write & addr_reg_selected;
assign write_to_writedata = valid_write & writedata_selected;
assign read_from_readdata_reg = valid_read & readdata_reg_
selected;
assign read_from_state_reg = valid_ read & state_reg_ select2
ed;
assign read_data_cmd = valid_read & read_data_cmd_select2
ed;
5个命令中并不是所有命令都会启动状态机发出
串行控制时序 ,只有当发送 32位地址数据和 32位用
户数据 ,读从端 32位数据时才启动。
当状态机启动后 ,主从端的数据同时串行发送并
接收 ,所以通常的操作顺序为首先发送一个 32位地址
信号 ,从端通过移位寄存器串行接收后通过内部 up2
date_addr_flag把地址锁存 ,并输出此地址的数据到串
行输出线。主端这时可以发出读命令或则是写命令 ,
注意这里的读命令对应有读主端的移位寄存器命令和
发出读操作时序命令 , N iosII要能读出从端的 32位数
95 第 11期 李兆国 ,等 :多 FPGA系统中自定义高速串行数据接口设计
据首先要发出读时序 ,数据串行传送到主端的移位寄
存器 ,然后发出读寄存器命令从而得到从端数据。当
连续读写一段连续地址时不需要再次给出地址信号 ,
每次读写操作时序中 ,从端通过主端在状态机 addr_
bit和 rw_bit中传送的 2位比特来判断传送的数据到
底是用来写地址数据、写用户数据还是读用户数据 ,当
addr_bit为‘1’时为写 32位地址 , rw_bit为‘1’为写用
户数据反之为读用户数据。这样从端就能解析不同的
命令了。这样当 addr_bit为‘0’即发出的是读写用户
数据命令时 ,地址自增 1单元在 update_addr状态期间
加 1。从端地址逻辑代码如下所示 :
wire set_addr = update_addr_flag & recv_data[ 1 ];
wire add_addr = update_addr_flag & ! recv_data[ 1 ];
always@ (posedge hsp i_clk)
begin
if ( set_addr)
addr〈 = recv_data[ 33: 2 ];
else if ( add_addr && ! addr[ 31 ] )
addr〈 = addr + 1;
end
如上 , recv_data为 34位移位寄存器 ,在 shift_en
为‘1’时串行接收移位比特 ,对照时序图可知 addr_bit
状态接收的存储位置为 recv_data [ 1 ]。所有的移位时
序统一协调为上升沿接收 ,下降沿发送。观察时序图
可知 ,主端和从端发送的数据都为 AAAAAAAA ,主端
最后传送 2位控制比特为‘01’,可知操作为写 32位
用户数据。在 HSP I电路工作时 , N iosII需要查询忙闲
标志以判断是否可以进行下次操作 ,代码如下 :
always @ ( read_from_state_reg)
begin
if ( read_from_state_reg)
read_data = {31’h00000000, hsp i_state};
else
read_data = 32’hzzzzzzzz;
end
设立内部信号 hsp i_ state的作用就是当状态机为
非等待状态时置为‘1’,当 N iosII读出数据 0说明电路
为闲则可以立即进行下一步操作。
通过上面的说明 ,我们知道 ,对高位地址的译码从
而可以选通不同的从端用户逻辑。地址信号最高位
addr[ 31 ]为‘0’时选通数据存储器 ,当为‘1’时选通寄
存器组。图 3为一组写地址和写数据仿真波形。
图 3 ( a)为从端写地址波形 , addr[ 31 ]为‘0’,主端
发送数据 0XAAAAAAAA,从端在 D31状态接收完毕 ,
在 addr_bit状态收到信号‘1’,继而把收到的数据在
update_addr状态期间送地址总线 addr[ 31. . 0 ] ,地址
经过 2个状态期间的稳定后在 r状态期间输出读信号
oe,读出的数据锁存到 data_ in [ 31. . 0 ]以备下一次发
送数据做好准备。
紧接着以上的写地址操作 ,图 3 ( b)显示为从端写
32位数据波形。虽然此操作为向从端写入数据
0XAAAAAAAA ,从端数据线上的数据 0XAAAAAAAA
依然通过串行口 hsp i_odata送到主端串行输入 ,只不
过 N iosII忽略读取罢了。可以看出在 rw_bit状态传送
‘1’代表写数据操作 ,并在 w状态输出写信号。
图 4为 HSP I主从端的 FPGA元件视图 , HSP I主
端已经配置成为 N ios处理器的一个自定义外设。
5 HSP I电路软件驱动设计
定制 IP核的时候 ,硬件设计好后 ,编写用于描述
寄存器的 C语言头文件用来为软件定义硬件寄存器
映像 ,最后使用元件编辑器来封装硬件 HDL和软件文
件得到一个元件 ,整个设计中 ,层次关系非常清晰。硬
件设计是最底层 ,其上是寄存器映射 ,再上是向用户提
供的 AP I,用户的应用程序在最顶 ,直接调用 AP I完成
应用程序的设计。这种
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
比较好管理种类丰富的各
种外设和驱动程序 ,方便在集成开发环境中集成 [ 9 ]。
当元件生成后在 SOPC Builder工具中添加到 N i2
osII软核 ,自动为各个元件分配基地址并生成系统 ,在
这个过程中还会生成一个用来描述软核各个部件的系
统文件 system. h,其中有各元件属性和地址的相关说
明 ,以供上一层软件访问。以下是部分反映 HSP I模
块的代码 :
/3 hsp i_master _inst configuration 3 /
#define HSP I_MASTER _ INST_NAME " /dev/hsp i_master_
inst"
#define HSP I_MASTER _ INST_TYPE " hsp i_master"
#define HSP I_MASTER _ INST_BASE 0x00400000
#define HSP I_MASTER _ INST_SPAN 32
#define ALT_MODULE_CLASS_hsp i_master_inst hsp i_master
以上代码说明 HSP I的系统描述信息 ,其中最重
要的就是基地址信息以及设备的寻址范围 ,如上基地
址为 0x00400000, SPAN 为 32, 即 0x00400000 到
0x0040001F是这个模块的地址范围。对照第 3节中 5
个不同命令的地址译码可以确定不同的命令对应的寻
址地址。对应于读写软件驱动分别提供单个数据读写
命令和连续数据读写命令如下 :
写单个字命令 :
void single_write ( unsigned int addr, unsigned int data) {
IOWR_32D IRECT(HSP I_MASTER_ INST_BASE, 0 , ad2
dr) ; / /写地址
while ( IORD_32D IRECT(HSP I_MASTER_ INST_BASE, 43 3) = = 1) {
p rintf ( "write addr busy\n" ) ; / /等待操作完成 }
IOWR_32D IRECT(HSP I_MASTER _ INST_BASE, 43 2 ,
data) ; / /写数据
06 实 验 室 研 究 与 探 索 第 28卷
( a) 地址波形
( b) 数据波形
图 3 从端写 32位地址数据波形仿真图
图 4 自定义高速串行总线模块视图 (下转第 83页 )
16 第 11期 李兆国 ,等 :多 FPGA系统中自定义高速串行数据接口设计
到一定程度时 ,网络负载才会随着网络节点数的增加
而迅速增加。因此 ,控制广播深度尤为重要。
CMPS协议结合了 MOSPF[ 13 ]和 P IM 2SM [ 14 ]的特
点 ,具有构建多播树成功率高、网络负载小的特性。在
设计过程中注重它的简单性 (网络协议的一般
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
,
便于扩展 ) ,甚至不惜增加中间节点的纪录数量。但
中间路由器要保留的状态信息过多 ,在今后的工作中 ,
期望能找到更好的改进方法减少中间路由器的记录
数 ,从而增强 CMPS的可扩展能力。
参考文献 ( References) :
[ 1 ] http: / /www. ietf. org/.
[ 2 ] W ang B, Hou J C. Multicast routing and its QoS extension: Prob2
lem s, algorithm s, and Protocols[ J ]. IEEE Network, 2000, 14 (1) :
22236.
[ 3 ] Guerin R A, O rda A. QoS routing in networks with inaccurate infor2
mation: theory and algorithm s[ J ]. IEEE /ACM Transactions on Net2
working, 1999, 7 (3) : 3502364.
[ 4 ] Lorenz D H, O rda A. QoS routing in networkswith uncertain param2
eters[ J ]. IEEE /ACM Transaction on networking, 1998, 6 ( 6 ) :
7682778.
[ 5 ] Chen S G, Nahrstedt K. D istributed QoS routing with imp recise state
information[ C ] / /. Proceedings of the 7 th International Conference on
Computer Communications and Networks ( IC3N ’98 ) , Lafayette,
LA, 1998, 6142621.
[ 6 ] J ia Y, N ikolaidis Y, et a l. Multip le path routing in networkswith in2
accurate link state information [ C ] / /. Proceedings of IEEE Interna2
tional Conference on Communications ( ICC 2001 ) , Helsinki, Fin2
land, 2001, 8: 258322587.
[ 7 ] Sim K M, Sun W H. Ant colony op tim ization for routing and load
balancing: survey and new directions [ J ]. IEEE Transactions on
System s, Man and Cybernetics, Part A, 2003, 33 (5) : 5602572.
[ 8 ] Lu G Y, L iu Z M. Multicast routing based on ant2algorithm with de2
lay and delay variation constraints[ C ] / /. Proceedings of IEEE A sia2
Pacific Conference on Circuits and System s, Tianjin, China, 2000,
2432246.
[ 9 ] http: / /www. faqs. org/ rfcs/ rfc1075. htm l.
[ 10 ] http: / /www. rfc2editor. org/ rfc / rfc1584. txt.
[ 11 ] http: / /www. faqs. org/ rfcs/ rfc2362. htm l.
[ 12 ] Ballardie T, Francis P, et a l. Core Based Tree (CBT) an architec2
ture for scalable inter2domain multicast routing[ C ] / /Proceedings of
ACM SIGCOMM 93, San Francisco, CA, 1993, 85295.
[ 13 ] Moy J. Multicast routing extensions for OSPF [ J ]. Communications
of the ACM, 1994, 37 (8) : 61266.
[ 14 ] Deering S, Estrin D L, et a l. The P IM architecture for wide2area
multicast routing [ J ]. IEEE /ACM Transaction on Networking,
1996, 4 (2) : 1532162.
[ 15 ] The Network Simulator: NS22 [ Online ] , Available at http: / /www.
isi. edu /nsnam /ns/.
(上接第 61页 )
while ( IORD _32D IRECT (HSP I_MASTER _ INST_BASE, 43 3) = = 1) {
p rintf ( "write data busy\n" ) ; / /等待操作完成 } }
写连续字命令 :
void seq_write ( unsigned int dest_addr, int length, unsigned int3 buf) {
IOWR_32D IRECT(HSP I_MASTER _ INST_BASE, 0, dest_
addr) ; / /写地址
while ( IORD_32D IRECT(HSP I_MASTER_ INST_BASE, 43 3) = = 1)
p rintf ( "write addr busy\n" ) ; / /等待操作完成
for ( int i = 0; i〈 length; i + + ) {
IOWR_32D IRECT ( HSP I_MASTER _ INST_BASE, 4 3
2, buf[ i] ) ; / /写数据
while ( IORD _ 32D IRECT ( HSP I _MASTER _ INST _
BASE, 43 3) = = 1)
p rintf ( "write addr busy\n" ) ; / /等待操作完成 } }
读单个字命令与读连续字命令与上述命令类似这
里不再敖述。
6 结 语
该接口已成功应用于“ETSM 21电子测量综合仪
器 ”样机中 ,运行情况良好。
本文用 verilog设计了高速同步串行数据传输模
块的 IP核 ,能够发送 32位地址信号、32位数据信号 ,
读写控制信号并且在读写连续地址空间时只需指定 1
个首地址 ,硬件实测在 25 MHz工作正常。主端通过
SOPC Builder工具把硬件代码打包成 IP核 ,从而方便
地在不同项目中都能简单重用此模块。最后编写了软
件驱动函数 ,为应用级软件提供了方便易用的接口。
参考文献 ( References) :
[ 1 ] 李兰英. N ios2II嵌入式软核 SOPC设计原理及应用 [M ]. 北京 :
航空航天出版社 , 2006: 26245.
[ 2 ] 宋 跃 , 胡升平 , 周明辉 , 等. 手持式存储示波器中的数据采集
设计 [ J ]. 电气应用 , 2006 (3) : 1102112.
[ 3 ] 贾 伟 , 邵左文 , 张玉猛. 基于 SP I总线的高速串行数据采集系
统设计 [ J ]. 国外电子测量技术 , 2007 (4) : 37240.
[ 4 ] 赵 彧 , 张 楚. 多媒体处理器中的 SP I接口设计 [ J ]. 电子测
量技术 , 2007 (6) : 1262129.
[ 5 ] Simon Srot. SP IMaster Core Specification, Rev 0. 6. www. opencore.
org. May 16, 2007.
[ 6 ] B ricaud P J. IP reuse creation for system2on2a2chip design[ C ] / /Pro2
ceedings of the IEEE Custom Integrated Circuits. 1999: 3952401.
[ 7 ] 张 晴. FPGA设计中竞争冒险问题的研究 [ J ].
实验室
17025实验室iso17025实验室认可实验室检查项目微生物实验室标识重点实验室计划
研究与
探索. 2003 (1) : 47249.
[ 8 ] 沈 戈. 基于 IP核的 SOC设计方法及其应用的研究 [ D ]. 西北
工业大学 , 2004: 36242.
[ 9 ] A ltera Inc. N iosII Software Developer’s Handbook[ S]. 2005: 15238.
38 第 11期 蒋志洁 ,等 : QoS多播路由协议研究及仿真实验