summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Stensgård <mastensg@mastensg.net>2025-04-17 23:27:50 +0200
committerMartin Stensgård <mastensg@mastensg.net>2025-04-17 23:27:50 +0200
commit8d52a695879682cc078813a0accd410b94108d53 (patch)
tree1d0dbbcf4c23605fc766f7a88ac4ef6540bec4ee
parent00b7b38383312ed1ca80a12e301d3379c655eef3 (diff)
top: transmit 1 MHz raw PDM
-rw-r--r--README2
-rw-r--r--top.v63
2 files changed, 17 insertions, 48 deletions
diff --git a/README b/README
index 5758c98..9da5f89 100644
--- a/README
+++ b/README
@@ -8,7 +8,7 @@ Raspberry Pi UART
Enable serial communication in raspi-config.
UART
- stty -F /dev/ttyUSB1 1000000 raw cs8
+ stty -F /dev/ttyUSB1 3000000 raw cs8
hexdump -ve '1/1 "%u\n"' /dev/ttyUSB1 | pv > pcm.txt
pv /dev/ttyUSB1 > pcm.raw
diff --git a/top.v b/top.v
index 4b330a9..cb9e729 100644
--- a/top.v
+++ b/top.v
@@ -18,51 +18,24 @@ module top(
reg uart_go = 0;
wire uart_ready;
- rot rot_1(ftdi_rx, {D1, D2, D3, D4});
-
- assign p44 = clk_uart;
- assign p45 = ftdi_tx;
-
- //assign p44 = pdm_clk;
- //assign p45 = pdm_dat;
-
+ clk_div_pdm clk_div_pdm_1(clk, pdm_clk);
clk_div_uart clk_div_uart_1(clk, clk_uart);
uart_tx uart_tx_1(clk_uart, char, uart_go, ftdi_tx, uart_ready);
- // 48 kHz PCM
- reg [7:0] pcm_t = 0;
- reg pcm_clk;
- always @(posedge clk) begin
- pcm_clk <= pcm_t<125;
- pcm_t <= pcm_t<250-1 ? pcm_t+1 : 0;
- end
-
- always @(posedge pcm_clk) char <= pcm;
- assign uart_go = !pcm_clk;
-
- reg led5 = 0;
- assign D5 = led5;
-
- clk_div_pdm clk_div_pdm_1(clk, pdm_clk);
-
- reg [7:0] pdm_t = 0;
- reg [7:0] pcm = 128;
+ reg [2:0] pdm_t = 0;
always @(posedge pdm_clk) begin
- if (pdm_t < 16) begin
- if (pdm_dat && pcm < 255) begin
- pcm <= pcm + 1;
- end else if (!pdm_dat && 0 < pcm) begin
- pcm <= pcm - 1;
- end
- pdm_t <= pdm_t + 1;
- end else begin
- if (pcm < 128)
- pcm <= pcm + 1;
- else
- pcm <= pcm - 1;
- pdm_t <= 0;
- end
+ pdm_t <= pdm_t<7 ? pdm_t+1 : 0;
+ char[pdm_t] <= pdm_dat;
+ uart_go <= pdm_t==7;
end
+
+ assign D1 = 0;
+ assign D2 = 0;
+ assign D3 = 0;
+ assign D4 = 0;
+ assign D5 = 1;
+ assign p44 = 0;
+ assign p45 = 0;
endmodule
module clk_div_pdm(input clk, output reg clk_pdm);
@@ -80,14 +53,10 @@ module rot(input clk, output [3:0] d);
endmodule
module clk_div_uart(input clk, output reg clk_uart);
- reg [10:0] t = 0;
+ reg [3:0] t = 0;
always @(posedge clk) begin
- /*
- t <= t<1250-1 ? t+1 : 0;
- clk_uart <= t<625;
- */
- t <= t<12-1 ? t+1 : 0;
- clk_uart <= t<6;
+ t <= t<4-1 ? t+1 : 0;
+ clk_uart <= t<2;
end
endmodule