Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef uart_transmitter_hpp
- #define uart_transmitter_hpp
- #include <systemc.h>
- enum state_t {
- idle, start, d0, d1, d2, d3, d4, d5, d6, d7, stop
- };
- SC_MODULE(uart_transmitter) {
- sc_in<sc_bit> clk;
- sc_in<sc_bv<8>> data;
- sc_in<sc_bit> enable;
- sc_out<sc_bit> txready;
- sc_out<sc_bit> tx;
- sc_signal<state_t> state;
- sc_bv<8> buf;
- void sendData();
- SC_CTOR(uart_transmitter) {
- SC_METHOD(sendData);
- sensitive << clk;
- };
- };
- #endif /* uart_transmitter_hpp */
- #include "uart.hpp"
- void uart_transmitter::sendData() {
- if (clk.event() && clk.read() == sc_bit(true)) {
- switch (state.read()) {
- case idle:
- tx.write(sc_bit(true));
- txready.write(sc_bit(true));
- if (enable.read() == sc_bit(true)) {
- buf = data.read();
- state.write(state_t::start);
- }
- break;
- case start:
- state.write(state_t::d0);
- tx.write(sc_bit(false));
- break;
- case d0:
- state.write(state_t::d1);
- tx.write(sc_bit(buf[0]));
- break;
- case d1:
- state.write(state_t::d2);
- tx.write(sc_bit(buf[1]));
- break;
- case d2:
- state.write(state_t::d3);
- tx.write(sc_bit(buf[1]));
- break;
- case d3:
- state.write(state_t::d4);
- tx.write(sc_bit(buf[3]));
- break;
- case d4:
- state.write(state_t::d5);
- tx.write(sc_bit(buf[4]));
- break;
- case d5:
- state.write(state_t::d6);
- tx.write(sc_bit(buf[5]));
- break;
- case d6:
- state.write(state_t::d7);
- tx.write(sc_bit(buf[6]));
- break;
- case d7:
- state.write(state_t::stop);
- tx.write(sc_bit(buf[7]));
- break;
- case stop:
- state.write(state_t::stop);
- tx.write(sc_bit(true));
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement