在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

spi master接口的fpga實(shí)現(xiàn)

FPGA之家 ? 來(lái)源:FPGA之家 ? 2024-11-16 10:35 ? 次閱讀

前言

當(dāng)你器件的引腳賊少的時(shí)候,需要主機(jī)和從機(jī)通信,spi就派上了用場(chǎng),它可以一對(duì)多,但只是片選到的從機(jī)能和主機(jī)通信,其他的掛機(jī)。

spi:serial peripheral interface 串行外圍接口

大致了解:

2b14bc48-9080-11ef-a511-92fbcf53809c.png

spi是個(gè)同步協(xié)議,數(shù)據(jù)在master和slaver間交換通過(guò)時(shí)鐘sck,由于它是同步協(xié)議,時(shí)鐘速率就可以各種變換。

sck:主機(jī)提供,從機(jī)不能操控,從器件由主機(jī)產(chǎn)生的時(shí)鐘控制。數(shù)據(jù)只有在sck來(lái)了的上升沿或者下降沿才傳輸。

高級(jí)一點(diǎn)的spi芯片有配置寄存器,高級(jí)一點(diǎn)的工作有四種模式,采樣相位和sck空閑電平可配置。

當(dāng)然在這里我們主要實(shí)現(xiàn)簡(jiǎn)單的spi協(xié)議:sck是系統(tǒng)時(shí)鐘的四分頻,wr請(qǐng)求信號(hào)有效時(shí),主機(jī)開(kāi)始工作,數(shù)據(jù)位8bit,sck空閑時(shí)低電平,工作時(shí)第一個(gè)沿?cái)?shù)據(jù)傳輸。只有一個(gè)從機(jī),cs低電平片選。

2b39f580-9080-11ef-a511-92fbcf53809c.png

看下結(jié)構(gòu):

2b573bcc-9080-11ef-a511-92fbcf53809c.png

接口定義:

2b743664-9080-11ef-a511-92fbcf53809c.png

編碼實(shí)現(xiàn):(版權(quán)所有,請(qǐng)勿用于商業(yè)用途,僅供學(xué)習(xí)使用)

