FC2カウンター FPGAの部屋 スパルタン3Eスタータキットのロータリーエンコーダ2
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

スパルタン3Eスタータキットのロータリーエンコーダ2

スパルタン3Eスタータキットのロータリーエンコーダの回路の説明をしようと思う。
ISE8.1iのSourcesペインは以下の図のとおりだ。
Rotary_Encoder_2_060519.png

以前のLCD回路からではinput_4hex_top.vhdとrot_enc_cont.vhd、swdiv.vhd, rotsw_sm.vhd, input_4hex_val.vhd, in4hexsm.vhdが増えている。
swdiv.vhdはスイッチのチャタリングをとるために1msごとにイネーブルを出す回路だ。
rotsw_sm.vhdがロータリーエンコーダの制御回路でここへの入力はswdiv.vhdでチャタリングを除去したパルスが入る。rotsw_sm.vhdのステートマシンは以下の図のとおりにAのパルスが1になってからBのパルスが入るとright_pulseが1になる。逆にBがはいってからAが入るとleft_pulseが1になる。もう1つのステートマシンはロータリーエンコーダのセンタースイッチを押した時に1パルスを出すステートマシンである。
2006.05.20 06:15 センタースイッチのステートマシンに非同期RESETが抜けていました。追加するかもしくはもう一度ZIPファイルをダウンロードしてください。
Rotary_Encoder_3_060519.png

その上のrot_enc_cont.vhdにはswdiv.vhdのイネーブルを使ってチャタリングを除去するためのDFFがインスタンスしてある。
input_4hex_val.vhdとその下のin4hexsm.vhdは、最初のLCDのカーソルをロータリーエンコーダの右、左の情報で動かそうとした。そのためPicoBlazeにハンドシェークでデータを渡そうとした。right_levelを回路側で1にして、PicoBlazeが受け取ったらright_ackを返す予定だった。(leftも)でも、カーソルが大きくてブリンクしてもキャラの見栄が悪いし、結局今のところ使用していない。

PicoBlazeの入出力ポートも以下のように拡張した。

PicoBlazeの出力ポート仕様
* ポート番号0 : LCD_RWの値(bit0), LCD_RSの値(bit1), 4bit access(bit2), それ以上のビットは空き
* ポート番号1 : 書き込みデータ8ビット。(キャラクタ)読み出しの場合もダミーデータをここに書く。
* ポート番号2 : インターバルタイマー設定値8ビット。50MHzクロックをあらかじめ12ビットのカウンタで分周しているので、1を設定すると82usカウントする。
* ポート番号3 : right_ackを出力
* ポート番号4 : left_ackを出力

PicoBlazeの入力ポート仕様
* ポート番号0 : LCDから読み出したデータ8ビット
* ポート番号1 : インターバルタイマー・タイムアウトフラグ(bit0), LCD操作ステートマシン終了信号(bit1), それ以上は空き
* ポート番号2 : 外から入力されたデータを読むポート、upper_4hex_data(15 downto 8)
* ポート番号3 : 外から入力されたデータを読むポート、upper_4hex_data(7 downto 0)
* ポート番号4 : 外から入力されたデータを読むポート、lower_4hex_data(15 downto 8)
* ポート番号5 : 外から入力されたデータを読むポート、lower_4hex_data(7 downto 0)
* ポート番号6 : ビット0はright_level、ビット1はleft_level、ビット2はcursor_move, ビット7~4はカーソル位置


それに応じてLCD4HexDisp.vhdの対応する回路も増やしてある。
instrom.psmは上の行にカウントアップ、ダウンする桁の番号とステータス、それにモードをMとCで表示するルーチンを付加してある。その部分を下に示す。

LOAD s2, 20 ; スペースを1個書く
CALL CHAR_DISP

INPUT s3, IN_RL_LEVEL_PORT ; RL_LEVEL_PORTの値を2つのキャラクタで書く
CALL 2CHAR_DISP ; 8ビットを2つのASCIIキャラクタにして出力する

LOAD s2, s3
AND s2, CURSOR_MOVE_POS ; CURSOR_MOVEが1かどうかをチェック
LOAD s2, 4D ; 'M'キャラクタ
JUMP NZ, M_CHAR_DISP ; CURSOR_MOVEモードなので'M'キャラクタを表示
LOAD s2, 43 ; Countモードなので'C'キャラクタを表示
M_CHAR_DISP: CALL CHAR_DISP


例によって、PicoBlaze本体を抜いたプロジェクトをここにおいときます。ただし保証はありません。
やり方はスパルタン3EスターターキットのLCD表示回路5を見てください。

これで準備ができたので、次はDDR SDRAMコントローラを組み込んで動くかどうか確かめる。DDR SDRAMコントローラは非公開にすると思う。
  1. 2006年05月19日 20:34 |
  2. Spartan3E Starter Kit
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/222-4ffaed4a
この記事にトラックバックする(FC2ブログユーザー)