GET THE LATEST VERSION OF SYNTHAGATE — V2.3.2 IS NOW AVAILABLE

Design Technology

High Level Synthesis

#include "Funcmi.h"

void Funcmi::main_proc() {
    if (rst.read() == 1) {
        bitcnt.write(0);
        br.write(0);
        cnt.write(0);
        cnt_elem.write(0);
        cnt_m1_m3.write(0);
        cnt_m2.write(0);
        codcomplete.write(0);
        decodcomplete.write(0);
        ext_in.write(0);
        idle.write(0);
        mac1.write(0);
        mac2.write(0);
        rbyte.write(0);
        rd.write(0);
        relem.write(0);
        rfilelength.write(0);
        rlengthd.write(0);
        rmask.write(0);
        rmax.write(0);
        rmin.write(0);
        rt1.write(0);
        rt2.write(0);
        rtemp1.write(0);
        rwrite2m2.write(0);
        rwrite2m3.write(0);
        shcnt.write(0);
        for (unsigned int i = 0; i < 65536; ++i) {
            m1[i].write(0);
        }
        for (unsigned int i = 0; i < 65536; ++i) {
            m2[i].write(0);
        }
        for (unsigned int i = 0; i < 65536; ++i) {
            m3[i].write(0);
        }
        currentState = a1;
        idle.write(1);
    } else {
        idle.write(0);
        proc_Funcmi();
    }
}

void Funcmi::proc_Funcmi() {
    sc_uint<8> rbyte_tmp = rbyte.read();
    codcomplete.write(0);
    decodcomplete.write(0);
    ext_in.write(0);
    idle.write(0);
    rwrite2m2.write(0);
    rwrite2m3.write(0);
    switch (currentState) {
    case a1:
        if (s.read() && dma.read() && ext_rdwr.read()) {
            m1_address = ext_adr.read();
            currentState = a2;
            m1[m1_address].write(ext_out.read());
        } else if (s.read() && dma.read() && !ext_rdwr.read() && m.read()) {
            m3_address = ext_adr.read();
            currentState = a3;
        } else if (s.read() && dma.read() && !ext_rdwr.read() && !m.read()) {
            m2_address = ext_adr.read();
            currentState = a4;
        } else if (s.read() && !dma.read() && bit0.read()) {
            currentState = a5;
            decodcomplete.write(0);
        } else if (s.read() && !dma.read() && !bit0.read()) {
            currentState = a6;
            relem.write(nelem.read());
            codcomplete.write(0);
        } else {
            currentState = a1;
            idle.write(1);
        }
        break;
    // ... (The rest of the state machine continues as in the original code)
    }
}

#ifdef MTI_SYSTEMC
SC_MODULE_EXPORT(Funcmi);
#endif