// Example program for rle encoder module rle (input clk, input reset, input [6:0] inChar, output [7:0] outChar, output reg valid); reg selCnt, clr, tag; reg [6:0] char; reg [7:0] count; always @(posedge clk) begin char <= inChar; end always @(posedge clk) begin if (clr) count <= 0; else count <= count + 1; end assign outChar = selCnt ? count : { tag, char }; wire equal = inChar == char; localparam START=0, NOTEQUAL=1, EQUAL=2 ; reg [1:0] state, nxtState; always @(posedge clk) begin if (reset) begin state <= START; end else begin state <= nxtState; end end always @(*) begin nxtState = state; case (state) START: begin {tag, selCnt, clr, valid} = 4'bxxx0; nxtState = NOTEQUAL; end NOTEQUAL: begin if (equal) begin {tag, selCnt, clr, valid} = 4'b1011; nxtState = EQUAL; end else begin {tag, selCnt, clr, valid} = 4'b00x1; nxtState = NOTEQUAL; end end EQUAL: begin if (equal) begin {tag, selCnt, clr, valid} = 4'bxx00; nxtState = EQUAL; end else begin {tag, selCnt, clr, valid} = 4'bx1x1; nxtState = NOTEQUAL; end end default: begin {tag, selCnt, clr, valid} = 4'bxxxx; end endcase // case (state) end // always @ (*) endmodule //