SystemC, A 및 B (둘 다 SC_THREAD)에 두 개의 스레드가 있고 B의 변수 또는 이벤트가 발생하면 스레드 A가 실행을 중지 (재설정)하도록합니다. 이것이 성취 할 수있는 적절한 방법이라고 주장했다.다른 프로세스에서 SystemC의 SC_THREAD를 재설정하는 올바른 방법
// Thread A: Data transfer
SC_THREAD(rx_tx_transfer);
dont_initialize();
sensitive << clk.pos();
// Thread B: If the value of the control registers changes
// during a transfer, the transfer should be aborted
SC_THREAD(check_reg_write_during_tx);
sensitive << x_event << y_event;
그래서, 나는 어쩌면이있는 경우 수행 할 수있는 스레드 B.에서 이벤트 또는 신호를 발생대로 즉시 무엇을하는지 중지하는 스레드 원하는 : 여기
더 예시입니다 AI 문제의 이벤트 및 일반 clk.pos()을 기다린 후 할 모든에 넣어 경우 - 다른 사람이 같은 :이 솔루션을 좋아하고, 더 나은 방법이 희망하지 않는void rx_tx_transfer()
{
// code
wait(clk.pos() | event_from_b);
if (clk.read() == SC_LOGIC_1 & event_from_b_var)
{
//...
}
else if (clk.read() == SC_LOGIC_1)
{
//...
}
else
{
//...
}
// other code
wait(clk.pos() | event_from_b);
// repeated if-else code from above
}
나는 익숙하지 않다. 아마도 내가 지금처럼 SC_THREAD에서 async_reset_signal_is()를 사용해야 :
// Thread A: Data transfer
SC_THREAD(rx_tx_transfer);
dont_initialize();
sensitive << clk.pos();
async_reset_signal_is(sig_form_b, true);
가 이것을 실행 스레드 중지하고 sig_form_b는 상관없이에게, rx_tx_transfer 기능의 실행의 현재 상태를 asseted되는 경우 (상태를 다시 가시겠습니까 즉, 다음 대기()에 도달하지 못했습니까?
더 좋은 방법이나 더 적절한 방법이 있다면 공유하십시오.
설명을 주셔서 감사합니다. 매우 명확하고 간결했습니다. 내 시나리오에서해야 할 적절한 일은 스레드 A를 다시 설정 한 다음 스레드 A (즉 "sig_from_b")의 재설정 신호가 스레드 B에서 해제 될 수 있도록 wait()를 사용하여 컨텍스트 스위치를 수행하는 것입니다. . – evilpascal