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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

0 P: T/ c* y6 }6 |2 y
( P" w/ b, \3 L  H0 G) g6 e1 \. B

: f$ X) e& W& ]) k) z% N/ {! J
9 M* Z8 z3 Y* i
& E0 c: L/ e2 ]" ?
        为了避免每次SPI驱动重写,直接参数化,尽量一劳永逸。SPI master有啥用呢,你发现各种外围芯片的配置一般都是通过SPI配置的,只不过有三线和四线。SPI slave有什么用呢,当外部主机(cpu)要读取FPGA内部寄存器值,那就很有用了,FPGA寄存器就相当于RAM,cpu通过SPI寻址读写数据。代码仅供参考,勿做商业用途。
5 O8 K+ A: v/ ?8 C! ?2 X# v

. L/ V  H( ~# X9 k- p8 h" z( C9 Q" Z7 I

( Y7 `; s4 x6 k9 O$ {
. q4 G) k$ b- B/ f  E3 Z: R7 I. ~3 x' p

SPI salve


0 [+ k: ?* V9 n& T( S+ n

SPI salve支持功能:

7 V' X0 ~3 h; h' R' L6 u' d) q

     支持三线SPI或者四线SPI。通过define切换。                                 
3 Q+ p' f! s. V$ B
     支持指令长度、帧长自定义。                              
" c$ i9 g: O0 X, W7 @& Y; ]
     工作时钟可自定义,大于SPI clk的2倍。
# e9 Z- g- Q; J

$ @' i1 x0 @/ r, q+ T# j. h1 X; G* [8 a# I

; y1 E7 G1 P2 P! w4 u6 g

用户只需修改:

% o3 {2 v( W. Y! g% G! M6 |

(1)几线SPI。

(2)单帧长度。

(3)指令长度。

(4)寄存器开辟。

3 l) ~+ v9 m& X/ t9 {

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


' A( ]* ]0 ^+ o( x- u3 l5 S

( V5 Z9 f; p8 W: j


: S/ G- q) c+ F! @


2 Q, y# c7 y+ V


5 I' n$ y# Z8 J5 f' k+ J4 h1 ?

SPI master

6 I$ ]2 x% x8 Q* x0 }# w, `

2 ^* T; t: M+ E( y& a& e$ n; P

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

! S$ @- Y2 [$ \7 E& ^; ]% ?# s! x

用户只需修改parameter参数:

/ g% t7 I5 D# V- f

(1)单帧长;

(2)指令长;

(3)数据长;

(4)工作时钟;

(5)SPI clk。

5 {5 M# ~1 x/ H' f. Q


' E8 g% w- n7 p) s1 Q( R

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

( Y- {* _* u5 N7 _


% o) \; y* C# C


4 R; w/ S! y' F

; A! \9 N) y  @9 N$ c


+ \% v1 t5 L) L4 Y5 z1 O

% S9 R2 X/ T8 c1 y

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


3 m& j5 b1 Y$ M9 o7 e

$ d( N% _) [& v

仿真代码如下:


) {+ p, Q% V3 y/ g5 \5 B4 Q


4 g' z  q6 s6 S. V" ~5 K! T/ A

. [4 E; f+ Y- |8 q: r5 D* q


, N) M/ E7 D6 R! O

2 M/ \  b; J, ]: ^) o- x& }8 O' E

三线SPI:


/ i3 s$ Y, K' }% d% D/ d' B. m, a


% U! a6 Z" z% b/ _; q% Q& ^

( e' z( ~& f  R& c

4 C4 D# `6 K& c8 Q


0 o9 @# W; h9 r+ N4 ]


) K' ~1 Q" v: c; Z3 X: \

8 ?  Z3 k8 S% o5 e6 [. I9 D

四线SPI:


" i3 D2 r& @+ D, n" }

" v; }8 B& v( g2 t; p2 h5 [& t

4 y& o; }; G* {$ t2 U


2 Y1 Z  X1 `' ]$ I" P- ]


1 ?2 Y. [  u) A( [) b

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

% D8 B% _, t& J2 n

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 07:51 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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