Its working! Demo commit
All checks were successful
ci/woodpecker/push/test-workflow Pipeline was successful

We have something at least, audio is working and sounding dang good
This commit is contained in:
Waylon Cude 2025-06-06 01:06:20 -07:00
parent 7980424dc8
commit 35cb264b26
8 changed files with 384152 additions and 7 deletions

View File

@ -216,3 +216,139 @@ set_property -dict {PACKAGE_PIN D12 IOSTANDARD LVCMOS33} [get_ports AUD_SD]
#set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[3] }]; #IO_L2N_T0_D03_14 Sch=qspi_dq[3]
#set_property -dict { PACKAGE_PIN L13 IOSTANDARD LVCMOS33 } [get_ports { QSPI_CSN }]; #IO_L6P_T0_FCS_B_14 Sch=qspi_csn
set_property MARK_DEBUG true [get_nets {audioOutput/pulse_counter_reg[4]}]
set_property MARK_DEBUG true [get_nets {audioOutput/pulse_counter_reg[0]}]
set_property MARK_DEBUG true [get_nets {audioOutput/pulse_counter_reg[1]}]
set_property MARK_DEBUG true [get_nets {audioOutput/pulse_counter_reg[2]}]
set_property MARK_DEBUG true [get_nets {audioOutput/pulse_counter_reg[3]}]
set_property MARK_DEBUG true [get_nets {audioOutput/pulse_counter_reg[5]}]
set_property MARK_DEBUG true [get_nets {audioOutput/pulse_counter_reg[6]}]
set_property MARK_DEBUG true [get_nets {audioOutput/pulse_counter_reg[7]}]
set_property MARK_DEBUG true [get_nets audioOutput/AUD_PWM_TRI]
set_property MARK_DEBUG true [get_nets {audioOutput/D[3]}]
set_property MARK_DEBUG true [get_nets {audioOutput/D[4]}]
set_property MARK_DEBUG true [get_nets {audioOutput/D[5]}]
set_property MARK_DEBUG true [get_nets {audioOutput/D[0]}]
set_property MARK_DEBUG true [get_nets {audioOutput/D[2]}]
set_property MARK_DEBUG true [get_nets {audioOutput/D[6]}]
set_property MARK_DEBUG true [get_nets {audioOutput/D[7]}]
set_property MARK_DEBUG true [get_nets {audioOutput/D[1]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/rom_data[5]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/rom_data[6]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/rom_data[7]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/rom_data[0]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/rom_data[1]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/rom_data[2]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/rom_data[3]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/rom_data[4]}]
set_property MARK_DEBUG true [get_nets romSdPlayer/rom_addr]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[5]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[0]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[1]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[2]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[3]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[4]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[6]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[7]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[8]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[9]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/audio_interface\\.addra[10]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[17]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[5]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[1]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[2]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[12]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[14]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[13]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[15]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[3]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[4]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[6]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[7]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[18]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[16]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[8]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[9]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[10]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/in7[11]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[10]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[0]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[1]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[2]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[3]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[5]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[6]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[13]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[7]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[8]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[9]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[14]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[11]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[12]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[15]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[4]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[16]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[17]}]
set_property MARK_DEBUG true [get_nets {romSdPlayer/xpm_memory_sprom_inst/addra[18]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[0]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[4]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[3]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[8]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[1]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[2]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[9]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[5]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[6]}]
set_property MARK_DEBUG true [get_nets {audioBuffer/buffer/addrb[7]}]
set_property MARK_DEBUG true [get_nets audioClock_n_0]
create_debug_core u_ila_0 ila
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
set_property C_ADV_TRIGGER false [get_debug_cores u_ila_0]
set_property C_DATA_DEPTH 16384 [get_debug_cores u_ila_0]
set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_0]
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0]
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
set_property port_width 1 [get_debug_ports u_ila_0/clk]
connect_debug_port u_ila_0/clk [get_nets [list CLK100MHZ_IBUF_BUFG]]
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
set_property port_width 8 [get_debug_ports u_ila_0/probe0]
connect_debug_port u_ila_0/probe0 [get_nets [list {audioOutput/D[0]} {audioOutput/D[1]} {audioOutput/D[2]} {audioOutput/D[3]} {audioOutput/D[4]} {audioOutput/D[5]} {audioOutput/D[6]} {audioOutput/D[7]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
set_property port_width 18 [get_debug_ports u_ila_0/probe1]
connect_debug_port u_ila_0/probe1 [get_nets [list {romSdPlayer/in7[1]} {romSdPlayer/in7[2]} {romSdPlayer/in7[3]} {romSdPlayer/in7[4]} {romSdPlayer/in7[5]} {romSdPlayer/in7[6]} {romSdPlayer/in7[7]} {romSdPlayer/in7[8]} {romSdPlayer/in7[9]} {romSdPlayer/in7[10]} {romSdPlayer/in7[11]} {romSdPlayer/in7[12]} {romSdPlayer/in7[13]} {romSdPlayer/in7[14]} {romSdPlayer/in7[15]} {romSdPlayer/in7[16]} {romSdPlayer/in7[17]} {romSdPlayer/in7[18]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
set_property port_width 8 [get_debug_ports u_ila_0/probe2]
connect_debug_port u_ila_0/probe2 [get_nets [list {romSdPlayer/rom_data[0]} {romSdPlayer/rom_data[1]} {romSdPlayer/rom_data[2]} {romSdPlayer/rom_data[3]} {romSdPlayer/rom_data[4]} {romSdPlayer/rom_data[5]} {romSdPlayer/rom_data[6]} {romSdPlayer/rom_data[7]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
set_property port_width 11 [get_debug_ports u_ila_0/probe3]
connect_debug_port u_ila_0/probe3 [get_nets [list {romSdPlayer/audio_interface\\.addra[0]} {romSdPlayer/audio_interface\\.addra[1]} {romSdPlayer/audio_interface\\.addra[2]} {romSdPlayer/audio_interface\\.addra[3]} {romSdPlayer/audio_interface\\.addra[4]} {romSdPlayer/audio_interface\\.addra[5]} {romSdPlayer/audio_interface\\.addra[6]} {romSdPlayer/audio_interface\\.addra[7]} {romSdPlayer/audio_interface\\.addra[8]} {romSdPlayer/audio_interface\\.addra[9]} {romSdPlayer/audio_interface\\.addra[10]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
set_property port_width 8 [get_debug_ports u_ila_0/probe4]
connect_debug_port u_ila_0/probe4 [get_nets [list {audioOutput/pulse_counter_reg[0]} {audioOutput/pulse_counter_reg[1]} {audioOutput/pulse_counter_reg[2]} {audioOutput/pulse_counter_reg[3]} {audioOutput/pulse_counter_reg[4]} {audioOutput/pulse_counter_reg[5]} {audioOutput/pulse_counter_reg[6]} {audioOutput/pulse_counter_reg[7]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
set_property port_width 19 [get_debug_ports u_ila_0/probe5]
connect_debug_port u_ila_0/probe5 [get_nets [list {romSdPlayer/xpm_memory_sprom_inst/addra[0]} {romSdPlayer/xpm_memory_sprom_inst/addra[1]} {romSdPlayer/xpm_memory_sprom_inst/addra[2]} {romSdPlayer/xpm_memory_sprom_inst/addra[3]} {romSdPlayer/xpm_memory_sprom_inst/addra[4]} {romSdPlayer/xpm_memory_sprom_inst/addra[5]} {romSdPlayer/xpm_memory_sprom_inst/addra[6]} {romSdPlayer/xpm_memory_sprom_inst/addra[7]} {romSdPlayer/xpm_memory_sprom_inst/addra[8]} {romSdPlayer/xpm_memory_sprom_inst/addra[9]} {romSdPlayer/xpm_memory_sprom_inst/addra[10]} {romSdPlayer/xpm_memory_sprom_inst/addra[11]} {romSdPlayer/xpm_memory_sprom_inst/addra[12]} {romSdPlayer/xpm_memory_sprom_inst/addra[13]} {romSdPlayer/xpm_memory_sprom_inst/addra[14]} {romSdPlayer/xpm_memory_sprom_inst/addra[15]} {romSdPlayer/xpm_memory_sprom_inst/addra[16]} {romSdPlayer/xpm_memory_sprom_inst/addra[17]} {romSdPlayer/xpm_memory_sprom_inst/addra[18]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
set_property port_width 10 [get_debug_ports u_ila_0/probe6]
connect_debug_port u_ila_0/probe6 [get_nets [list {audioBuffer/buffer/addrb[0]} {audioBuffer/buffer/addrb[1]} {audioBuffer/buffer/addrb[2]} {audioBuffer/buffer/addrb[3]} {audioBuffer/buffer/addrb[4]} {audioBuffer/buffer/addrb[5]} {audioBuffer/buffer/addrb[6]} {audioBuffer/buffer/addrb[7]} {audioBuffer/buffer/addrb[8]} {audioBuffer/buffer/addrb[9]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
set_property port_width 1 [get_debug_ports u_ila_0/probe7]
connect_debug_port u_ila_0/probe7 [get_nets [list audioOutput/AUD_PWM_TRI]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
set_property port_width 1 [get_debug_ports u_ila_0/probe8]
connect_debug_port u_ila_0/probe8 [get_nets [list romSdPlayer/rom_addr]]
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
connect_debug_port dbg_hub/clk [get_nets CLK100MHZ_IBUF_BUFG]

View File

@ -196,6 +196,12 @@
<Attr Name="UsedIn" Val="simulation"/>
</FileInfo>
</File>
<File Path="$PPRDIR/roms/even_flow_16.mem">
<FileInfo>
<Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="simulation"/>
</FileInfo>
</File>
<Config>
<Option Name="DesignMode" Val="RTL"/>
<Option Name="TopModule" Val="nexys_a7_top"/>

View File

@ -18,7 +18,7 @@ module pwm(
);
// This can't be 16 or we are slowing the audio rate down by a factor of
// 2^5=32
parameter DEPTH=8;
parameter DEPTH=11;
logic [DEPTH-1:0] pulse_counter;
logic [15:0] sample_buffer;

View File

@ -1,6 +1,6 @@
module modular_clock_gen(
input clk, reset,
output oclk
output logic oclk
);
parameter DIVISOR;
@ -8,7 +8,8 @@ logic [$clog2(DIVISOR)-1:0] counter;
// clock will be high for about half of the cycle, depending on integer
// rounding
assign oclk = counter < (DIVISOR/2);
// OOPS this makes it combinational
//assign oclk = counter < (DIVISOR/2);
always_ff @(posedge clk) begin
if (reset)
@ -17,6 +18,8 @@ always_ff @(posedge clk) begin
counter <= DIVISOR-1;
else
counter <= counter - 1;
oclk <= counter < (DIVISOR/2);
end
endmodule

View File

@ -102,7 +102,7 @@ audio_buffer audioBuffer(
audio_interface.receiver
);
rom_sd romSdPlayer(clk_1mhz,reset,sd_ready,audio_interface.driver);
rom_sd #("even_flow_16.mem") romSdPlayer(clk_1mhz,reset,sd_ready,audio_interface.driver);
endmodule

View File

@ -21,7 +21,7 @@ typedef enum logic [3:0]{
state_t current, next;
// First we write 2048B into the memory buffer, then signal to play it and
// wait for half signal to avoid overwriting memory
logic [16:0] rom_addr;
logic [18:0] rom_addr;
logic [7:0] rom_data;
logic rom_enable;
logic buffer_half;
@ -33,7 +33,7 @@ logic buffer_half;
// The ROM has 17 address bits and 8 data bits to store 128KiB, more than
// enough for one second of 48khz audio
xpm_memory_sprom #(
.ADDR_WIDTH_A(17), // DECIMAL
.ADDR_WIDTH_A(19), // DECIMAL
.AUTO_SLEEP_TIME(0), // DECIMAL
.CASCADE_HEIGHT(0), // DECIMAL
.ECC_BIT_RANGE("7:0"), // String
@ -44,7 +44,7 @@ xpm_memory_sprom #(
.MEMORY_INIT_PARAM(""), // String
.MEMORY_OPTIMIZATION("true"), // String
.MEMORY_PRIMITIVE("auto"), // String
.MEMORY_SIZE(131072*8), // DECIMAL
.MEMORY_SIZE((1<<19)*8), // DECIMAL
.MESSAGE_CONTROL(0), // DECIMAL
.RAM_DECOMP("auto"), // String
.READ_DATA_WIDTH_A(8), // DECIMAL

384000
roms/even_flow_16.mem Normal file

File diff suppressed because it is too large Load Diff

BIN
roms/even_flow_16.raw Normal file

Binary file not shown.