summaryrefslogtreecommitdiff
path: root/par_to_ser.v
diff options
context:
space:
mode:
authoruvok2025-12-26 18:04:26 +0100
committeruvok2025-12-26 18:04:26 +0100
commit40585222bc7c99193a6205a889d9ae00439c2b37 (patch)
tree2e70dfea498eced7bace36e5a6fb2e220fc8872c /par_to_ser.v
parent38cdea6bc8e8fa9122afaf6f9651f2be599179e5 (diff)
Add quick-and-dirty serial/parallel converters
Diffstat (limited to 'par_to_ser.v')
-rw-r--r--par_to_ser.v32
1 files changed, 32 insertions, 0 deletions
diff --git a/par_to_ser.v b/par_to_ser.v
new file mode 100644
index 0000000..a71abec
--- /dev/null
+++ b/par_to_ser.v
@@ -0,0 +1,32 @@
+// parallel to serial converter
+// Learning:
+// I think I need a "start" signal (do_send_i),
+// otherwise I'll never know when to copy the input data
+// to out internal register
+
+module par_to_ser (
+ input rst_i,
+ input clk_i,
+ input do_send_i,
+ input [7:0] dat_i,
+ output reg dat_o
+);
+
+reg sending = 1'b0;
+reg [7:0] send_data = 8'hff;
+
+always @(posedge clk_i or negedge rst_i) begin
+ if (!rst_i) begin
+ dat_o <= 1'b1;
+ end else if (do_send_i && !sending) begin
+ sending <= 1;
+ send_data <= dat_i;
+ end else if (sending) begin
+ dat_o = send_data[0];
+ send_data[6:0] <= send_data[7:1];
+ // arbitrary decision: register is filled with a 1
+ send_data[7] = 1'b1;
+ end
+end
+
+endmodule