女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

常用串行總線——SPI協議(下)

jf_78858299 ? 來源: Cascatrix ? 作者:Carson ? 2023-01-21 17:03 ? 次閱讀

2. 從模塊(SPI_slave):

module spi_slave(

input           rst_n,

input           cs_n,

input           sclk,

input           mosi,



output          miso,

output [7:0]    reg0_out,

output [7:0]    reg1_out,

output [7:0]    reg2_out,

output [7:0]    reg3_out

);

reg miso_r;

reg [7:0] reg1_out_r;

reg [7:0] reg2_out_r;

reg [7:0] reg3_out_r;

reg [7:0] reg0_out_r;

reg start;

reg wr_rd;

reg [3:0] bit_cnt;

reg [6:0] reg_addr;

reg [7:0] reg_data;

parameter reg0_address = 7'b0000000; //address of reg0

parameter reg1_address = 7'b0000001; //address of reg1

parameter reg2_address = 7'b0000010; //address of reg2

parameter reg3_address = 7'b0000011; //address of reg3

//start

always @ (posedge sclk or negedge rst_n)

begin

if(~rst_n)

start <= 1'b0;

else

start <= 1'b1;

end

//bit_cnt

always @ (posedge sclk or negedge rst_n)

begin

if(~rst_n)

bit_cnt <= 4'b0;

else if(start)

bit_cnt <= bit_cnt + 1'b1;

end

//wr_rd

always @ (posedge sclk or negedge rst_n)

begin

if(~rst_n)

wr_rd <= 1'b0;

else if(bit_cnt == 4'b0 && mosi == 1'b0)

wr_rd <= 1'b0;

else if(bit_cnt == 4'b0 && mosi == 1'b1)

wr_rd <= 1'b1;

end

//reg_addr

always @ (negedge sclk or negedge rst_n)

begin

if(~rst_n)

reg_addr <= 7'b0;

else if(bit_cnt >= 4'd1 && bit_cnt <= 4'd7)

reg_addr <= {reg_addr[5:0],mosi};

end

//reg_data

always @ (posedge sclk or negedge rst_n)

begin

if(~rst_n)

reg_data <= 8'b0;

