• 締切済み

FIFOがうまく動きません。助けてください。

IDTのFIFOを使用してるのですが、うまく動いてくれません。一度目はうまくいくのですが、二度目(FIFOリセット後)になると、どうやらwriteしていないようです。一度目はemptyが0→1となり、writeし続けるとfullが1→0になります。FIFOリセット後はemptyが1→0、fullが0→1となります。ここまではいいのですが、FIFOリセット後、再びwriteしても、emptyが0→1になりません。write信号は入力しています。 考えられる原因は、 1) writeのタイミングが悪く、writeできていないのでemptyのまま。 2) リセット後、リセット状態が続いている。 3) writeした後、すぐreadしているのでemptyのまま。 かなと思っていますが、これ以外に原因はありますでしょうか? 1)は、一度目のサイクルで書き込めているので違うと思うのですが。 よろしくお願いします。

  • inst
  • お礼率65% (92/141)

みんなの回答

  • esezou
  • ベストアンサー率37% (437/1154)
回答No.1

instさん、こんにちは。 IDTのFIFOといっても同期非同期双方向高速でクロックの与え方コントロールの仕方が異なる。 データシートと設計タイミングチャートとオシロ波形をにらめっこするしかない。 データシート推奨どおりのタイミングになっているか検証せよ。 回路図と型番、タイミングチャートを示せればアドバイス出来なくは無いが、実機を見ないと基本的には判らない。

inst
質問者

お礼

ありがとうございます。 タイミングチャートは問題ないようなんですがねぇ… もう一度、データシートを熟読してみます。

