找回密码
 注册
关于网站域名变更的通知
查看: 376|回复: 3
打印 上一主题 下一主题

看看,基于FPGA的SOC系统中的串口优质设计

[复制链接]
  • TA的每日心情
    开心
    2019-11-20 15:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-10-28 07:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    看看,基于FPGA的SOC系统中的串口优质设计

    ; e$ h' I) C- H4 }3 n0 K; X( n5 ~5 p2 B* o

    7 D7 X9 i3 M5 n0 p- M' g) j1 概述
    - }8 z3 M9 E0 ^# j& |9 \- W" e, Y) }: n# [! ?
      在基于FPGA的SOC设计中,常使用串口作为通信接口,但直接用FPGA进行串口通信数据的处理是比较繁杂的,特别是直接使用FPGA进行串口通信的协议的解释和数据打包等处理,将会消耗大量的FPGA硬件资源。, ^' }9 [0 C0 j* w

    : ~6 T* w6 Z4 G6 h0 g$ @+ T  为简化设计,降低硬件资源开销,可以在FPGA中利用IP核实现的嵌入式微处理器来对串口数据进行处理。
    , ]9 x; o* m+ S
    9 v9 ~4 v( D' r- U  }  H  本文中的设计采用了Xilinx的FPGA,可选用的嵌入式微处理器IP核种类繁多,但基于对硬件资源开销最少的考虑,最终选用了Picoblaze。# A7 }# `# Q3 b" j
    ; G. A+ u; x5 {3 X
      嵌入式微处理器PicoBlaze适用于Spartan-II/E、CoolRunner-II和Virtex系列FPGA,运行速度可达到40MIPS以上,提供49个不同的指令,16个寄存器,256个地址端口,1个可屏蔽的中断。其性能超过了传统的8bit微处理器。嵌入式微处理器Picoblaze的功能、原理见参考文献[1]。4 I" n0 Q- {- n

    # ?2 `! D8 r: U; P- |  Picoblaze使用灵活,但其缺点是可寻址的存储空间非常有限,因此为满足实际需要本文同时也提出了使用片外SDRAM器件对其存储能力进行扩展的设计方法。* y( K/ n7 m0 Y+ m+ B4 ?

    & B' D6 \( u$ e( H8 v+ q8 O) D) B, |  2 串口收发接口设计6 e% s- ~* t$ i6 a* M9 o0 R- Q

    ; t" V5 u4 W; P: }# K# |
    % q1 w/ h7 D' g* X% U' X/ q  2.1串口收发接口硬件设计' p1 L  c# [5 }: p1 w$ M

    4 {( P/ L3 w8 o( d- W8 P  嵌入式微处理器PicoBlaze本身并不具备串行接口,因此必须在FPGA中设计串口接收和发送模块并通过总线结构与Picoblaze连接。
    , B) w% E! U7 j& D
    + {. b5 O# L' V& g3 C  串口接收和发送模块的设计可采用成熟的IP核。实际设计中采用了XLINX的串口收发IP核,其特点是串口波特率,符号规则都可以灵活地定制,同时具有16字节的接收FIFO和16字节的发送FIFO。串口收发IP核的功能、原理见参考文献[2]。
    ' H. U6 |8 [$ C  k7 A# l
    6 j% b# X9 ^- K) s+ r  使用Picoblaze和串口收发IP核构成的串口收发系统结构见图1。* s' J' c' c4 d! G' P. u
    9 r4 B8 l: _1 G5 M- N2 _

    . d/ J  m1 Y( s" ~' r+ a. T在设计中,发送模块、接收模块和标志寄存器分别有不同的地址,Picoblaze通过地址端口对串口收发模块进行访问。设计中的标志寄存器,可用于指示发送模块和接收模块中FIFO的状态,Picoblaze通过查询标志寄存器来完成对串口数据的收发控制。
    ! V/ i6 \* D* @' o8 t0 h
    : R0 m" s+ x# k& [' W' S  2.2串口收发接口软件设计
    8 ?6 ]& B. c+ ?, L1 D  t) Z2 `$ T5 y
    ! b- Z. Y2 P; m; h4 {4 g. B9 W& |+ D8 U' R  串口发送、接收子程序7 e( j1 J1 D0 z7 L" x2 c3 ?
    , G2 Y# H. x+ k0 o3 ?
      Picoblaze通过对标志寄存器的查询,根据FIFO的状态进行操作。串口发送和接收子程序流程见图2。
    2 z( M- a$ P, H; i
    ( X9 ~: H: G) ^, L Picoblaze的编程,类似于汇编语言。) D6 }: n- _) [; W

    ; S; T5 E" d7 W- S; Q  串口发送子程序代码如下:& d9 `) H4 F3 A0 u5 l1 {( B5 ]
    4 W: o& E5 b. v# h8 C6 t  }
      (1)串口接收子程序
    $ ^3 B" ]& l( M2 _/ H3 u2 s6 N. P9 X/ E! I
      receive:
    * _9 G- |# n# n. D+ X8 h  {&nBSP; INPUT s0,UARTrxflag ;查询接收FIFO是否非空( s1 M  z5 W# c
      AND s0,01! b; E. ^) V% B- O8 b$ g
      AND s0,s0
    % n% j" `. D, d& y4 h  JUMP Z,receive ;若FIFO为空时继续查询
    ; P  W7 k% ~1 V6 B  INPUT rxdata,uartrx ;若FIFO非空时读取数据( \0 Y0 h  j$ A' [% D1 F
      return
    " s2 O1 }+ F# E  K# Z4 i- C! U" w6 u6 v; @
      (2)串口接收子程序
    , M5 N/ J- \$ B; k8 T! ~: C8 c5 L( I# g! @! t
      translate:) r7 c0 ^: h  h( s  H
      INPUT s0,uarttxflag ;查询发送FIFO是否为空, j* o9 z9 I2 t8 z8 K+ q1 Q
      AND s0,01
    + Z* C* }" \: f8 Y/ u9 w/ M( [, u  AND s0,s0
    & z) c0 O: w7 U* p, e2 I# c  JUMP NZ,translate ;若发送FIFO非空时继续查询! Y0 K9 Z' x  E6 _( {: @) C8 j
      OUTPUTtxdata,uarttx ;若发送FIFO为空时写入数据9 g% v. P) ]$ C- [+ j- O
      RETURN
    5 i& w  ~: l4 S- F# V
    " q, |4 S. J9 @  协议处理子程序
    . G5 W- Z4 N: x: ~$ }( L8 k0 Z! f) A2 N2 {6 b: k
      本文应用中的串口通信,采用应答机制,数据具有一定的帧结构,Picoblaze需要对命令帧进行拆包处理,并根据帧的内容进行相应的操作,然后发送响应帧。8 @, Q* ~3 F4 D
    7 T" |8 \0 e: z8 e* {0 \& R! d; T
    表1 通信数据的命令帧结构
    ! E, e# [6 |" p7 F3 A7 Y5 b ; G/ i5 M+ K2 z6 k# t# W0 Z/ I
    表2 通信数据的响应帧结构
    1 d" @$ i# w- l) i3 q8 \! p8 [

    , M  c0 Z4 d& f" y0 ^2 U& z根据帧格式,Picoblaze对串口数据的处理流程见图3。4 h/ i# E9 w& v5 V
    $ u! M/ f! Q3 T
    5 B2 n5 u8 L- T) l* o  \* L* ]
    $ |- |& `& i; z8 S7 E
      以上的Picoblaze程序流程所处理的数据帧结构是较为简单的,当需要处理复杂的通信协议时可以考虑采用多个Picoblaze并行处理。
    0 a6 F' E- y2 j8 G
    ! j0 M; M, D, X: U7 w  3 存储器接口设计
    0 s& }9 K& W% w+ k* j8 k' c1 G2 g1 J( _
      Picoblaze的优点是资源占用少,使用灵活,但可寻址的地址空间最多为256字节,无法满足对大量通信数据进行存储的需要。因此本文中采用了SDRAM器件来对Picoblaze的存储能力进行扩展。
    ) `; v. E) g) [: _6 a
    8 ~, v" e9 G2 ^" ~- u  SDRAM器件的管脚分为控制信号、地址和数据三类。通常一个SDRAM中包含几个BANK,每个BANK的存储单元是按行和列寻址的。SDRAM的具体特性见参考文献[3]。
    : \" F. D: o  e6 r8 Y! j
    ; b" Q- e( j3 ]. K+ B( W, c    SDRAM在使用时需要专用的控制器来产生满足SDRAM所需的信号。FPGA中SDRAM控制器也有多种IP核可以选用。出于对设计通用性的考虑,本文中采用了一款ALTEra提供的SDRAM控制器IP核,并增加了必要的设计以满足与Picoblaze的接口要求。SDRAM控制器IP核的功能、原理见参考文献[4]。/ u0 x4 q/ C/ S' ]) V/ k/ I; R6 \
    + }( V! t1 b% y2 [
      对Picoblaze与SDRAM控制器的接口设计有以下几个出发点:( m) e6 O, }4 ]' r, ^
    - k, R8 O0 N( J
    , _% ?" y9 c) K* N
      总线匹配
    ; }; R7 x& K( S8 H: d0 M
      _5 j& b3 i0 n: u  Picoblaze为8位处理器,数据线仅8bit,而SDRAM控制器总线宽度与SDRAM相同,可以为8、16或32bit。因此对于SDRAM控制器的数据Picoblaze必须以字节为单位进行处理。
    ' E  f7 g# k* V* g6 @  B: I  y9 ^1 e8 _- ~5 o# R3 Q
      地址控制, I" @3 v0 k# ?/ U1 W

    9 S3 z0 d0 g6 f5 ?8 X  Picoblaze地址线仅8位,无法直接对SDRAM进行寻址。因此Picoblaze对SDRAM的寻址可借鉴先入先出存储器FIFO的设计,即设计专门的地址计数器,通过地址计数器实现对SDRAM的寻址。
    / ^# J8 g7 \* \3 q  I, Y) d/ L; @- j' \: \
      时序匹配
    % A, ?, [- B# X  J: s- {  L* E
    ( w, b( e+ y# c( l. [/ p  Picoblaze的运行速度不超过40MHz,而SDRAM的工作速度通常大于100MHz。因此为了满足SDRAM的时序要求,要增加必要的缓冲机制。
    ; T) W% U; k- P' v9 ^
    , T8 S5 z0 r. X  3.1存储器接口硬件设计7 ^; R% w) T4 J1 b+ z+ `
    : H4 t+ Q# n4 Z/ O5 ~
      Picoblaze与SDRAM存储器接口的硬件原理框图见图4。. A' C( x# \% i  n( L5 k, D
    ) c6 h+ @) y8 k0 V' h

    4 ^2 c/ Z' l# L+ @8 S2 f3 c& m% ~% b8 G2 W1 \% Z0 C9 m
      控制状态机控制的地址计数器为SDRAM控制器提供地址,同时控制状态机还控制输入数据缓冲区和输出数据缓冲区,并且根据Picoblaze的地址端口数据和读/写使能信号产生SDRAM控制器的命令字。( ?) k* Z) ], w5 ]! u

    . O' L, V* b% m9 g/ S" ]6 |8 K1 m6 q0 r0 J  (1)SDRAM初始化
    5 V1 l4 J4 C! x# P
    ; Y# F( r( q( C. |  每次加电或复位后控制状  
    ( g1 F/ e0 D7 C" t态机执行对SDRAM控制器的初始化操作,设置SDRAM的时间参数和刷新周期等。
    $ K; V. B( ]& H, B  @3 S1 f; Z) p3 j
      (2)数据写入SDRAM
    # {6 `" G8 F! O: u0 i
    7 z* k( H5 ~$ n/ u  输出数据缓冲区由16×8bit的FIFO构成,当Picoblaze向输出数据缓冲区写入超过8个字节后,通过“半满”信号使控制状态机进入SDRAM的长度为8的突发写模式,在写入完成后控制状态机将地址计数器增加8,以准备好下一次的写入。, e! h# K8 o* q5 W& _( x
    ( o* z% \$ u. N9 t
      (3)数据读取
    1 q! v3 C6 P( f* d% Z- [4 }
    : o% Y0 {4 q# v3 J9 T  数据读取时Picoblaze首先向控制状态机发送读取请求,控制状态机进入SDRAM的长度为1的突发读模式,并将读取的数据写入输入数据缓冲区,此后Picoblaze再由输入数据缓冲区中读取数据。在读取后,地址计数器做相应的增加,以实现先入先出功能。4 X' r/ F4 N, |3 [$ x

    : w3 O' L1 H( f: X( M  以上的设计方法适用于需要数据连续写入后再连续读取的场合。
    0 d4 g- [1 ?- `2 }* U8 C9 `8 S: g- n, z+ n1 D9 J. K' z
      控制状态机状态图见图5。5 W9 t) W2 L7 f; _( O  y/ k
    4 [) u4 I) m! ?& l1 [0 d9 ?4 E
    3.2存储器接口软件设计
    1 O! M1 B% ~1 L0 f' K7 W* {( M9 N9 J6 K
    2 @8 A) w5 a8 x2 ]5 r  由于在SDRAM控制器与Picoblaze之间增加了控制状态机,简化了Picoblaze的程序设计。
    ! q2 \8 R6 V: L7 l
    + [* Y& e# d1 `  Y$ e1 }  (1)数据写入
    - R% o" l: x4 s* x$ {! g7 a
    ) C; P  o3 V7 C  数据写入时Picoblaze向输出数据缓冲区直接写入数据即可。( S4 G' l+ n/ [

    9 z. U. ^4 _9 \& Z8 Z* a  (2)数据读取& _. x  I1 @% f  j1 j1 c" U

    * L( z& t3 }, Z' p0 n0 r  数据读取时Picoblaze首先向控制状态机发出请求,然后等待输入数据缓冲区的数据准备就续后再读取。: {5 ^  }/ |, k( n6 K

    # `2 r: s7 D; ^2 x1 ]( u) k( g  4 结论
    1 d/ r/ _' x& c7 T% _" g8 K: l' Q, w' K
      本文在XILINX FPGA中采用嵌入式处理器Picoblaze进行SOC设计,以较少的硬件资源实现了对串口通信数据的处理,同时采用SDRAM器件对Picoblaze的存储能力进行扩展。所采用的设计已应用于多个产品中。经过了长期的使用和测试证明文中的设计方法稳定、可靠,并且具有资源占用少,设计灵活的优点。3 @# }. ^8 B" i; h" [
    游客,如果您要查看本帖隐藏内容请回复
    2 c3 a" V. E  j

    该用户从未签到

    3#
    发表于 2022-10-18 17:19 | 只看该作者
    基于FPGA的SOC系统中的串口优质设计

    该用户从未签到

    4#
    发表于 2022-10-19 20:17 | 只看该作者
    基于FPGA的SOC系统中的串口优质设计
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-31 21:01 , Processed in 0.203125 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表