掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
フラグフィルの仕方が分かりません。 (ID:64177)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちは。 フラグ処理のコードを書いています。 wire_ack_acquirememt_bus[object_numb][wire_wsr_num] はwire_wsr_num行の中で一つだけアサートすることになっています。 ack_sender = flag_pick(wire_ack_acquirememt_bus[object_numb][wire_wsr_num], 1, SEND_ON_BUS); で送信者がアサートさせているフラグを拾い、列番号object_numbをピックアップします。 後半コードでその列から若い列、古い列へフラグを埋めていきます(flag_fill(fill_data, fill_target, fill_width, fill_start_bit))。 VC++8でトレースして追ってみているのですが、挙動がおかしく、その問題点を探しているのですが、私には見つけることが出来ませんでした。 flag_pick()、flag_fill()も公開する必要があると思いますが、まずは下記のコードで分かることを教えていただけないでしょうか。 /* ACKNOWLEDGE for ACQUIREMENT */ i = 0; sender_no_ack_acq_bus[wire_wsr_num] = 0; for (wire_wsr_num=0; wire_wsr_num<WSRF_SIZE; wire_wsr_num++) { prev_sender_no_ack_acq_bus[wire_wsr_num] = sender_no_ack_acq_bus[wire_wsr_num]; for (object_numb=0; object_numb<SPACE_SIZE; object_numb++) { ack_sender = flag_pick(wire_ack_acquirememt_bus[object_numb][wire_wsr_num], 1, SEND_ON_BUS); if (ack_sender == ASSERT) { sender_no_ack_acq_bus[wire_wsr_num] = object_numb; i = i | ASSERT; } } if (object_numb == SPACE_SIZE && i == NEGATE) { wire_reset = NEGATE; sender_no_ack_acq_bus[wire_wsr_num] = prev_sender_no_ack_acq_bus[wire_wsr_num]; } else wire_reset = ASSERT; wire_temp_ack_acq_bus = flag_pick(wire_ack_acquirememt_bus[sender_no_ack_acq_bus[wire_wsr_num]][wire_wsr_num], 1, SEND_ON_BUS); wire_event_temp_ack_acq_bus = ff_event_check(&ff_event_temp_ack_acq_bus, 0, &ff_event_holder_temp_ack_acq_bus, 0, wire_temp_ack_acq_bus, 0); wire_event_temp_ack_bus_assert = wire_event_temp_ack_acq_bus & wire_temp_ack_acq_bus & 1; wire_event_temp_ack_bus_negate = wire_event_temp_ack_acq_bus & ~wire_temp_ack_acq_bus & 1; for (object_numb=sender_no_ack_acq_bus[wire_wsr_num]; object_numb>0; object_numb--) { wire_ack_acquirememt_bus[object_numb -1][wire_wsr_num] = flag_fill(wire_temp_ack_acq_bus & ~wire_event_temp_ack_bus_negate & wire_reset & 1, wire_ack_acquirememt_bus[object_numb][wire_wsr_num -1], 1, 0); } for (object_numb=sender_no_ack_acq_bus[wire_wsr_num]; object_numb<SPACE_SIZE-1; object_numb++) { wire_ack_acquirememt_bus[object_numb +1][wire_wsr_num] = flag_fill(wire_temp_ack_acq_bus & ~wire_event_temp_ack_bus_negate & wire_reset & 1, wire_ack_acquirememt_bus[object_numb][wire_wsr_num +1], 1, 0); } }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.