パスワードを忘れた? アカウント作成
15257053 journal
日記

kitune-sanの日記: 8259をSystemVerilogで書いてみる #1

日記 by kitune-san

MCS-80もどきをSystemVerilog実装しようという遊びを再開。サボってたので、前回の8288から半年近く経ってしまった。
8259Aはこれまでやってきた中では仕様が複雑な方なので、ブロックごとにテストベンチを走らせながらやっています。
メモも兼ねて現在の様子を書く。進捗は20%ぐらい?

実装した箇所は以下の2点

# 割り込み要求の受付ブロック
このブロックは、外部のIR入力を受けて割り込みフラグレジスタ(IRR)の対応するビットを立てる。
入力にはレベル検出とエッジ検出の2つがあり外部のブロックより設定されるようにする。
フリーズ信号は、マイコンから8259へアクノリッジを送信している間にアクティブになる信号で、その間の割り込み入力を受け付けないようにする。
また、マイコンから初回のアクノリッジを受信したときに割り込みフラグを下げる信号も入れた。
今回始めてgenerate文とfor文を使用してみた。複数ビットに同じ回路を作成する場合に役立った。論理合成も可能のようだ。

# 割り込み優先順位の解決を行うブロック
このブロックは、割り込みフラグレジスタの内容から、割り込みサービスレジスタ(ISR)を立てる割り込みを決定する。
優先度解決に必要な機能である割り込みマスク、スペシャルマスク、Special fully nest、回転モードへの対応を記述していくうちに結構複雑になってしまった。

割り込みマスクは、単純に入力される特定の割り込みを無視する機能。
スペシャルマスクモードは、ISRが立っている割り込み入力でも再度割り込みを発生させることができる機能。
Special fully nestモードは、直前の割り込み(最優先割り込み)が入った後、再度同じ割り込みを起こすことができる機能。(カスケード接続のときに使うらしい)
回転モードは、優先順位を回転させることができるモード。(デフォルトでIR0が最優先でIR7が最低の優先度だが、例えばRotate=3でIR4が最優先でIR3が最低の優先度とすることができる)

これらの機能が複数組み合わさった場合までは正直考えるのがきつい・・・。それぞれ用途が違うだろうから考えなくてもいいかなぁ。
実際これらの機能はどれぐらい使われていたのだろう。

typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...