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

FPGA设计中,对SPI进行参数化结构设计

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-5-7 16:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
今天给大侠带来FPGA设计中,对SPI进行参数化结构设计,话不多说,上货。

& d9 H1 e# H& d! d% ^3 W
7 ^: C6 ^1 H" Z* H/ H
( C! J1 w$ E/ x" w1 g. n

; r0 f9 `/ C: L  z$ T/ e/ R) x

" V' I5 R) D# s; q: l" w; ]
        为了避免每次SPI驱动重写,直接参数化,尽量一劳永逸。SPI master有啥用呢,你发现各种外围芯片的配置一般都是通过SPI配置的,只不过有三线和四线。SPI slave有什么用呢,当外部主机(cpu)要读取FPGA内部寄存器值,那就很有用了,FPGA寄存器就相当于RAM,cpu通过SPI寻址读写数据。代码仅供参考,勿做商业用途。

% P- Y4 n5 q5 r9 Z* Z  r/ L! Z
- {& l# h7 i- x& t2 K- L5 y# o8 W
5 w% t! B# F# y+ i# z
- V% U* Q. z2 T9 h5 U' i* F

0 Q9 T6 e- o* X1 ?) M1 }/ {

SPI salve


$ A7 {; ]( O2 f7 o% z. d

SPI salve支持功能:

1 Q5 D$ }) r6 @% y/ O3 e

     支持三线SPI或者四线SPI。通过define切换。                                 

: D  P0 ?& l3 Q& R) }
     支持指令长度、帧长自定义。                              

& g+ [( \1 F. _, {' X3 W
     工作时钟可自定义,大于SPI clk的2倍。
' L3 a8 N5 d5 M6 \1 M: h

9 y6 y* z3 Q6 u+ O9 G$ m3 C
! g; Z" n+ H2 ~9 F# s1 O

$ Q" U4 k8 J% q6 u* e+ ~2 S# Y

用户只需修改:

. a8 B  _( ]/ _

(1)几线SPI。

(2)单帧长度。

(3)指令长度。

(4)寄存器开辟。


' Z) d: p" c/ G

注意:指令最高bit表示读写,低写高读,其余bit表示地址。指令接着为数据端,两者位宽之和即为SPI单帧长。


5 ~. b) q2 C$ p


2 P+ W8 D9 D( u& `+ j

# @( r7 g) m' Q6 ?, H+ \


4 r; X+ ^6 b* q5 {* h! A. ], J

: k/ I% p; h9 Z8 D" Y

SPI master


8 L. y8 W& r2 B* k: {! U
" n5 o' n/ ?4 }4 H8 v

spi master内部仅仅封装SPI驱动,写入值读出控制由上层控制,这部分逻辑很simple,不赘述。用户只需给入SPI帧及控制使能即可。


# W- ^: X/ z! b! J

用户只需修改parameter参数:

9 R) N: m5 I1 v  `2 z4 K- G

(1)单帧长;

(2)指令长;

(3)数据长;

(4)工作时钟;

(5)SPI clk。


2 F5 \. V, A; J' Z% _, e* |

1 ?) a, l2 A- d: R& }

实现不使用状态机,采用线性序列计数法。

6 Q' C, D6 ~$ |* \  a+ _! `

# L( d" |: L8 b! z4 G

3 w8 Z& W6 d# _2 e1 w) B+ f& q


2 m! {6 H8 o" E4 g: r" v


- ]. L+ U* V# b# \& K' v2 G% p


- ?% x, \- S8 ]- ~/ V, s! Y

仿真如下所示:写入四个寄存器值,再读出。


& O% F  ~  J4 V

% T3 O& _/ g2 \9 X& o

仿真代码如下:

5 w( ^" z; U7 ?; [+ r: z1 j

. O! a2 r& u6 ^8 n6 @2 i


% ^6 E2 k) V2 u5 U% V: ?) W# K7 T

, H$ N- n% ^# X7 T* N" @

/ U  u) M2 ^' H& F/ p/ o

三线SPI:

1 [4 d+ @0 q0 u  C( a: z$ S


1 E. L7 f/ Z1 ^, \1 N1 m1 }

% g/ k( ~. c9 ^2 c4 b0 m


& b5 r' k& f, \! v


0 t, [! k& a% Q& w  f( z2 P


* a3 e! T, C9 {+ n+ n4 p: c


7 ]) _8 |6 }: t

四线SPI:


; X; [" x& h& R, _

5 i& X2 h+ V: x: J( s

1 g3 {8 t( d1 M& e# c

' q5 P/ p- X0 ]# Z( P$ h


* k/ M# _$ W7 r3 r) I* [" v+ O

可以看到读写是一致的,验证通过。

7 D1 e0 x. k' L8 `& B' E/ n) W

该用户从未签到

2#
发表于 2024-5-7 18:15 | 只看该作者
程序写的很规范

该用户从未签到

3#
 楼主| 发表于 2024-8-29 19:26 | 只看该作者
              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 02:10 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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