EIE4-FYP/rtl/genSaw.sv

40 lines
923 B
Systemverilog

`default_nettype none
module genSaw
( input var i_clk48
, input var i_rst48_n
, input var i_pause
, input var [23:0] i_tf
, output var [47:0] o_lr
, output var o_new_pulse
);
logic [8:0] clk_div;
always_ff @(posedge i_clk48)
if (!i_rst48_n) clk_div <= 0;
else if (clk_div == 9'd500) clk_div <= 0;
else clk_div <= clk_div + 1;
logic clk_48k;
always_ff @(posedge i_clk48)
if (!i_rst48_n) clk_48k <= 0;
else if (clk_div == 9'd500) clk_48k <= ~clk_48k;
logic clk_48k_past;
always_ff @(posedge i_clk48)
clk_48k_past <= clk_48k;
assign o_new_pulse = clk_48k && !clk_48k_past;
logic [23:0] saw_step;
assign saw_step = (24'd699 * i_tf) >> 1;
logic [23:0] waveform;
always_ff @(posedge clk_48k)
if (!i_rst48_n) waveform <= '0;
else if (!i_pause) waveform <= waveform + saw_step;
assign o_lr = {waveform, waveform};
endmodule