1 `define STATE_START 2'b00
2 `define STATE_WRITE1 2'b01
3 `define STATE_WRITE2 2'b10
4 `define STATE_INCREMENT 2'b11
6 module WRITER (input clk, input clk_enable, output reg [7:0] tx_byte, output reg tx_signal = 0, input tx_busy, output reg finished = 0, output [12:0] ram_addr, input [15:0] ram_do, input [12:0] freeptr);
7 reg [1:0] state = `STATE_START;
9 reg [12:0] current_index;
11 assign ram_addr = current_index;
13 always @ (posedge clk) begin
21 state <= `STATE_WRITE1;
25 if(!tx_busy && !tx_signal) begin
27 tx_byte <= ram_do[15:8];
28 state <= `STATE_WRITE2;
33 if(!tx_busy && !tx_signal) begin
35 tx_byte <= ram_do[7:0];
36 state <= `STATE_INCREMENT;
40 `STATE_INCREMENT: begin
41 current_index <= current_index + 1;
42 if(current_index >= freeptr) begin
44 state <= `STATE_START;
46 state <= `STATE_WRITE1;
49 endcase // case (state)
50 end // if (clk_enable)