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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
今天给大侠带来FPGA设计中,对SPI进行参数化结构设计,话不多说,上货。
; [6 K+ x7 v! x2 _8 O4 b

: W! P6 [' s1 _6 v" H

/ v% Y. x0 g1 B" X" b+ f
2 {: a0 z  |+ t# f! z

" v6 C% L% u1 T- n+ r4 E
        为了避免每次SPI驱动重写,直接参数化,尽量一劳永逸。SPI master有啥用呢,你发现各种外围芯片的配置一般都是通过SPI配置的,只不过有三线和四线。SPI slave有什么用呢,当外部主机(cpu)要读取FPGA内部寄存器值,那就很有用了,FPGA寄存器就相当于RAM,cpu通过SPI寻址读写数据。代码仅供参考,勿做商业用途。

" n# G& t. ?. y" t' ~% @
/ V; B5 S0 {6 V9 ?" T3 ~
& U& }' p" T& `$ X* Q7 V  t

4 A6 i. X" C# Q# m1 Q) w# ]$ P& b" Z& @5 W

SPI salve


8 H' U, Q, K$ O: A& N

SPI salve支持功能:


" y) U2 `  F/ Y. \

     支持三线SPI或者四线SPI。通过define切换。                                 
: {! }; I5 g( W- _9 s8 k+ y0 M. @
     支持指令长度、帧长自定义。                              

1 m4 q% p' c+ ]% K4 x6 w
     工作时钟可自定义,大于SPI clk的2倍。

2 i& d+ N0 M# |' P( t6 K. r7 D1 f9 Z0 A$ o
1 e$ [# j6 D7 Q$ ~  c


, m. Q9 c/ m/ l3 _$ `

用户只需修改:


3 K' X& F+ F' y+ ]! o0 W0 S

(1)几线SPI。

(2)单帧长度。

(3)指令长度。

(4)寄存器开辟。

2 U8 _+ r8 Q! P! j

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

' r6 h& K% K/ f- L9 t! o$ M


3 [5 o) T1 h4 l* H: P- o6 x


2 u; Z5 H, K5 a! `. J/ o* `


) _. Z9 s' F2 m* K

5 e2 j& r5 Z! F: w( z! a

SPI master


, }. M4 x! a0 C" J! U2 i4 \7 z3 F/ s0 d- I" F, J# K8 m+ {+ S/ q4 u

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

$ F  I5 G, @7 _) k! a( Q

用户只需修改parameter参数:

8 |2 [# ]) _' L: v8 w

(1)单帧长;

(2)指令长;

(3)数据长;

(4)工作时钟;

(5)SPI clk。

( I, ^, U; |( M: Z

9 }) F& l  e- E1 u( d7 G) X

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

) G- {: ?5 c$ [) d  M


! o: H7 U! S3 {- x$ @

" P' F) B* B( H* A5 C% ?, _

& q' c% C9 P! w6 m8 f2 z


3 b0 J) E; p% I/ @2 p7 I8 A

& T$ w* `0 f2 x

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


( ]; Q5 @* w1 L8 F: \

$ J, {$ G* o! J  y7 c

仿真代码如下:

7 ^; p, y! |* z: K' K  F

9 l' V6 G9 F1 N0 F  [- m1 }1 q% _

5 a3 p" V# w7 e& p/ q3 }( g( w! w


9 V9 r/ X0 W+ k* y* e7 m0 J, D4 t- \

* `4 \# X+ ?6 l  s6 K! Q

三线SPI:

5 B: h. |/ `. M3 y) ~4 v, `! N8 v% Z

6 _2 h& r* I. S+ j9 J) w

1 |' j& s, |* |

1 a* R+ Z1 H7 |' u! H

/ Z. `* E6 b0 K6 v: M

* J' ]2 L' F  J( b& w

6 U1 A" k0 \: u) l! d) N2 I" ~

四线SPI:


& l" g# }' v" C3 v" l1 e


" \$ ]' K6 T7 j7 U8 @8 ]! ~. D

7 k+ A8 ]! r" d  I

' M% ]% h; a" l) ^

# {: k7 U: _; ~: M+ d5 P& \

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


/ Y+ _2 l+ L# ?" r& N/ i4 t: {1 H

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-4 21:43 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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