add pdm code
diff --git a/info.yaml b/info.yaml
index 8e04ea5..fef0d8b 100644
--- a/info.yaml
+++ b/info.yaml
@@ -5,7 +5,7 @@
source_files: # If using an HDL, set wokwi_id as 0 and uncomment and list your source files here
- verilog/rtl/counter.v
- verilog/rtl/decoder.v
- top_module: "seven_segment_seconds" # put the name of your top module here, make it unique by prepending your github username
+ top_module: "user_module" # put the name of your top module here, make it unique by prepending your github username
# As everyone will have access to all designs, try to make it easy for someone new to your design to know what
# it does and how to operate it.
diff --git a/verilog/rtl/user_module.v b/verilog/rtl/user_module.v
index aea8267..714c20a 100644
--- a/verilog/rtl/user_module.v
+++ b/verilog/rtl/user_module.v
@@ -1,88 +1,56 @@
-/* Automatically generated from https://wokwi.com/projects/334445762078310996 */
-
-`default_nettype none
-
-module user_module_334445762078310996(
- input [7:0] io_in,
- output [7:0] io_out
-);
- wire net1 = 1'b1;
- wire net2 = 1'b0;
- wire net3;
- wire net4;
- wire net5;
- wire net6;
- wire net7;
- wire net8 = 1'b1;
- wire net9 = 1'b0;
- wire net10;
- wire net11;
- wire net12 = 1'b1;
- wire net13 = 1'b0;
- wire net14;
- wire net15 = 1'b1;
- wire net16 = 1'b0;
- wire net17;
- wire net18 = 1'b0;
- wire net19 = 1'b1;
- wire net20;
- wire net21 = 1'b1;
- wire net22;
- wire net23;
- wire net24 = 1'b0;
- wire net25 = 1'b0;
-
- and_cell gate1 (
- .a (net3)
- );
- or_cell gate2 (
-
- );
- xor_cell gate3 (
-
- );
- nand_cell gate4 (
- .a (net4),
- .b (net5),
- .out (net6)
- );
- not_cell gate5 (
- .in (net7),
- .out (net5)
- );
- buffer_cell gate6 (
-
- );
- mux_cell mux1 (
- .a (net8),
- .b (net9),
- .sel (net10),
- .out (net11)
- );
- dff_cell flipflop1 (
-
- );
- mux_cell mux2 (
- .a (net12),
- .b (net13),
- .sel (net10),
- .out (net14)
- );
- mux_cell mux3 (
- .a (net15),
- .b (net16),
- .sel (net10),
- .out (net17)
- );
- mux_cell mux4 (
- .a (net18),
- .b (net19),
- .sel (net10),
- .out (net20)
- );
- and_cell gate7 (
- .a (net22),
- .b (net23),
- .out (net4)
- );
-endmodule
+`default_nettype none
+
+// Top level io for this module should stay the same to fit into the scan_wrapper.
+// The pin connections within the user_module are up to you,
+// although (if one is present) it is recommended to place a clock on io_in[0].
+// This allows use of the internal clock divider if you wish.
+module user_module(
+ input [7:0] io_in,
+ output [7:0] io_out
+);
+
+ wire pdm_out;
+
+ assign io_out[0] = pdm_out;
+ assign io_out[1] = ~pdm_out;
+
+ pdm pdm_core(
+ .pdm_input(io_in[7:3]),
+ .write_en(io_in[2]),
+ .reset(io_in[1]),
+ .clk(io_in[0]),
+ .pdm_out(pdm_out)
+ );
+
+endmodule
+
+// Any submodules should be included in this file,
+// so they are copied into the main TinyTapeout repo.
+// Appending your ID to any submodules you create
+// ensures there are no clashes in full-chip simulation.
+module pdm(
+ input [4:0] pdm_input,
+ input write_en,
+ input clk, reset,
+ output pdm_out
+);
+
+reg [4:0] accumulator;
+reg [4:0] input_reg;
+
+wire [5:0] sum;
+
+assign sum = input_reg + accumulator;
+assign pdm_out = sum[5];
+
+always @(posedge clk or posedge reset) begin
+ if (reset) begin
+ input_reg <= 5'h00 ;
+ accumulator <= 5'h00;
+ end else begin
+ accumulator <= sum[4:0];
+ if (write_en) input_reg <= pdm_input ;
+ end
+end
+
+endmodule
\ No newline at end of file
diff --git a/verilog/rtl/user_module_tb.v b/verilog/rtl/user_module_tb.v
new file mode 100644
index 0000000..77d4c7b
--- /dev/null
+++ b/verilog/rtl/user_module_tb.v
@@ -0,0 +1,67 @@
+`timescale 1ns / 1ps
+//`include "user_module.v"
+
+module user_module_tb;
+
+wire [7:0] io_in;
+wire [7:0] io_out;
+
+reg clk, reset, write_en;
+reg [4:0] pdm_input;
+
+assign io_in = {pdm_input, write_en, reset, clk};
+
+user_module UUT (.io_in(io_in), .io_out(io_out));
+
+initial begin
+ $dumpfile("user_module_tb.vcd");
+ $dumpvars(0, user_module_tb);
+end
+
+initial begin
+ #100_000_000; // Wait a long time in simulation units (adjust as needed).
+ $display("Caught by trap");
+ $finish;
+ end
+
+parameter CLK_HALF_PERIOD = 5;
+parameter TCLK = 2*CLK_HALF_PERIOD;
+always begin
+ clk = 1'b1;
+ #(CLK_HALF_PERIOD);
+ clk = 1'b0;
+ #(CLK_HALF_PERIOD);
+end
+
+initial
+begin
+ #20
+ reset = 1;
+ #(CLK_HALF_PERIOD);
+ reset = 0;
+end
+
+initial begin
+ write_en = 0;
+ pdm_input = 5'h00;
+ #(CLK_HALF_PERIOD);
+ #(5*TCLK)
+ write_en = 1;
+ pdm_input= 5'h08;
+ #(TCLK);
+ write_en = 0;
+ #(63*TCLK);
+ write_en = 1;
+ pdm_input= 5'h1a;
+ #(TCLK);
+ write_en = 0;
+ #(63*TCLK);
+ write_en = 1;
+ pdm_input= 5'h0f;
+ #(64*TCLK);
+ pdm_input= 5'h04;
+ #(64*TCLK);
+ $finish;
+end
+
+endmodule
diff --git a/verilog/rtl/wokwi_diagram.json b/verilog/rtl/wokwi_diagram.json
deleted file mode 100644
index 357c5bd..0000000
--- a/verilog/rtl/wokwi_diagram.json
+++ /dev/null
@@ -1,167 +0,0 @@
-{
- "version": 1,
- "author": "Uri Shaked",
- "editor": "wokwi",
- "parts": [
- {
- "type": "wokwi-dip-switch-8",
- "id": "sw1",
- "top": 31.3,
- "left": -45.8,
- "rotate": 90,
- "attrs": {}
- },
- { "type": "wokwi-vcc", "id": "pwr1", "top": -124.04, "left": -134.4, "attrs": {} },
- { "type": "wokwi-gnd", "id": "gnd1", "top": 67.2, "left": 681, "attrs": {} },
- { "type": "wokwi-gate-and-2", "id": "gate1", "top": -211.2, "left": -96, "attrs": {} },
- { "type": "wokwi-gate-or-2", "id": "gate2", "top": -276.8, "left": 148.67, "attrs": {} },
- { "type": "wokwi-gate-xor-2", "id": "gate3", "top": -276.8, "left": 13.2, "attrs": {} },
- { "type": "wokwi-gate-nand-2", "id": "gate4", "top": 364.8, "left": 201.6, "attrs": {} },
- { "type": "wokwi-gate-not", "id": "gate5", "top": 393.6, "left": 96, "attrs": {} },
- { "type": "wokwi-gate-buffer", "id": "gate6", "top": -181.2, "left": 55.2, "attrs": {} },
- { "type": "wokwi-mux-2", "id": "mux1", "top": -67.2, "left": 86.4, "attrs": {} },
- {
- "type": "wokwi-flip-flop-d",
- "id": "flipflop1",
- "top": -323.6,
- "left": -244.13,
- "attrs": {}
- },
- {
- "type": "wokwi-clock-generator",
- "id": "clkgen1",
- "top": -256.93,
- "left": -250,
- "attrs": {}
- },
- {
- "type": "wokwi-led-bar-graph",
- "id": "bargraph1",
- "top": -62.4,
- "left": 600,
- "attrs": { "color": "lime" }
- },
- { "type": "wokwi-vcc", "id": "pwr2", "top": -124.04, "left": 57.6, "attrs": {} },
- { "type": "wokwi-vcc", "id": "pwr3", "top": -268.04, "left": -28.8, "attrs": {} },
- { "type": "wokwi-gnd", "id": "gnd2", "top": -18.71, "left": 76.2, "attrs": {} },
- { "type": "wokwi-mux-2", "id": "mux2", "top": -9.6, "left": 172.8, "attrs": {} },
- { "type": "wokwi-mux-2", "id": "mux3", "top": 57.6, "left": 240, "attrs": {} },
- { "type": "wokwi-mux-2", "id": "mux4", "top": 144, "left": 326.4, "attrs": {} },
- { "type": "wokwi-vcc", "id": "pwr4", "top": 19.96, "left": 230.4, "attrs": {} },
- { "type": "wokwi-vcc", "id": "pwr5", "top": 165.84, "left": 317, "rotate": 180, "attrs": {} },
- { "type": "wokwi-vcc", "id": "pwr6", "top": -37.64, "left": 163.2, "attrs": {} },
- { "type": "wokwi-gnd", "id": "gnd3", "top": 28.8, "left": 162.6, "attrs": {} },
- { "type": "wokwi-gnd", "id": "gnd4", "top": 96, "left": 229.8, "attrs": {} },
- { "type": "wokwi-gnd", "id": "gnd5", "top": 101, "left": 325.2, "rotate": 180, "attrs": {} },
- {
- "type": "wokwi-dip-switch-8",
- "id": "sw2",
- "top": 342.76,
- "left": -65.04,
- "rotate": 90,
- "attrs": {}
- },
- { "type": "wokwi-vcc", "id": "pwr7", "top": 298.36, "left": -67.2, "attrs": {} },
- { "type": "wokwi-gate-and-2", "id": "gate7", "top": 326.4, "left": 96, "attrs": {} },
- {
- "type": "wokwi-resistor",
- "id": "r1",
- "top": -27.98,
- "left": 9.21,
- "rotate": 90,
- "attrs": { "value": "1000" }
- },
- {
- "type": "wokwi-gnd",
- "id": "gnd7",
- "top": -95.97,
- "left": -1.54,
- "rotate": 180,
- "attrs": {}
- },
- {
- "type": "wokwi-resistor",
- "id": "r2",
- "top": 278.2,
- "left": -2.2,
- "rotate": 90,
- "attrs": { "value": "1000" }
- },
- {
- "type": "wokwi-resistor",
- "id": "r3",
- "top": 278.2,
- "left": 26.6,
- "rotate": 90,
- "attrs": { "value": "1000" }
- },
- {
- "type": "wokwi-resistor",
- "id": "r4",
- "top": 278.2,
- "left": 55.4,
- "rotate": 90,
- "attrs": { "value": "1000" }
- },
- { "type": "wokwi-gnd", "id": "gnd8", "top": 216.2, "left": 47.8, "rotate": 180, "attrs": {} }
- ],
- "connections": [
- [ "mux1:OUT", "bargraph1:A1", "green", [ "v0" ] ],
- [ "pwr1:VCC", "sw1:1a", "red", [ "v0" ] ],
- [ "pwr2:VCC", "mux1:A", "red", [ "v0" ] ],
- [ "mux1:B", "gnd2:GND", "green", [ "h0" ] ],
- [ "bargraph1:C1", "bargraph1:C2", "green", [ "v0" ] ],
- [ "bargraph1:C2", "bargraph1:C3", "green", [ "h0" ] ],
- [ "bargraph1:C3", "bargraph1:C4", "green", [ "h0" ] ],
- [ "bargraph1:C4", "bargraph1:C5", "green", [ "h0" ] ],
- [ "bargraph1:C5", "bargraph1:C6", "green", [ "h0" ] ],
- [ "bargraph1:C6", "bargraph1:C7", "green", [ "h0" ] ],
- [ "bargraph1:C7", "bargraph1:C8", "green", [ "h0" ] ],
- [ "bargraph1:C8", "bargraph1:C9", "green", [ "h0" ] ],
- [ "bargraph1:C10", "bargraph1:C9", "green", [ "h0" ] ],
- [ "bargraph1:C10", "gnd1:GND", "green", [ "h0" ] ],
- [ "sw1:1b", "mux1:SEL", "green", [ "h0" ] ],
- [ "pwr6:VCC", "mux2:A", "red", [ "v0" ] ],
- [ "gnd3:GND", "mux2:B", "black", [ "v0" ] ],
- [ "pwr4:VCC", "mux3:A", "red", [ "v0" ] ],
- [ "gnd4:GND", "mux3:B", "black", [ "v0" ] ],
- [ "gnd5:GND", "mux4:A", "black", [ "v0" ] ],
- [ "pwr5:VCC", "mux4:B", "red", [ "v0" ] ],
- [ "sw1:1b", "mux2:SEL", "green", [ "h0" ] ],
- [ "sw1:1b", "mux3:SEL", "green", [ "h0" ] ],
- [ "sw1:1b", "mux4:SEL", "green", [ "h0" ] ],
- [ "mux2:OUT", "bargraph1:A2", "green", [ "v0" ] ],
- [ "mux3:OUT", "bargraph1:A3", "green", [ "v0" ] ],
- [ "mux4:OUT", "bargraph1:A4", "green", [ "v0" ] ],
- [ "pwr7:VCC", "sw2:1a", "red", [ "v0" ] ],
- [ "sw1:1a", "sw1:2a", "green", [ "h0" ] ],
- [ "sw1:2a", "sw1:3a", "green", [ "h0" ] ],
- [ "sw2:1a", "sw2:2a", "green", [ "h0" ] ],
- [ "sw2:2a", "sw2:3a", "green", [ "h0" ] ],
- [ "sw2:3a", "sw2:4a", "green", [ "h0" ] ],
- [ "sw2:4a", "sw2:5a", "green", [ "h0" ] ],
- [ "sw2:5a", "sw2:6a", "green", [ "h0" ] ],
- [ "sw2:6a", "sw2:7a", "green", [ "h0" ] ],
- [ "sw2:7a", "sw2:8a", "green", [ "h0" ] ],
- [ "sw2:1b", "gate7:A", "green", [ "h0" ] ],
- [ "sw2:2b", "gate7:B", "green", [ "h0" ] ],
- [ "sw2:3b", "gate5:IN", "green", [ "h0" ] ],
- [ "gate5:OUT", "gate4:B", "green", [ "v0" ] ],
- [ "gate7:OUT", "gate4:A", "green", [ "v0" ] ],
- [ "r1:2", "sw1:1b", "green", [ "h1.74", "v16.62" ] ],
- [ "gnd7:GND", "r1:1", "black", [ "v0" ] ],
- [ "r2:1", "gnd8:GND", "green", [ "h0" ] ],
- [ "r4:1", "r3:1", "green", [ "h0" ] ],
- [ "r3:1", "r2:1", "green", [ "h0" ] ],
- [
- "gate1:A",
- "clkgen1:CLK",
- "green",
- [ "h0", "v-48", "h-28.8", "v67.2", "h-57.6", "v38.4", "h-28.8", "v-57.6", "h28.8" ]
- ],
- [ "r2:2", "sw2:1b", "green", [ "h-9.6", "v17.8" ] ],
- [ "r3:2", "sw2:2b", "green", [ "h-9.6", "v27.4" ] ],
- [ "r4:2", "sw2:3b", "green", [ "h-9.6", "v27.4" ] ],
- [ "bargraph1:A8", "gate4:OUT", "green", [ "h-37.9", "v305.65", "h-269.3" ] ]
- ]
-}
\ No newline at end of file