SpiMaster::<MODE>
SPI Master モジュール
startはidle中に1クロックだけHighにし、同じcycleのtx_dataを保持する。
受理後はbusyとcs_nをアサートし、全bitの転送とCS High保持時間が終わるとdoneを1クロックだけHighにする。
転送はMSB-first。
CPOLはidle level、CPHAは最初のedgeがshiftかsampleかを決める。
Mode 0/2はleading edgeでsample、Mode 1/3はleading edgeでshiftする。
CLK_DIVは4以上の偶数を指定する。SCLKのHigh/LowはそれぞれCLK_DIV/2クロックで、先頭と最終エッジも同じ幅になる。
DATA_WIDTHは1以上を指定する。
MISOはSCLKに同期して変化するソースシンクロナス入力として、指定したエッジで直接サンプルする。
既定はCPHAに従い、CPHA=0はleading edge、CPHA=1はtrailing edgeでサンプルする。
スレーブがtrailing edgeでSDOを更新する場合はMISO_SAMPLE_EDGEにLeadingを指定する。
Generic Parameters
| MODE | SpiMode |
|---|
Parameters
| DATA_WIDTH | u16 | 通信ビット数 (8, 16, 24, 32など) |
|---|---|---|
| CLK_DIV | u16 | SCLK周期のシステムクロック数 (50MHz入力で50なら1MHz) |
| MISO_SAMPLE_EDGE | SpiSampleEdge | MISOをサンプルするSCLKエッジ |
Ports
| clk | input | clock | System Clock (50MHz) |
|---|---|---|---|
| rst | input | reset | Reset |
| start | input | logic | 通信開始トリガー (1パルス) |
| tx_data | input | logic<DATA_WIDTH> | 送信データ |
| rx_data | output | logic<DATA_WIDTH> | 受信データ |
| busy | output | logic | 通信中フラグ |
| done | output | logic | 完了フラグ (1パルス) |
| sclk | output | logic | SPIクロック |
| mosi | output | logic | SPI MOSI |
| miso | input | logic | SPI MISO |
| cs_n | output | logic | SPI Chip select (Active Low) |