module top (input CLK, output LED1, LED2, LED3, LED4, LED5, input SCL, inout SDA, output ACK, input COM_RX, output COM_TX, COM_DCD, COM_DSR, COM_RTS); reg [7:0] I2C_TX; // TRANSMITTED TO MASTER initial begin I2C_TX = 22; end wire [7:0] I2C_RX; // RECEIVED FROM MASTER wire [7:0] RAM_RD; wire I2C_TRANS, I2C_READ, I2C_ACK, I2C_ACK_MSTR_CTRL, I2C_WR; wire [9:0] I2C_COUNTER; i2c_slave I2C (CLK, SCL, SDA, I2C_TRANS, I2C_READ, I2C_ACK, I2C_WR, //I2C_ACK_MSTR_CTRL, I2C_RX, I2C_TX, I2C_COUNTER); reg UART_WR, UART_DTR, UART_RTS, UART_DCD; reg [7:0] UART_TX_DATA; wire UART_ACTIVE, UART_TX_LINE; reg [23:0] uart_counter; initial begin UART_WR = 0; UART_TX = 1; UART_RTS = 1; UART_DTR = 0; UART_DCD = 0; end uart UART (CLK, UART_WR, UART_TX_DATA, UART_ACTIVE, UART_TX_LINE); reg wr_old; reg [7:0] ram_adress; reg RAM_W; initial begin ram_adress = 0; RAM_W = 0; end ram RAM (CLK, RAM_W, ram_adress, I2C_RX, RAM_RD); always @ (posedge CLK) begin if ((wr_old == 0) && (I2C_WR == 1) && I2C_READ) begin //I2C_TX = I2C_TX + 5; // READ I2C_TX = RAM_RD; // READ FROM CURRENT ADRESS //ram_adress <= ram_adress + 1; // AND INCREMENT ADRESS (ASSIGNED IN THE NEXT TACT) UART_WR = 1; UART_TX_DATA = I2C_TX; end else if ((wr_old == 0) && (I2C_WR == 1) && (I2C_READ == 0)) begin // RAM MODULE WRITES TO RAM IN THE CURRENT ADRESS if (I2C_COUNTER == 2) ram_adress = I2C_RX; else begin RAM_W = 1; //ram_adress <= ram_adress + 1; // ONLY INCREMENT ADRESS IN THE NEXT TACT end UART_WR = 1; UART_TX_DATA = I2C_RX; end else if ((wr_old == 1) && (I2C_WR == 0)) begin RAM_W = 0; UART_WR = 0; if ((I2C_COUNTER != 2) || (I2C_READ == 1)) ram_adress <= ram_adress + 1; // ONLY INCREMENT ADRESS IN THE NEXT TACT end wr_old = I2C_WR; /* uart_counter = uart_counter + 1; if (uart_counter == 12000000) begin uart_counter = 0; UART_TX_DATA = UART_TX_DATA + 1; UART_WR = 1; UART_RTS = UART_RTS ^ 1; if (UART_RTS) UART_DTR = UART_DTR ^ 1; if (UART_DTR == 1) UART_DCD = UART_DCD ^ 1; end else if (uart_counter == 5) UART_WR = 0;*/ end assign I2C_W = I2C_WR & (I2C_READ ^ 1); assign LED5 = I2C_TRANS; //assign LED5 = COM_RX; assign LED1 = ram_adress[0];//I2C_RX[0]; assign LED2 = ram_adress[1]; assign LED3 = ram_adress[2]; assign LED4 = ram_adress[3]; assign ACK = I2C_READ;//I2C_WR; //I2C_ACK; assign COM_TX = UART_TX_LINE;//COM_RX; //assign COM_RTS = I2C_READ; assign COM_RTS = I2C_READ;//UART_RTS; assign COM_DSR = I2C_TRANS | UART_ACTIVE;//UART_DTR; //assign COM_DCD = UART_DCD; /* reg [24:0] counter; always @ (posedge CLK) begin counter = counter + 1; end assign LED1 = ~counter[24] & ~counter[23]; assign LED2 = ~counter[24] & counter[23]; assign LED3 = counter[24] & ~counter[23]; assign LED4 = counter[24] & counter[23]; assign LED5 = counter[23];*/ endmodule //top