De los experimentos en simulación, parece que la señal, una vez establecida, se mantiene en el nivel del último write
, al menos en la simulación y en la salida de la forma de onda. ¿Está realmente garantizado por la especificación? Intenté encontrarlo en la especificación pero no pude encontrarlo.
Si este no es el caso, ¿es el siguiente código la implementación correcta de tal cosa?
template<typename T>
SC_MODULE(RegisterOut) {
sc_core::sc_in<bool> clk;
sc_core::sc_in<bool> rst;
sc_core::sc_out<T> out;
sc_core::sc_event _write;
T val;
void run() {
while (true) {
wait(clk.posedge_event() | _write);
out.write(val);
}
}
void write(const T &v) {
val = v;
_write.notify();
}
typedef RegisterOut SC_CURRENT_USER_MODULE;
RegisterOut(::sc_core::sc_module_name, const T &v = T()) : val(v) {
SC_CTHREAD(run, clk);
reset_signal_is(rst, true);
}
};