📄 switch.h
字号:
/* * TU Eindhoven * Eindhoven, The Netherlands * * Name : switch.h * * Author : A.S.Slusarczyk@tue.nl * * Date : 13-09-2003 * * Function : Crossbar switch with e-cube router * Based on requested address forwards data_in_x, req_in_x and * ack_in_x from input to output. * Note that while data and req travel from "left" to "right", ack goes from * right to left * arbitration - if two inputs request the same output, the one with * smaller number wins * */#ifndef SWITCH_H_INCLUDED#define SWITCH_H_INCLUDED#include <systemc.h>#include "net_dim.h"SC_MODULE(CROSSBAR3x3){ sc_in<bool> clk; sc_in< sc_uint<2> > addr_0, addr_1, addr_2; sc_in< bool > conn_0, conn_1, conn_2; sc_in< sc_bv<FLIT_LEN> > data_in_0, data_in_1, data_in_2; sc_in< bool > req_in_0, req_in_1, req_in_2; sc_in< bool > ack_in_0, ack_in_1, ack_in_2; sc_out< sc_bv<FLIT_LEN> > data_out_0, data_out_1, data_out_2; sc_out< bool > req_out_0, req_out_1, req_out_2; sc_out< bool > ack_out_0, ack_out_1, ack_out_2; // grantX - which input has output X // 0-none, 1,2,3 - x0, x1, d sc_signal< sc_uint<2> > grant0, grant1, grant2; // round-robin arbitration - the requester with the number equal // to round_robin has priority sc_signal< sc_uint<2> > round_robin; // increase round_robin sc_signal< bool > rr_inc; void crossbar_process(); void arbiter_process(); void round_robin_process(); SC_CTOR(CROSSBAR3x3){ // simple multiplexing based on current grants SC_METHOD(crossbar_process); sensitive << data_in_0 << data_in_1 << data_in_2 << req_in_0 << req_in_1 << req_in_2 << ack_in_0 << ack_in_1 << ack_in_2 << grant0 << grant1 << grant2; // arbitration SC_METHOD(arbiter_process); sensitive_pos << clk; // round-robin counter SC_METHOD(round_robin_process); sensitive_pos << clk; }};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -