日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA SPI协议

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA SPI协议 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本篇主要介紹SPI協(xié)議在FPGA內部的實現(xiàn),如何使用Verilog語言來搭建硬件描述電路,通過一款SPI通信協(xié)議的芯片ADC128S022來具體講解,ADC128S022是一款AD轉換芯片,具有8通道。
B站對應講解本文視頻鏈接

SPI概念:

SPI(Serial Peripheral Interface,串行外設接口)是Motorola公司提出的一種同步串行數(shù)據(jù)傳輸標準,在很多器件中被廣泛應用。

接口:
SPI接口經常被稱為4線串行總線,以主/從方式工作,數(shù)據(jù)傳輸過程由主機初始化。如圖1所示,其使用的4條信號線分別為:

  • SCLK:串行時鐘,用來同步數(shù)據(jù)傳輸,由主機輸出;
  • MOSI:主機輸出從機輸入數(shù)據(jù)線,通常先傳輸MSB;
  • MISO:主機輸入從機輸出數(shù)據(jù)線,通常先傳輸LSB;
  • SS:片選線,低電平有效,由主機輸出。
    在SPI總線上,某一時刻可以出現(xiàn)多個從機,但只能存在一個主機,主機通過片選線來確定要通信的從機。這就要求從機的MISO口具有三態(tài)特性,使得該口線在器件未被選通時表現(xiàn)為高阻抗。
  • ADC128S022具體時序:

    該接口使用標準的SPI 接口,因此可以直接連接到微控制器的片上SPI。對于FPGA 來說,則可按照 SPI 時序搭建控制電路,以實現(xiàn)對ADC128S022 的控制。

    特別要注意一下兩個的時序,DIN在SCLK的上升沿輸入,DOUT在SCLK的下降沿輸出,也就是說說DIN是在SCLK的下降沿改變,DOUT是在SCLK的上升沿改變。
    借助器件的時序圖就可以具體來實現(xiàn)對器件的寫入和輸出數(shù)據(jù)了。

    ADC128S022具體實現(xiàn)(線性序列機):

    此處借鑒小梅哥FPGA

    該接口的時序是一個很有規(guī)律的序列,SCLK 信號什么時候該由低變高,什么時候由高變低。DIN 信號什么時候該傳輸哪一位數(shù)據(jù),都是可以根據(jù)時序參數(shù)唯一確定下來的。 這樣就可以將該數(shù)據(jù)波形放到以時間為橫軸的一個二維坐標系中,縱軸就是每個信號對應的狀態(tài)。因此只需要在邏輯中使用一個計數(shù)器來計數(shù),然后每個計數(shù)值時就相當于在t 軸上對應了一個相應的時間點,那么在這個時間點上,各個信號需要進行什么操作,直接賦值即可。

    按照線性序列機的設計思路,可以整理得到每個信號發(fā)生變化時對應的時刻
    以及此時對應的計數(shù)器的值。表為依照線性序列機的設計思想,整理得到的每個信號發(fā)生變化時對應的時刻以及此時對應的計數(shù)器的值。其中CS_N 為芯片狀態(tài)標志信號,SCLK 為芯片時鐘輸入腳,DIN 為芯片串行數(shù)據(jù)輸入,DOUT為芯片串行數(shù)據(jù)輸出。


    ADC128S022 接口邏輯模塊圖如圖所示:

    代碼:

    //序列機實現(xiàn)ADC串行數(shù)據(jù)接口的數(shù)據(jù)發(fā)送和接收 always@(posedge Clk or negedge Rst_n)if(!Rst_n)beginADC_SCLK <= 1'b1;ADC_CS_N <= 1'b1;ADC_DIN <= 1'b1;end else if(en) beginif(SCLK2X)begincase(SCLK_GEN_CNT)6'd0:begin ADC_CS_N <= 1'b0; end6'd1:begin ADC_SCLK <= 1'b0; ADC_DIN <= 1'b0; end6'd2:begin ADC_SCLK <= 1'b1; end6'd3:begin ADC_SCLK <= 1'b0; end6'd4:begin ADC_SCLK <= 1'b1; end6'd5:begin ADC_SCLK <= 1'b0; ADC_DIN <= r_Channel[2];end //addr[2]6'd6:begin ADC_SCLK <= 1'b1; end6'd7:begin ADC_SCLK <= 1'b0; ADC_DIN <= r_Channel[1];end //addr[1]6'd8:begin ADC_SCLK <= 1'b1; end6'd9:begin ADC_SCLK <= 1'b0; ADC_DIN <= r_Channel[0];end //addr[0]//每個上升沿,寄存ADC串行數(shù)據(jù)輸出線上的轉換結果6'd10,6'd12,6'd14,6'd16,6'd18,6'd20,6'd22,6'd24,6'd26,6'd28,6'd30,6'd32:begin ADC_SCLK <= 1'b1; r_data <= {r_data[10:0], ADC_DOUT}; end //循環(huán)移位寄存DOUT上的12個數(shù)據(jù)6'd11,6'd13,6'd15,6'd17,6'd19,6'd21,6'd23,6'd25,6'd27,6'd29,6'd31:begin ADC_SCLK <= 1'b0; end6'd33:begin ADC_CS_N <= 1'b1; enddefault:begin ADC_CS_N <= 1'b1; end //將轉換結果輸出endcaseendelse ;end else beginADC_CS_N <= 1'b1;end

    modelsim仿真:

    同理,無論是SPI協(xié)議還是其他例如UART還是IIC協(xié)議都是一樣的,實現(xiàn)器件的功能只需要去尋找所用的器件,然后根據(jù)器件中所給的時序圖,通過時序給器件發(fā)送和接收指令,實現(xiàn)控制各種器件,有不明白的,或者想要各種參考資料的可以聯(lián)系博主QQ:2859340499.

    總結

    以上是生活随笔為你收集整理的FPGA SPI协议的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。