Modules(SPI) - GnicoJP/KAMPPHER GitHub Wiki

Core Components

SpiStabilizerモジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ
Spiの初期状態安定化のためのモジュール.Chiselに非同期リセットがないためVerilogで書いた.

Signals

  • input MOSI : SPI MOSI
  • input CLK : SPI Clock
  • input CS : SPI Chip Select
  • input reset:非同期リセット
  • output IsInitialized:SPIが初期化されたかどうか.SpiBufferモジュールはこれがtrueになってから信号を解釈すべきである.

SpiBufferモジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ
SpiのMOSIの信号をため込むバッファ.Chiselに非同期リセットがないためVerilogで書いた.

Signals

  • input DI : SPI MOSI
  • input CLK : SPI Clock
  • input CS : SPI Chip Select
  • input reset:非同期リセット
  • input IsInitialized:SPIが初期化されたかどうか.SpiStabilizerモジュールの同名の信号を受け取る.
  • output Buffer : バッファ出力
  • output Changed : 変更されたか否か.Clockのカウントが4より小さいときにTrueになる.
    io.Bufferは,内部FF counterが7になった直後に更新される.

SpiControllerモジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ
RWのブロックサイズの管理をするだけ.スカスカ

Signals

  • input io.SlaveCommand [5:0] : Masterから送られたコマンド番号(SpiSlaveReceiver.io.Command)
  • input io.SlaveCommandArgument [31:0] : Masterから送られたコマンド引数(SpiSlaveReceiver.io.CommandArgument)
  • input io.SlaveCommandReadFinished : Masterからコマンドが送信されたかどうか(SpiSlaveReceiver.io.CommandReadFinished)
  • input io.SlaveCommandArgumentReadFinished : Masterからコマンドの引数が送信されたかどうか(SpiSlaveReceiver.io.CommandArgumentReadFinished)
  • input io.SlaveArgumentReadFinished : Masterから送信されたコマンド全体の解釈に成功したかどうか(SpiSlaveReceiver.io.ReadSuccess)
  • output io.DataBlockSize [31:0] : ブロックサイズ

SpiSlaveReceiverモジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ
SpiのSlave側としてMOSIの信号を解釈し,コマンドとコマンド引数などの情報を出力する.

Signals

  • input io.InputBuffer [7:0] : SPI入力1バイト(SpiBufferモジュールから受け取る)
  • input io.BufferChange : SpiBufferモジュールのChanged
  • input io.DataBlockSize [31:0] : Write/Readメソッドのブロックのサイズ
  • output io.CommandReadFinished: コマンドの読み取りに成功したときに1になる.次回のコマンド読み取りが始まると立ち下がる.
  • output io.ArgumentReadFinished: コマンドの引数の読み取りに成功したときに1になる.次回のコマンド読み取りが始まると立ち下がる.
  • output io.ReadSuccess: センチネルまでの読み取りに成功したときに1になる.次回のコマンド読み取りが始まると立ち下がるので,一瞬のみ1になる.
  • output io.Command [5:0] : コマンド番号
  • output io.CommandArgument [31:0] : コマンドの引数
  • output io.WritingAddress [31:0] : 書き込み中のアドレス(リアルタイムに更新せずにブロックサイズ単位で更新)
  • output io.WaitingWriteToken : トークン待機状態か否か

Debug Signals

  • output io.___state : 内部ステート.

SpiMasterReceiverモジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ
SpiのMaster側としてMISOの信号を解釈し,受け取っているレスポンスの種類とブロックのカウントを出力する.
エラートークンが出力された場合,無視される(io.ResponseReceivingは0のまま)

Signals

  • input io.InputBuffer [7:0] : SPI入力1バイト(SpiBufferモジュールから受け取る)
  • input io.BufferChanged : SpiBufferモジュールのChanged
  • input io.DataBlockSize : SpiControllerから受け取るブロックサイズ
  • input io.CommandReadFinished : SpiSlaveReceiverモジュールのCommandReadFinished
  • input io.Command : SpiSlaveReceiverモジュールのCommand
  • output io.IsDataReading : データブロックを受け取っているときに1になる.(レスポンスが出力されているとき・ビジー状態は0)
  • output io.DataBlocksCount [31:0] : 現在の書き込での何バイト目なのかを出力する.
  • output io.IsBusy : ビジー状態か否か

Debug Signals

  • output io.___state : 内部ステート.

Debugging Components

SpiSlaveRceiverLedDebuggerモジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ
SpiSlaveReceiverモジュールの信号を受け取って,FPGAのLEDに表示するためのデバッグのためのモジュール.

Signals

  • input io.CommandReadFinished : SpiReceiverモジュールの同名の信号を受け取る.(未使用)

  • input io.ArgumentReadFinished : SpiReceiverモジュールの同名の信号を受け取る.(未使用)

  • input io.ReadSuccess : SpiReceiverモジュールの同名の信号を受け取る.

  • input io.Command : SpiReceiverモジュールの同名の信号を受け取る.

  • input io.CommandArgument : SpiReceiverモジュールの同名の信号を受け取る.(未使用)

  • output io.CMD0 : CMD0を検知した場合1になる.(これ以後ずっと1になる.)

  • output io.CMD1 : CMD1を検知した場合1になる.(これ以後ずっと1になる.)

  • output io.CMD8 : CMD8を検知した場合1になる.(これ以後ずっと1になる.)

  • output.io.ACMD41 : ACMD41を検知した場合1になる.(これ以後ずっと1になる.)

  • output.io.CMD16 : CMD16を検知した場合1になる.(これ以後ずっと1になる.)

  • output.io.CMD55 : CMD55を検知した場合1になる.(これ以後別のコマンドが来ると0になる.)

SpiSlaveReceiverLedDebugger2モジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ
SpiSlaveReceiverモジュールの信号を受け取って,何個命令が来たかをカウントするモジュール.

Signals

  • input io.CommandReadFinished : SpiSlaveReceiverモジュールの同名の信号を受け取る.(未使用)

  • input io.ArgumentReadFinished : SpiSlaveReceiverモジュールの同名の信号を受け取る.(未使用)

  • input io.ReadSuccess : SpiSlaveReceiverモジュールの同名の信号を受け取る.

  • input io.Command : SpiSlaveReceiverモジュールの同名の信号を受け取る.

  • input io.CommandArgument : SpiSlaveReceiverモジュールの同名の信号を受け取る.(未使用)

  • output io.CMDCount : コマンドの検出数.

SpiBufferAvalonDebuggerモジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ
SpiBufferモジュールの信号を受け取って,Avalonに流すFIFOメモリ.

Signals

  • input io.InputBuffer : SpiBufferモジュールの同名の信号を受け取る.
  • input io.BufferChanged : SpiBufferモジュールの同名の信号を受け取る.
  • inout io.Avalon : Avalon-MMのシグナル.

Spec

アドレス空間は10bit.0WORD目はカウンタ.カウンタは次に入力される番地を示す.カウンタはグレイコードではないので注意が必要.

SpiSlaveReceiverAvalonDebuggerモジュール

状態:完了
BitBucketリンク(Mercurial):リンク切れ

Signals

  • input io.Command:SpiSlaveReceiverモジュールの同名の信号を受け取る.
  • input io.CommandArgument:SpiSlaveReceiverモジュールの同名の信号を受け取る.
  • input io.ArgumentReadFinished:SpiSlaveReceiverモジュールの同名の信号を受け取る.
  • inout io.Avalon : Avalon-MMのシグナル.
    アドレス空間は6bit.0WORD目はカウンタ.カウンタは次に入力される番地を示す.カウンタはグレイコードではないので注意が必要.

CombinedSpiBufferAvalonDebuggerモジュール

状態:完了
MISOもMOSIも表示してくれる優れもの.
BitBucketリンク(Mercurial):リンク切れ

  • input io.MISO_Buffer : MISOなSpiBufferモジュールの同名の信号を受け取る.
  • input io.MISO_BufferChanged : MISOなSpiBufferモジュールの同名の信号を受け取る.
  • input io.MOSI_Buffer : MOSIなSpiBufferモジュールの同名の信号を受け取る.
  • input io.MOSI_BufferChanged : MOSIなSpiBufferモジュールの同名の信号を受け取る.
  • inout io.Avalon : Avalon-MMのシグナル.
    アドレス空間は6bit.0WORD目はカウンタ.カウンタは次に入力される番地を示す.カウンタはグレイコードではないので注意が必要.
    それぞれの値は,{byte[6], byte[5], byte[4], byte[3], byte[2], byte[1], byte[0], (MOSIか ? 8'b0 : 8'b1)} となっている.
    つまり64ビットの整数に8バイトのSPIの信号の塊が7個入っており,[7:0]にはMOSIならば0, MISOならば1が入る.

COPYRIGHT (C) Go Suzuki 2019-2020