summaryrefslogtreecommitdiff
path: root/ser_to_par.v
blob: 0a8c4c4afb0ba1bd4aa91735f51dd21a7df4efc9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// serial to parallel converter
// Learning:
// I don't like this.
// I think I need a signal / way to say "I'm finished"?
// or generally, an enable pin.
//

module ser_to_par #(
  parameter SHIFT_WIDTH = 8
) (
  input rst_i,
  input clk_i,

  input dat_valid_i,
  input dat_i,

  output reg[(SHIFT_WIDTH - 1):0] dat_o,
  // ???
  output dat_valid_o
);

always @(posedge clk_i or negedge rst_i) begin
  if (!rst_i) begin
    dat_o <= 8'b0;
  end else if(dat_valid_i) begin
    // shift into highest bit first, so it is subsequently shifted down
    dat_o[SHIFT_WIDTH - 1] <= dat_i;
    dat_o[(SHIFT_WIDTH - 2):0] <= dat_o[(SHIFT_WIDTH - 1):1];
  end
end

endmodule