else if(!wr_rd && bit_cnt >= 4'd7)

reg_data <= {reg_data[6:0],mosi};

else if(wr_rd && bit_cnt == 4'd6)

reg_data <= reg2_out_r;

else if(wr_rd && bit_cnt >= 4'd7)

reg_data <= {reg_data[6:0],reg_data[7]};

end

//reg_out

assign reg0_out = reg0_out_r;

assign reg1_out = reg1_out_r;

assign reg2_out = reg2_out_r;

assign reg3_out = reg3_out_r;

always @ (negedge sclk or negedge rst_n)

begin

if(~rst_n)

begin

reg0_out_r <= 8'b0;

reg1_out_r <= 8'b0;

reg2_out_r <= 8'b0;

reg3_out_r <= 8'b0;

end

else if(!wr_rd && bit_cnt == 4'd0)

case(reg_addr)

reg0_address: reg0_out_r <= reg_data;

reg1_address: reg1_out_r <= reg_data;

reg2_address: reg2_out_r <= reg_data;

reg3_address: reg3_out_r <= reg_data;

endcase

end

//miso

assign miso = miso_r;

always @ (negedge sclk or posedge rst_n)

begin

if(~rst_n)

miso_r <= 1'b0;

else if(wr_rd && bit_cnt >= 4'd7)

miso_r <= reg_data[7];

end

endmodule

3. Testbench(tb):

`timescale 1us/1us

module tb();

regclk_40k;

regrst_n;

reg [7:0] data_in;

regsend_start;

wiresclk;

wirecs_n;

wiremosi;

wiremiso;

wire [7:0] data_out;

wire data_out_vld;

wire [7:0] reg0_out;

wire [7:0] reg1_out;

wire [7:0] reg2_out;

wire [7:0] reg3_out;

spi_master i_spi_master(

.clk_40k          (clk_40k),     

.rst_n              (rst_n),

.data_in          (data_in),

.send_start     (send_start),

.sclk               (sclk),

.cs_n              (cs_n),

.mosi              (mosi),

.miso              (miso),

.data_out        (data_out),  

.data_out_vld (data_out_vld)

);

spi_slave i_spi_slave(

.rst_n            (rst_n),       

.cs_n             (cs_n),

.sclk             (sclk),        

.mosi            (mosi),      

.miso            (miso),      

.reg0_out      (reg0_out), 

.reg1_out      (reg1_out), 

.reg2_out      (reg2_out), 

.reg3_out      (reg3_out)

);

initial

begin

rst_n = 1'b0;

#10rst_n = 1'b1;

end

initial

begin

clk_40k = 1'b0;

forever

#1clk_40k = ~clk_40k;

end

initial

begin

send_start = 1'b0;

data_in = 8'd0;

forever

begin

    #200;

    data_in = $random()%256;

    send_start = 1'b1;

    #2

    send_start = 1'b0;

    #8000;

end

end

endmodule

4. 仿真結果:

按照testbench對SPI主從設備進行仿真,仿真結果如圖:

圖片

  1. 系統時鐘和SPI時鐘不一致,clk_40k為高頻系統時鐘,利用計數器分頻實現1k波特率SPI時鐘;
  2. 復位信號rst_n低電平有效,正常傳輸時始終處于高電平;
  3. 開始傳輸時send_start信號拉高,傳輸結束時data_out_vld信號拉高;
  4. SPI主設備將輸入數據data_in并行轉mosi串行輸出,SPI從設備將接收到的串行存入數據,將移位后的數據data_out并行轉miso串行輸出。

05

SPI的優缺點

5.1 SPI協議優點

  1. 全雙工同步串行通信
  2. 允許數據逐位傳遞;
  3. 允許數據傳輸暫停;
  4. 硬件結構簡單,不需要精密時鐘;
  5. 從機不需要唯一地址,也不需要收發器

5.1 SPI協議缺點

  1. 需要4個引腳接口
  2. 支持傳輸距離較短;
  3. 硬件層面沒有定義校錯協議和從機應答信號。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17855

    瀏覽量

    360827
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1784

    瀏覽量

    94827
  • 串行端口
    +關注

    關注

    0

    文章

    35

    瀏覽量

    11890
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    常用的串口通信協議SPI協議簡析

    SPI(serial peripheral interface)也是一種同步串行通信協議。這里為啥要說“也”呢,回想上一篇介紹的PS/2不也是同步串行通信
    發表于 07-07 09:33 ?4669次閱讀

    常用串行總線協議有哪些

    一、常用串行總線協議目前常用的微機與外設之間進行數據傳輸的串行
    發表于 11-03 07:14

    SPI總線協議介紹及硬件設計資料分享

    typora-copy-images-to: typora_picture基于FPGA與MCU通信的SPI協議設計1. SPI總線協議介紹及
    發表于 11-10 07:06

    常用串行總線協議有哪些

    常用串行總線協議I2C總線SPI總線、SCI
    發表于 11-19 06:46

    常用串行擴展總線有哪些呢

    常用串行擴展總線有:I2C總線SPI總線,單總線
    發表于 01-11 08:15

    SPI協議的作用介紹

    目錄SPI協議簡介SPI物理層SPI協議SPI協議
    發表于 02-17 07:02

    介紹一SPI協議

    硬件接口協議在芯片是被廣泛使用的,上篇博文詳細介紹了I2C協議,這次來介紹一spi協議。一、SPI
    發表于 02-17 07:44

    SPI、I2C、UART三種串行總線協議的區別

    SPI、I2C、UART三種串行總線協議的區別
    發表于 07-17 17:23 ?0次下載

    一文介紹SPI串行總線

    SPI協議是由摩托羅拉公司提出的通訊協議(SerialPeripheralInterface),即串行外圍設備接口,是一種高速全雙工的通信總線
    發表于 07-16 17:58 ?3172次閱讀
    一文介紹<b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>總線</b>

    基于SPI串行總線接口的Verilog實現

    簡 介: 集成電路設計越來越向系統級的方向發展,并且越來越強調模塊化的設計。SPI(Serial Peripheral Bus)總線是Motorola公司提出的一個同步串行外設接口,容許CPU
    的頭像 發表于 05-29 10:16 ?5407次閱讀
    基于<b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>總線</b>接口的Verilog實現

    基于FPGA與MCU通信的SPI協議設計

    typora-copy-images-to: typora_picture基于FPGA與MCU通信的SPI協議設計1. SPI總線協議介紹及
    發表于 11-05 15:35 ?16次下載
    基于FPGA與MCU通信的<b class='flag-5'>SPI</b><b class='flag-5'>協議</b>設計

    SPI協議

    目錄SPI協議簡介SPI物理層SPI協議SPI協議
    發表于 12-22 19:17 ?34次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>協議</b>

    spi協議介紹

    硬件接口協議在芯片是被廣泛使用的,上篇博文詳細介紹了I2C協議,這次來介紹一spi協議。一、SPI
    發表于 12-22 19:21 ?19次下載
    <b class='flag-5'>spi</b><b class='flag-5'>協議</b>介紹

    常用串行總線(二)——SPI協議(Verilog實現)

    SPI(Serial Perripheral Interface, 串行外圍設備接口)是 Motorola 公司推出的一種同步串行接口技術。SPI
    的頭像 發表于 01-06 14:35 ?9601次閱讀

    常用串行總線——SPI協議(上)

    SPI(Serial Perripheral Interface, 串行外圍設備接口)** 是 Motorola 公司推出的一種同步串行接口技術。SPI
    的頭像 發表于 01-21 17:00 ?1706次閱讀
    <b class='flag-5'>常用</b><b class='flag-5'>串行</b><b class='flag-5'>總線</b>——<b class='flag-5'>SPI</b><b class='flag-5'>協議</b>(上)