UART
ステートマシンとして構成する
状態
WAIT:スタートビットを待っている
START:スタートビットを送受信している
DATA:データビットを送受信している
STOP:ストップビットを送受信している
状態遷移
WAIT→START:立ち下がりエッジを検出
START→DATA:1ビット分の時間が経過
DATA→STOP:8ビット分の時間が経過
STOP→WAIT:0.5ビット分の時間が経過
ストップビットだけは半ビットで受信を終える
受信手順
スタートビット(FPGA_RXの立ち下がりエッジ)を検出したとき
状態をSTARTに更新
1ビット分の時間を計るタイマーを始動
STARTに遷移してから0.5ビット分の時間が経ったとき
FPGA_RXが0であることを確認
0でなければスタートビットの誤検出だとして、WAITに戻る
楽するなら、0の確認を省略しても可
STARTに遷移してから1ビット分の時間が経ったとき
状態をDATAに更新
DATAに遷移してから0.5ビット分の時間が経ったとき
FPGA_RXの値をシフトレジスタに書き込む(bit0)
bit0を受信してから1ビット分の時間が経ったとき
FPGA_RXの値をシフトレジスタに書き込む(bit1)
bit7を受信するまで繰り返す
bit7を受信してから0.5ビット分の時間が経ったとき
状態をSTOPに更新
STOPに遷移してから0.5ビット分の時間が経ったとき
状態をWAITに更新
FPGA_RXが1であることを確認(ストップビット)
楽するなら、1の確認を省略しても可