-`define STATE_WRITE_TYPE 3'd0
-`define STATE_WRITE1 3'd1
-`define STATE_WRITE2 3'd2
-`define STATE_WRITE3 3'd3
-`define STATE_WRITE4 3'd4
+`define STATE_START 2'b00
+`define STATE_WRITE1 2'b01
+`define STATE_WRITE2 2'b10
+`define STATE_INCREMENT 2'b11
-module WRITER (input clk, input clk_enable, output [7:0] uart_tx_byte, output reg uart_tx_signal = 0, input uart_is_transmitting, output reg finished = 0, input [15:0] result);
- reg [2:0] state = `STATE_WRITE_TYPE;
- reg [3:0] tx_hex = 0;
+module WRITER (input clk, input clk_enable, output reg [7:0] uart_tx_byte, output reg uart_tx_signal = 0, input uart_is_transmitting, output reg finished = 0, output [12:0] ram_addr, input [15:0] ram_do, input [12:0] P);
+ reg [1:0] state = `STATE_START;
- hex_to_ascii h2a (.hex(tx_hex), .ascii(uart_tx_byte));
+ reg [12:0] current_index;
+ reg [12:0] freeptr;
+
+ assign ram_addr = current_index;
always @ (posedge clk)
if (clk_enable) begin
uart_tx_signal <= 0;
case(state)
- `STATE_WRITE_TYPE: begin
+ `STATE_START: begin
finished <= 0;
- if(!uart_is_transmitting && !uart_tx_signal) begin
- uart_tx_signal <= 1;
- tx_hex <= {1'b0, result[15:13]};
- state <= `STATE_WRITE1;
- end
+ current_index <= 4;
+ freeptr <= P;
+ state <= `STATE_WRITE1;
end
`STATE_WRITE1: begin
if(!uart_is_transmitting && !uart_tx_signal) begin
uart_tx_signal <= 1;
- tx_hex <= {3'b0, result[12]};
+ uart_tx_byte <= ram_do[15:8];
state <= `STATE_WRITE2;
end
end
`STATE_WRITE2: begin
if(!uart_is_transmitting && !uart_tx_signal) begin
uart_tx_signal <= 1;
- tx_hex <= result[11:8];
- state <= `STATE_WRITE3;
+ uart_tx_byte <= ram_do[7:0];
+ state <= `STATE_INCREMENT;
end
end
- `STATE_WRITE3: begin
- if(!uart_is_transmitting && !uart_tx_signal) begin
- uart_tx_signal <= 1;
- tx_hex <= result[7:4];
- state <= `STATE_WRITE4;
- end
- end
-
- `STATE_WRITE4: begin
- if(!uart_is_transmitting && !uart_tx_signal) begin
- uart_tx_signal <= 1;
- tx_hex <= result[3:0];
+ `STATE_INCREMENT: begin
+ current_index <= current_index + 1;
+ if(current_index >= freeptr) begin
finished <= 1;
- state <= `STATE_WRITE_TYPE;
+ state <= `STATE_START;
+ end else begin
+ state <= `STATE_WRITE1;
end
end
- endcase
+ endcase // case (state)
end
endmodule