mirror of
https://github.com/trcwm/Speech256.git
synced 2025-06-07 16:48:32 +02:00
8-bit PWM dac
This commit is contained in:
parent
70b80d4154
commit
8e3de97977
70
verilog/pwmdac/pwmdac.v
Normal file
70
verilog/pwmdac/pwmdac.v
Normal file
@ -0,0 +1,70 @@
|
||||
//
|
||||
// Very simple, i.e. 8-bit non noise-shaping pulse-width modulation (PWM) DAC.
|
||||
// The DAC has a pull interface.
|
||||
//
|
||||
// Niels Moseley - Moseley Instruments 2017
|
||||
// http://www.moseleyinstruments.com
|
||||
//
|
||||
|
||||
module PWMDAC (
|
||||
clk,
|
||||
rst_an,
|
||||
din,
|
||||
din_ack,
|
||||
dacout
|
||||
);
|
||||
|
||||
//////////// CLOCK //////////
|
||||
input clk;
|
||||
|
||||
//////////// RESET, ACTIVE LOW //////////
|
||||
input rst_an;
|
||||
|
||||
//////////// DAC OUTPUT //////////
|
||||
output reg dacout;
|
||||
|
||||
//////////// DATA BUS //////////
|
||||
input signed [7:0] din;
|
||||
output reg din_ack; // is high for 1 clock cycle after reading the din signal
|
||||
|
||||
|
||||
// internal counter and data registers
|
||||
reg signed [7:0] counter;
|
||||
reg signed [7:0] data;
|
||||
|
||||
always @(posedge clk, negedge rst_an)
|
||||
begin
|
||||
if (rst_an == 0)
|
||||
begin
|
||||
// reset values
|
||||
counter <= 0;
|
||||
dacout <= 0;
|
||||
din_ack <= 0;
|
||||
data <= 0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// increment counter
|
||||
counter <= counter + 8'b00000001;
|
||||
|
||||
// compare counter with data
|
||||
// and set output accordingly.
|
||||
if (data > counter)
|
||||
dacout <= 1;
|
||||
else
|
||||
dacout <= 0;
|
||||
|
||||
// load new data into DAC when
|
||||
// counter is 255
|
||||
if (counter == 8'h7F)
|
||||
begin
|
||||
data <= din;
|
||||
din_ack <= 1;
|
||||
end
|
||||
else
|
||||
din_ack <= 0;
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
37
verilog/pwmdac/pwmdac_tb.v
Normal file
37
verilog/pwmdac/pwmdac_tb.v
Normal file
@ -0,0 +1,37 @@
|
||||
//
|
||||
// PWMDAC testbench
|
||||
//
|
||||
// Niels Moseley - Moseley Instruments 2017
|
||||
// http://www.moseleyinstruments.com
|
||||
//
|
||||
|
||||
module PWMDAC_TB;
|
||||
reg clk, rst_an;
|
||||
reg signed [0:7] din;
|
||||
wire dacout, din_ack;
|
||||
|
||||
PWMDAC u_pwmdac (
|
||||
.clk (clk),
|
||||
.rst_an (rst_an),
|
||||
.din (din),
|
||||
.din_ack (din_ack),
|
||||
.dacout (dacout)
|
||||
);
|
||||
|
||||
initial
|
||||
begin
|
||||
$dumpfile ("pwmdac.vcd");
|
||||
$dumpvars;
|
||||
clk = 0;
|
||||
rst_an = 0;
|
||||
din = 0;
|
||||
#3
|
||||
rst_an = 1;
|
||||
#10240
|
||||
$finish;
|
||||
end
|
||||
|
||||
always
|
||||
#5 clk = !clk;
|
||||
|
||||
endmodule
|
5
verilog/pwmdac/run_tb.bat
Normal file
5
verilog/pwmdac/run_tb.bat
Normal file
@ -0,0 +1,5 @@
|
||||
mkdir bin
|
||||
C:\iverilog\bin\iverilog -o bin\pwmdac.vvp -g2005 -s PWMDAC_TB pwmdac.v pwmdac_tb.v
|
||||
cd bin
|
||||
C:\iverilog\bin\vvp pwmdac.vvp
|
||||
cd ..
|
Loading…
x
Reference in New Issue
Block a user