1 `define STATE_START 3'b000
2 `define STATE_WRITE1_WAIT 3'b001
3 `define STATE_WRITE1 3'b010
4 `define STATE_WRITE2_WAIT 3'b011
5 `define STATE_WRITE2 3'b100
6 `define STATE_INCREMENT 3'b101
7 `define STATE_FINISHED 3'b111
9 module WRITER (input clk, input clk_enable, output [7:0] tx_byte, output tx_signal, input tx_busy, output finished, output [12:0] ram_addr, input [15:0] ram_do, input [12:0] freeptr);
10 reg [2:0] state = `STATE_START;
11 reg [12:0] current_index;
13 assign ram_addr = current_index;
14 assign finished = state == `STATE_FINISHED;
20 tx_byte <= ram_do[15:8];
25 tx_byte <= ram_do[7:0];
35 always @ (posedge clk) begin
40 state <= `STATE_WRITE1_WAIT;
43 `STATE_WRITE1_WAIT: begin
44 if(!tx_busy) state <= `STATE_WRITE1;
47 `STATE_WRITE1: state <= `STATE_WRITE2_WAIT;
49 `STATE_WRITE2_WAIT: begin
50 if(!tx_busy) state <= `STATE_WRITE2;
53 `STATE_WRITE2: state <= `STATE_INCREMENT;
55 `STATE_INCREMENT: begin
56 current_index <= current_index + 1;
57 if(current_index >= freeptr) begin
58 state <= `STATE_FINISHED;
60 state <= `STATE_WRITE1_WAIT;
64 `STATE_FINISHED: state <= `STATE_START;
66 default: state <= `STATE_START;
67 endcase // case (state)
68 end // if (clk_enable)