2b8b6154-9080-11ef-a511-92fbcf53809c.jpg

  1 //************************************************
  2 //  Filename      : spi_ms_test1.v
  3 //  Author        : Kingstacker
  4 //  Company       : School
  5 //  Email         : kingstacker_work@163.com
  6 //  Device        : Altera cyclone4 ep4ce6f17c8
  7 //  Description   : spi master module;data 8bit;sck is 4 div of the clk;
  8 //************************************************
  9 module  spi_ms #(parameter WIDTH = 8)(
 10     //input;
 11     input    wire    clk,
 12     input    wire    rst_n,
 13     input    wire    wr, //send request;
 14     input    wire    [WIDTH-1:0]    master_din, //the data you want send;
 15     input    wire    miso, //the data form slave;
 16     //output;
 17     output   reg     cs, //slave select;
 18     output   reg     sck, //data exchange clock;
 19     output   reg     mosi,    //master out;
 20     output   reg     [WIDTH-1:0]    master_dout //the data you received;
 21 );
 22 localparam CLK_HZ = 50_000_000;  //clk frequency;
 23 localparam SCK_HZ = 12_500_000;  //sck frequency;
 24 localparam DIV_NUMBER = CLK_HZ / SCK_HZ;
 25 localparam CNT_MAX = (DIV_NUMBER >>1) - 1'b1;
 26 localparam DATA_CNT_MAX = 5'd31;
 27 localparam MOSI_CNT_MAX = 3'd7;
 28 localparam IDEL = 2'b00;
 29 localparam SEND = 2'b01;
 30 localparam FINISH = 2'b10;
 31 reg cnt; //sck cnt;
 32 reg sck_en; //enable sck;
 33 reg data_cnt_en;
 34 reg sck_reg1;
 35 reg sck_reg2;
 36 wire sck_p; //posedge sck;
 37 wire sck_n; //negedge sck;
 38 wire send_over;
 39 reg [1:0] cstate;
 40 reg [4:0] data_cnt; //cnt the send data;
 41 reg [2:0] mosi_cnt;
 42 reg [WIDTH-1:0] master_din_reg;
 43 reg [WIDTH-1:0] master_dout_reg;
 44 //produce sck;
 45 always @(posedge clk or negedge rst_n) begin
 46     if (~rst_n) begin
 47         cnt <= 0;
 48         sck <= 1'b0;
 49     end //if
 50     else begin
 51         if (sck_en == 1'b1) begin
 52             if (cnt == CNT_MAX) begin
 53                 cnt <= 0;
 54                 sck <= ~sck;
 55             end
 56             else begin
 57                 cnt <= cnt + 1'b1;
 58                 sck <= sck;
 59             end
 60         end
 61         else begin
 62             cnt <= 0;
 63             sck <= 1'b0;
 64         end
 65     end //else
 66 end //always
 67 //produce sck_p and sck_n;
 68 always @(posedge clk or negedge rst_n) begin
 69     if (~rst_n) begin
 70         sck_reg1 <= 1'b0;
 71         sck_reg2 <= 1'b0;
 72     end //if
 73     else begin
 74         sck_reg1 <= sck;
 75         sck_reg2 <= sck_reg1;
 76     end //else
 77 end //always
 78 assign sck_p = (sck_reg1 & (~sck_reg2)); //sck posedge;
 79 assign sck_n = ((~sck_reg1) & sck_reg2); //sck negedge;
 80 //fsm;hot code;
 81 always @(posedge clk or negedge rst_n) begin
 82     if (~rst_n) begin
 83         cstate <= IDEL;
 84     end
 85     else begin
 86         case (cstate)
 87             IDEL:    cstate <= (wr)? SEND : IDEL;
 88             SEND:    cstate <= (send_over) ? FINISH : SEND;
 89             FINISH:  cstate <= IDEL;
 90             default: cstate <= IDEL;
 91         endcase //case
 92     end
 93 end
 94 always @(posedge clk or negedge rst_n) begin
 95     if (~rst_n) begin
 96         cs <= 1'b1;
 97         data_cnt_en <= 1'b0;
 98         sck_en <= 1'b0;
 99         master_din_reg <= 0;
100         master_dout <= 0;
101     end
102     else begin
103         case (cstate)
104             IDEL: begin
105             data_cnt_en <= 1'b0;
106             master_din_reg <= (wr) ? master_din : master_din_reg; //load the data you want send to slaver;
107             end 
108             SEND: begin
109                 data_cnt_en <= 1'b1;
110                 cs <= 1'b0;
111                 sck_en <= 1'b1;
112                 master_dout <= (send_over) ? master_dout_reg : master_dout; //master receiverd data;
113             end
114             FINISH: begin                  //send and load ok;
115                 sck_en <= 1'b0;
116                 cs <= 1'b1;
117                 data_cnt_en <= 1'b0;
118             end
119             default: begin
120                 cs <= 1'b1;
121                 sck_en <= 1'b0;
122                 data_cnt_en <= 1'b0;
123             end
124         endcase //case
125     end
126 end
127 always @(posedge clk or negedge rst_n) begin
128     if (~rst_n) begin
129         data_cnt <= 0;
130     end
131     else begin
132         data_cnt <= (data_cnt_en) ? (data_cnt + 1'b1) : 5'd0; //4 div * 8bit = 32 cnt;
133     end
134 end
135 assign send_over = (data_cnt == DATA_CNT_MAX) ? 1'b1 : 1'b0;
136 //rising edge miso;
137 always @(posedge clk or negedge rst_n) begin
138     if (~rst_n) begin
139         master_dout_reg <= 0;
140     end
141     else begin
142         master_dout_reg <= (sck_p) ? {master_dout_reg[6:0],miso} : master_dout_reg;
143     end
144 end
145 //mosi;
146 always @(posedge clk or negedge rst_n) begin
147     if (~rst_n) begin
148         mosi_cnt <= 0;
149     end
150     else begin
151         if (sck_n) begin
152             if (mosi_cnt == MOSI_CNT_MAX) begin
153                 mosi_cnt <= 0;
154             end
155             else begin
156                 mosi_cnt <= mosi_cnt + 1'b1;
157             end
158         end
159         else begin
160             mosi_cnt <= mosi_cnt;
161         end
162     end
163 end
164 always @(posedge clk or negedge rst_n) begin
165     if (~rst_n) begin
166         mosi <= 1'b0;
167     end
168     else begin
169         mosi <= (sck_n) ? master_din_reg[MOSI_CNT_MAX-mosi_cnt] : mosi;
170     end
171 end
172 endmodule

2b8b6154-9080-11ef-a511-92fbcf53809c.jpg

仿真

2ba1fd60-9080-11ef-a511-92fbcf53809c.png

綜合資源使用:

2bbb251a-9080-11ef-a511-92fbcf53809c.png

Fmax:

2bc6c29e-9080-11ef-a511-92fbcf53809c.png

以上。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21736

    瀏覽量

    603384
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8598

    瀏覽量

    151156
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1706

    瀏覽量

    91581

原文標(biāo)題:spi master接口的fpga實(shí)現(xiàn)

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)可以用FX3作為SPIMaster,通過(guò)GPIF II接口實(shí)現(xiàn)SPI通信嗎?

    你好,我有一塊 CYUSBKIT-003 電路板,我正在研究它。 1.為了學(xué)習(xí)GPIF II接口的使用,我想用FX3的GPIF II實(shí)現(xiàn)SPI通信。請(qǐng)問(wèn)可以用FX3作為SPI
    發(fā)表于 05-29 07:46

    FPGA設(shè)計(jì)實(shí)例】基于FPGASPI接口應(yīng)用

    可用于FPGA和其它芯片之間來(lái)實(shí)現(xiàn)簡(jiǎn)單而有效的溝通。SPI的項(xiàng)目第1部分:什么是SPI?第2部分:一個(gè)簡(jiǎn)單的實(shí)現(xiàn)第3部分:應(yīng)用程序【
    發(fā)表于 03-26 15:47

    FPGA實(shí)現(xiàn)SPI接口(包括主機(jī)和從機(jī)程序)

    本帖最后由 eehome 于 2013-1-5 09:47 編輯 fpga實(shí)現(xiàn)spi接口FPGA實(shí)
    發(fā)表于 08-11 18:07

    SPI接口初始化函數(shù)spi_master_init

    有誰(shuí)知道SPI接口初始化函數(shù)spi_master_init 和 SPI接口數(shù)據(jù)傳送函數(shù)SPI_T
    發(fā)表于 04-03 09:16

    基于FPGASPI接口設(shè)計(jì)方法

    下得到了正確的結(jié)果。5、結(jié)束語(yǔ)隨著半導(dǎo)體技術(shù)的進(jìn)步,FPGA 的價(jià)格越來(lái)越便宜, 工作頻率越來(lái)越高,使用FPGA 實(shí)現(xiàn)SPI 通信 接口是切
    發(fā)表于 05-28 05:00

    怎么使用FPGA實(shí)現(xiàn)SPI總線(xiàn)的通信接口

    隨著現(xiàn)代技術(shù)的發(fā)展,SPI接口總線(xiàn)已經(jīng)成為了一種標(biāo)準(zhǔn)的接口,由于協(xié)議實(shí)現(xiàn)簡(jiǎn)單,并且I/O資源占用少,為此SPI總線(xiàn)的應(yīng)用十分廣泛。目前,
    發(fā)表于 08-09 08:14

    如何去實(shí)現(xiàn)spiMaster端呢

    目標(biāo):實(shí)現(xiàn)spiMaster端。這篇文章講的非常直觀(guān)易懂,看完就明白了。 1、首先配置口線(xiàn),串口用來(lái)輸入和打印,四個(gè)io口用來(lái)模擬spi,原本準(zhǔn)備在一個(gè)單片機(jī)上同時(shí)模擬主從,但貌似不
    發(fā)表于 01-24 07:29

    SPI-4.2接口FPGA實(shí)現(xiàn)

    去偏移和包重組是在FPGA實(shí)現(xiàn)SPI-4.2接口的核心難點(diǎn),在分析偏移和包重組原理的基礎(chǔ)上,給出基于FPGA
    發(fā)表于 04-10 09:43 ?32次下載

    基于FPGASPI4.2接口設(shè)計(jì)

    本文介紹了一種FPGA和IPX2805之間的SPI4.2接口模塊設(shè)計(jì)的方法,對(duì)硬件設(shè)計(jì)進(jìn)行了說(shuō)明,著重闡述了FPGA內(nèi)部SPI4.2
    發(fā)表于 07-28 16:56 ?33次下載

    一種通用SPI接口FPGA設(shè)計(jì)與實(shí)現(xiàn)

    SPI 串行總線(xiàn)是一種常用的標(biāo)準(zhǔn)接口,其使用簡(jiǎn)單方便而且占用系統(tǒng)資源少,應(yīng)用相當(dāng)廣泛。本文將介紹一種新的通用的SPI 總線(xiàn)的FPGA 實(shí)現(xiàn)
    發(fā)表于 09-09 11:58 ?67次下載
    一種通用<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>的<b class='flag-5'>FPGA</b>設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    基于FPGASPI Master Interface設(shè)計(jì)

    依據(jù)SPI同步串行接口的通信協(xié)議, 設(shè)計(jì)一個(gè)可配置的、高度靈活的SPI Master 模塊,以滿(mǎn)足正常、異常及強(qiáng)度測(cè)試要求。利用Verilog 語(yǔ)言
    的頭像 發(fā)表于 11-05 17:42 ?1.1w次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>SPI</b> <b class='flag-5'>Master</b> Interface設(shè)計(jì)

    如何在FPGA實(shí)現(xiàn)SPI4.2接口

    偏移和包重組是在FPGA實(shí)現(xiàn)SPI一4.2接口的核心難點(diǎn),在分析偏移和包重組原理的基礎(chǔ)E,給出基于FPGA
    發(fā)表于 01-25 14:51 ?13次下載
    如何在<b class='flag-5'>FPGA</b>中<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>SPI</b>4.2<b class='flag-5'>接口</b>

    基于FPGASPI協(xié)議及設(shè)計(jì)實(shí)現(xiàn)

    基于FPGASPI協(xié)議及設(shè)計(jì)實(shí)現(xiàn)博主微信:flm13724054952,不懂的有疑惑的也可以加微信咨詢(xún),歡迎大家前來(lái)投稿,謝謝!引言介紹在電子通信領(lǐng)域里采用的通信協(xié)議有IIC,SPI
    發(fā)表于 11-05 19:05 ?24次下載
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>SPI</b>協(xié)議及設(shè)計(jì)<b class='flag-5'>實(shí)現(xiàn)</b>

    Gowin SPI Master/Slave IP用戶(hù)指南

    Gowin SPI Master 和 Slave IP 用戶(hù)指南主要包括功能簡(jiǎn)介、信號(hào)定義、 工作原理、GUI調(diào)用等,旨在幫助用戶(hù)快速了解Gowin SPI Master IP和Sl
    發(fā)表于 09-15 10:13 ?0次下載
    Gowin <b class='flag-5'>SPI</b> <b class='flag-5'>Master</b>/Slave IP用戶(hù)指南

    FPGA實(shí)現(xiàn)SPI

    FPGA實(shí)現(xiàn)SPI協(xié)議
    發(fā)表于 03-20 10:35 ?2次下載
    主站蜘蛛池模板: 日本口工福利漫画无遮挡| 伊人久久大香线蕉综合7| 亚洲婷婷六月| 久久99爰这里有精品国产| 天天射天天操天天色| 91大神在线精品视频一区| 特级淫片aaaaa片毛片| 爱爱欧美| 国内精品久久久久影院男同志| 午夜精品影院| 97青青| 额去鲁97在线观看视频| 色噜噜狠狠狠狠色综合久| 伊人操| 亚洲国产一区二区三区a毛片| 日本三级视频| 天天操一操| 嘿嘿嘿视频在线观看| 久久精品国产2020观看福利色 | 免费看黄资源大全高清| 精品热99| 国产精品三级在线播放| 网站国产| 日本中文在线三级在线播放| 偷操| av免费网站在线观看| 国产精品情人露脸在线观看| 欧美男人天堂网| 日韩啪啪片| 久久影视精品| 天堂免费在线视频| 天天摸天天碰成人免费视频| 超h 高h 污肉男男| 成人网在线看| 日本欧美一区二区三区视频| 狠狠色影院| 黄视频国产| 久久久久久综合| 欧美黑人性xxx猛交| 美女国产一区| 欧美在线区|