blob: 4a3d107c48c9d7902ded2a2f56c1293cb9b8be5b [file] [log] [blame]
module serialout (
input wire clk,
input wire [7:0] data,
output wire sclk,
output reg sdata,
input wire sdatain,
output wire sdata_pl,
output reg [7:0] btout
);
reg[22:0] clk_cnt = 0;
always @(posedge clk) begin
clk_cnt <= clk_cnt+1;
end
reg [3:0] ser_bit = 4'b0;
wire ref_clk = clk_cnt[20];
wire ser_clk = clk_cnt[10];
reg tx = 0, rt = 0;
assign sclk = ser_clk & tx;
assign sdata_pl = tx;
initial btout <= 8'b0;
always @(negedge ser_clk) begin
case (ser_bit)
0: begin
sdata <= data[0];
ser_bit <= 1;
tx <= 1;
btout[0] <= sdatain;
end
1: begin
sdata <= data[1];
ser_bit <= 2;
btout[1] <= sdatain;
end
2: begin
sdata <= data[2];
ser_bit <= 3;
btout[2] <= sdatain;
end
3: begin
sdata <= data[3];
ser_bit <= 4;
btout[3] <= sdatain;
end
4: begin
sdata <= data[4];
ser_bit <= 5;
btout[4] <= sdatain;
end
5: begin
sdata <= data[5];
ser_bit <= 6;
btout[5] <= sdatain;
end
6: begin
sdata <= data[6];
ser_bit <= 7;
btout[6] <= sdatain;
end
7: begin
sdata <= data[7];
ser_bit <= 8;
btout[7] <= sdatain;
end
8: begin
tx <= 0;
if (ref_clk && ~rt) begin
ser_bit <= 0;
rt <= 1;
end else if (~ref_clk) begin
rt <= 0;
end
end
endcase
end
endmodule