関連するQ&A

  • 三菱シーケンサ デバイステストについて

    デバイステストで入力信号接点(X)を強制ONさせたとき、 強制リセットをかける以外に、何かの出力(M等)でリセットをかける方法はありませんか?

  • マイコンリセットについて

    これまで、マイコンのリセット入力にはあまり深く考えずにリセットICを用いていたのですが、ちょっと疑問が出てきたので質問します。 マイコンのリセット信号が一定時間ローレベルに保持する必要があるのは、電源が安定するまで、 プログラムが動きだすのを抑えるとのことですが、これは、リセットをかけるのに保持時間が必要なわけではなく、リセット自体は、リセット信号の立下りエッジでかかって、その後、リセットが立ち上がるまでリセット状態を保持すると思っていいでしょうか? また、とすると、電源が既に安定した状態で何らかの理由でマニュアルリセットをかけたい場合には、上記のローレベル保持時間は必要ないと思っていいのでしょうか?

  • マウスのクリックで突然リセット(?)がかかります

    ネットやEXCELを使用中にマウスをクリックすると突然、画面が真っ暗になりリセットボタンを押したときのような状態になります。画面には「入力信号がありません」と、電源を落とすときのメッセージが表示されます。PCは自作です。最近ホームページビルダーをインストールしました。原因とメンテナンス方法をご教示下さい。

  • 補正入力間違いについて

    お世話になります。 NC旋盤(自動機・・・制御は0TT)を扱っていますが補正入力ミスで困っています。入力ミスが起こる原因としましてプログラムエンドになると入力中の文字がリセットされること。リセットされるタイミングが悪いと、コンマとT(刃先の仮想位置を示す)が同じボタンであるため、いつのまにか刃先の仮想位置番号が変わり、加工形状が変わってしまいます。補正値入力の確認不足と言ってしまえばそれまでですが、ノーズR補正を使用しないプログラムを組みかえる以外に良い防止方法はないでしょうか?

  • ロジック回路の質問です

    状況: 500Hz の信号入力ラインが2本あります。 この2つの信号は ON-OFF の矩形で、同じタイミングで振幅しています。 これら2本の信号入力を一つに統一し、1本のラインに変換して出力します。 質問: 片方の信号入力ラインにエラーが起き、 Low または High の固定状態に陥ってしまったとします。 この状態でも、生きている方の信号を生かして出力したい場合、ロジック的な回路で可能でしょうか? それとも、マイコンなどを使ってプログラム的に処理したほうが良いのでしょうか? わかりにくい質問で申し訳ありませんが、ご回答お待ちしております。

  • Boot Sector Flash Memoryとは何ですか?

    会社で基板の修理をしています。まだまだ回路が読めるようになって間もないので知らないことが多くてよくここで詳しい方々にお伺いしております。先日のD-latchとD-FFについては完全に理解することができ大変感謝しております。ところでまた分からないことが出てきましたので簡単だ構いませんのでご教示願えますでしょうか? 教えていただきたい内容は以下の2点です。 1.Boot Sector Flash Memoryとは何でしょうか? (現在着目しているのはAM29F800Bという部品です。なおこの部品のデータシートはhttp://www.alldatasheet.com/datasheet-pdf/pdf/55470/AMD/AM29F800B.htmlのDownloadと書いてあるすぐ右のところをクリックすると見れます) 2.HIGH-SPEED 2K x 8 DUAL-PORT STATIC RAMという部品の挙動がいまいちつかめません。 (現在着目しているのはIDT7132という部品です。データシートはhttp://www.alldatasheet.com/datasheet-pdf/pdf/65970/IDT/IDT7132.html?のDownloadと書いてあるすぐ右のところをクリックすると見れます) 1.Boot Sector Flash Memory・・・CMOSとは一体何でしょうか?ブートセクターというくらいなのでこの部品が載った基板を検査時に電源を入れたらどこかに書かれた情報を消して、別のプログラムを再書き込みしてるのでしょうか? 2.HIGH-SPEED 2K x 8 DUAL-PORT STATIC RAMの具体的によく分からないところ:AddressラインとDataラインがあるがReadの時、あるいはWriteの時、AddressとDataがどのようになるのか?何が入力になってどこのデータをどう出力するのかが不明です。データシートのP.15にTruth Table I. Non-Contention Read/Write Controlというがあるのですが、この表の読み方が分かりません。そもそもMemoryとはどこのメモリなんでしょうか?また/BUSYは何をやっているのでしょうか?

  • 作業中いきなり入力信号なしとの表示が出て

    作業中いきなり『入力信号なし』と表示が出て、真っ暗になるのですが、コネクタ部分を抜き差ししても『入力信号なし』と一瞬表示されて真っ暗になります。 音は聞こえるので、起動しているのは確かなのですが。。 何が原因なのかわかりません。 頻度も3日に1度ぐらいなのですが。。 教えてください。 宜しくお願いします。

  • 信号機制御回路

    信号機制御回路の状態遷移表をどう書けばいいのか分からないので、どなたか教えて下さい。 論理仕様 入力仕様 a_red : 相手の信号が赤になると1が入力される。それ以外のときは0が入力される。自分が赤でないときに0が入力されることはない。 出力仕様 red : 信号が赤のとき1を出力する blue : 信号が青のとき1を出力する yellow : 信号が黄のとき1を出力する 動作仕様(初期状態は赤) 相手の信号が赤でないときは相手が赤になるまで自分は赤のまま 相手の信号が赤になったら次のクロックから青→黄→赤と状態が変化 相手の信号が赤→青→黄→赤と変化したら次は自分が赤→青→黄→赤と変化する 青には3クロック。黄には1クロックとどまる。

  • 故障?

    6年ほど愛用しているPCが最近悲鳴をあげてきました。 電源スイッチを入れるとキーボードの信号が送られていない状態になり、 マウスやキーボードを抜いたり、別のキーボードを挿したりリセットしたりするとBIOS画面に行き、 更にリセットするとやっと起動する・・・と言うような状態です。 今さっき起動するのに一昨日、昨日以上に時間が掛かりました。 マザーボードの電池がギリギリなんですが、やはりそれが原因なのでしょうか。 もし違う原因が考えられるようでしたら詳細と対処法をお願いします。

  • 無限ループからの脱出

    import java.io.*; public class Test { public static void main(String[] args) throws IOException { String ss; int idt; while(true) { try { BufferedReader f = new BufferedReader(new InputStreamReader(System.in)); System.out.print("数字を入力してください : "); ss = f.readLine(); if(ss == "end") break; idt = Integer.parseInt(ss); System.out.println("あなたの入力した数字は " + idt + " です。"); System.out.println(); } catch(NumberFormatException e) { System.out.println("error : " + e); System.out.println(); } } } } 上記は、コンソールに入力した数字をそのまま出力し、数字以外を入力すると例外処理するプログラムです。 見ていただくと分かるとおり、途中入力したものが「end」だとbreakして無限ループを脱出するということを予定して作りました。 しかしbreakしてくれません。if文の中に処理が移っていないのです。なぜでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java