spi_mosi(rst,clk,rd,wr,datain,
spics、spiclk、spido、spidi、data out);
投入
rst
//設置信號,低電平有效
投入
clk
//時鐘信號
投入
rd;
//接收數據命令
投入
wr;
//發送數據命令
投入
spidi
//SPI數據輸入信號
投入
[7:0]
數據輸入;
//發送數據輸入
輸出
spics
//SPI片選信號
輸出
spiclk
//SPI時鐘信號
輸出
斯皮多;
//SPI數據輸出信號
輸出
[7:0]
dataout
//接收數據輸出
車輛註冊號
spics
車輛註冊號
spiclk
車輛註冊號
斯皮多;
車輛註冊號
[7:0]
dstate,
數據發送、數據輸出、數據接收
;//,cnt
車輛註冊號
[1:0]
spistate
參數
閑置的
=
2 ' b00
參數
發送數據
=
2 ' b 01;
參數
接收數據
=
2 ' b 10;
最初的
開始
美籍西班牙人
& lt=
1 ' b 1;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
結束
總是
@(posedge
時鐘)
開始
如果(!rst)
開始
spistate
& lt=
閑置;
//
(cannot)不能
& lt=
8 ' d0
美籍西班牙人
& lt=
1 ' b 1;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d0
結束
其他
開始
情況
(spistate)
2'b00:
開始
//
美籍西班牙人
& lt=
1 ' b 1;
//
spiclk
& lt=
1 ' b 1;
//
斯皮多
& lt=
1 ' b 1;
//
如果(cnt
==
8'd0)
//
開始
//
(cannot)不能
& lt=
8 ' d0
如果((wr
==
1'b0)
& amp& amp
(研發
==
1'b1))
//發送數據轉換
開始
spistate
& lt=
send _ data
數據狀態
& lt=
8 ' d0
dsend
& lt=
數據輸入;
結束
其他
如果((wr
==
1'b1)
& amp& amp
(研發
==
1'b0))
//接收數據轉換
開始
spistate
& lt=
接收_數據;
數據狀態
& lt=
8 ' d0
結束
其他
開始
spistate
& lt=
閑置;
數據狀態
& lt=
8 ' d0
結束
//
結束
//
其他
//
開始
//
(cannot)不能
& lt=
(cannot)不能
+
8 ' d 1;
//
結束
結束
2'b01:
//發送數據狀態
開始
情況
(數據狀態)
8'd0:
//產生的片選信號有效。
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d 1;
結束
8'd1:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d2
結束
8英寸d2:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8’D3;
結束
8英寸d3:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
dsend[7];
//發送數據的最高位
數據狀態
& lt=
8 ' d4
結束
8英尺4英寸:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
dsend[7];
數據狀態
& lt=
8 ' d5
結束
8英寸d5:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
dsend[6];
數據狀態
& lt=
8 ' D6;
結束
8'd6:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
dsend[6];
數據狀態
& lt=
8 ' d7
結束
8英尺7英寸:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
dsend[5];
數據狀態
& lt=
8 ' d8
結束
8英尺8英寸:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
dsend[5];
數據狀態
& lt=
8 ' d9
結束
8英尺9英寸:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
dsend[4];
數據狀態
& lt=
8 ' d 10;
結束
8'd10:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
dsend[4];
數據狀態
& lt=
8 ' d 11;
結束
8'd11:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
dsend[3];
數據狀態
& lt=
8 ' d 12;
結束
8'd12:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
dsend[3];
數據狀態
& lt=
8 ' d 13;
結束
8'd13:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
dsend[2];
數據狀態
& lt=
8 ' d 14;
結束
8'd14:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
dsend[2];
數據狀態
& lt=
8 ' d 15;
結束
8'd15:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
dsend[1];
數據狀態
& lt=
8 ' d 16;
結束
8'd16:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
dsend[1];
數據狀態
& lt=
8 ' d 17;
結束
8'd17:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
//發送最低有效數據
斯皮多
& lt=
dsend[0];
數據狀態
& lt=
8 ' d 18;
結束
8'd18:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
dsend[0];
///spiclk的下降沿允許讀取最低位數據。
數據狀態
& lt=
8 ' d 19;
結束
8'd19:
//芯片選擇信號無效
開始
美籍西班牙人
& lt=
1 ' b 1;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d20;
結束
8'd20:
開始
美籍西班牙人
& lt=
1 ' b 1;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d0
spistate
& lt=
閑置;
結束
系統默認值
開始
美籍西班牙人
& lt=
1 ' b 1;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
spistate
& lt=
閑置;
結束
結束案例
結束
2'b10:
//接收數據狀態
開始
情況
(數據狀態)
//芯片選擇信號有效
8'd0:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d 1;
結束
8'd1:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d2
結束
8英寸d2:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8’D3;
結束
8英寸d3:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d4
結束
8英尺4英寸:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
//讀取緊隨上升沿的下降沿數據
接收
& lt=
spidi
//接收數據的最高有效位
數據狀態
& lt=
8 ' d5
結束
8英寸d5:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' D6;
結束
8'd6:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
接收
& lt=
spidi
數據狀態
& lt=
8 ' d7
結束
8英尺7英寸:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d8
結束
8英尺8英寸:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
接收
& lt=
spidi
數據狀態
& lt=
8 ' d9
結束
8英尺9英寸:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d 10;
結束
8'd10:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
數據接收
& lt=
spidi
數據狀態
& lt=
8 ' d 11;
結束
8'd11:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d 12;
結束
8'd12:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
數據接收
& lt=
spidi
數據狀態
& lt=
8 ' d 13;
結束
8'd13:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d 14;
結束
8'd14:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
數據接收
& lt=
spidi
數據狀態
& lt=
8 ' d 15;
結束
8'd15:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d 16;
結束
8'd16:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
dreceive[1]
& lt=
spidi
數據狀態
& lt=
8 ' d 17;
結束
8'd17:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d 18;
結束
8'd18:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' B0;
數據接收[0]
& lt=
spidi
//接收數據的最低有效位
數據狀態
& lt=
8 ' d 19;
結束
8'd19:
開始
美籍西班牙人
& lt=
1 ' B0;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d20;
dataout & lt=
dreceive
結束
8'd20:
開始
美籍西班牙人
& lt=
1 ' b 1;
//芯片選擇信號無效
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
數據狀態
& lt=
8 ' d0
spistate
& lt=
閑置;
結束
結束案例
結束
默認值:
開始
美籍西班牙人
& lt=
1 ' b 1;
spiclk
& lt=
1 ' b 1;
斯皮多
& lt=
1 ' b 1;
spistate
& lt=
閑置;
結束
結束案例
//對應以上數據傳輸情況。
結束
//對應上面RST沒有按下的情況。
結束
//始終對應於頂部@(姿勢邊緣
時鐘)
末端模塊