From 2cd5d89e871934c3067a0629653590e25a72a7d4 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 9 Jun 2021 11:04:53 +0200 Subject: [PATCH] initial commit --- .gitmodules | 3 + 4-bit-counter-cocotb/.vscode/settings.json | 3 + 4-bit-counter-cocotb/hdl/counter.sv | 29 +++ 4-bit-counter-cocotb/tests/Makefile | 49 +++++ .../test_counter.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3891 bytes 4-bit-counter-cocotb/tests/dump.vcd | 183 ++++++++++++++++++ 4-bit-counter-cocotb/tests/results.xml | 9 + 4-bit-counter-cocotb/tests/sim_build/cmds.f | 1 + 4-bit-counter-cocotb/tests/sim_build/sim.vvp | 79 ++++++++ 4-bit-counter-cocotb/tests/test_counter.py | 98 ++++++++++ 4-bit-counter-myhdl/.vscode/settings.json | 3 + .../counter_4bit_conv.cpython-38.pyc | Bin 0 -> 954 bytes .../counter_4bit_tb.cpython-38.pyc | Bin 0 -> 2300 bytes 4-bit-counter-myhdl/counter_4bit.v | 46 +++++ 4-bit-counter-myhdl/counter_4bit_conv.py | 33 ++++ 4-bit-counter-myhdl/counter_4bit_tb.py | 133 +++++++++++++ 4-bit-counter-myhdl/counter_reference.v | 23 +++ 4-bit-counter-myhdl/main.py | 10 + 4-bit-counter-myhdl/run.tcl | 22 +++ 4-bit-counter-myhdl/tb_counter_4bit.lxt | Bin 0 -> 627 bytes 4-bit-counter-myhdl/tb_counter_4bit.v | 38 ++++ 4-bit-counter-myhdl/tb_counter_4bit.vvp | 88 +++++++++ 7Segment_Lattice_ice40_UltraPlus | 1 + README.md | 4 +- digitaler-filter-cocotb/.gitignore | 4 + digitaler-filter-cocotb/Makefile | 12 ++ .../__pycache__/test.cpython-38.pyc | Bin 0 -> 1046 bytes digitaler-filter-cocotb/filter.v | 99 ++++++++++ digitaler-filter-cocotb/hello.wav | Bin 0 -> 76108 bytes digitaler-filter-cocotb/out.wav | Bin 0 -> 76108 bytes digitaler-filter-cocotb/test.py | 32 +++ digitaler-filter-cocotb/test.sh | 4 + digitaler-filter-cocotb/top.v | 18 ++ digitaler-filter-cocotb/top_coco.gtkw | 28 +++ 34 files changed, 1050 insertions(+), 2 deletions(-) create mode 100644 .gitmodules create mode 100644 4-bit-counter-cocotb/.vscode/settings.json create mode 100644 4-bit-counter-cocotb/hdl/counter.sv create mode 100644 4-bit-counter-cocotb/tests/Makefile create mode 100644 4-bit-counter-cocotb/tests/__pycache__/test_counter.cpython-38-pytest-6.2.4.pyc create mode 100644 4-bit-counter-cocotb/tests/dump.vcd create mode 100644 4-bit-counter-cocotb/tests/results.xml create mode 100644 4-bit-counter-cocotb/tests/sim_build/cmds.f create mode 100755 4-bit-counter-cocotb/tests/sim_build/sim.vvp create mode 100644 4-bit-counter-cocotb/tests/test_counter.py create mode 100644 4-bit-counter-myhdl/.vscode/settings.json create mode 100644 4-bit-counter-myhdl/__pycache__/counter_4bit_conv.cpython-38.pyc create mode 100644 4-bit-counter-myhdl/__pycache__/counter_4bit_tb.cpython-38.pyc create mode 100644 4-bit-counter-myhdl/counter_4bit.v create mode 100644 4-bit-counter-myhdl/counter_4bit_conv.py create mode 100644 4-bit-counter-myhdl/counter_4bit_tb.py create mode 100644 4-bit-counter-myhdl/counter_reference.v create mode 100644 4-bit-counter-myhdl/main.py create mode 100644 4-bit-counter-myhdl/run.tcl create mode 100644 4-bit-counter-myhdl/tb_counter_4bit.lxt create mode 100644 4-bit-counter-myhdl/tb_counter_4bit.v create mode 100755 4-bit-counter-myhdl/tb_counter_4bit.vvp create mode 160000 7Segment_Lattice_ice40_UltraPlus create mode 100644 digitaler-filter-cocotb/.gitignore create mode 100644 digitaler-filter-cocotb/Makefile create mode 100644 digitaler-filter-cocotb/__pycache__/test.cpython-38.pyc create mode 100644 digitaler-filter-cocotb/filter.v create mode 100644 digitaler-filter-cocotb/hello.wav create mode 100644 digitaler-filter-cocotb/out.wav create mode 100644 digitaler-filter-cocotb/test.py create mode 100755 digitaler-filter-cocotb/test.sh create mode 100644 digitaler-filter-cocotb/top.v create mode 100644 digitaler-filter-cocotb/top_coco.gtkw diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..5d1e0dc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "7Segment_Lattice_ice40_UltraPlus"] + path = 7Segment_Lattice_ice40_UltraPlus + url = https://git.efi.th-nuernberg.de/gitea/schmidtsi76327/7Segment_Lattice_ice40_UltraPlus diff --git a/4-bit-counter-cocotb/.vscode/settings.json b/4-bit-counter-cocotb/.vscode/settings.json new file mode 100644 index 0000000..615aafb --- /dev/null +++ b/4-bit-counter-cocotb/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/usr/bin/python3" +} \ No newline at end of file diff --git a/4-bit-counter-cocotb/hdl/counter.sv b/4-bit-counter-cocotb/hdl/counter.sv new file mode 100644 index 0000000..8c6ea9b --- /dev/null +++ b/4-bit-counter-cocotb/hdl/counter.sv @@ -0,0 +1,29 @@ +////////////////////////////////////////////////////////////// +// 4-bit loadable up-down counter ////// +////////////////////////////////////////////////////////////// + +module counter(clk, rst, data, updown, load, data_out); + + input clk, rst, load; + input updown; + input [3:0] data; + + output reg [3:0] data_out; + + always @(posedge clk) + begin + if(rst) + data_out <= 4'b0; + else if(load) + data_out <= data; + else + data_out <= ((updown)?(data_out + 1'b1):(data_out -1'b1)); + end + + // Dump waves + initial begin + $dumpfile("dump.vcd"); + $dumpvars(1, counter); + end + +endmodule diff --git a/4-bit-counter-cocotb/tests/Makefile b/4-bit-counter-cocotb/tests/Makefile new file mode 100644 index 0000000..8359ad6 --- /dev/null +++ b/4-bit-counter-cocotb/tests/Makefile @@ -0,0 +1,49 @@ +############################################################################### +# Copyright (c) 2013 Potential Ventures Ltd +# Copyright (c) 2013 SolarFlare Communications Inc +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of Potential Ventures Ltd, +# SolarFlare Communications Inc nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL POTENTIAL VENTURES LTD BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +############################################################################### + +TOPLEVEL_LANG ?= verilog + +PWD=$(shell pwd) + +ifeq ($(TOPLEVEL_LANG),verilog) + VERILOG_SOURCES = $(PWD)/../hdl/counter.sv +else ifeq ($(TOPLEVEL_LANG),vhdl) + VHDL_SOURCES = $(PWD)/../hdl/counter.vhdl +else + $(error "A valid value (verilog or vhdl) was not provided for TOPLEVEL_LANG=$(TOPLEVEL_LANG)") +endif + +TOPLEVEL := counter +MODULE := test_counter + +include $(shell cocotb-config --makefiles)/Makefile.sim + +clean:: + rm -rf dump.vcd results.xml + diff --git a/4-bit-counter-cocotb/tests/__pycache__/test_counter.cpython-38-pytest-6.2.4.pyc b/4-bit-counter-cocotb/tests/__pycache__/test_counter.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2e81f574b00ffcb1ee990b0f70c56297ab6fa78 GIT binary patch literal 3891 zcmb`JO^h5z700XkdwRZS?e#hsm;ebLz`I_1y>1eBd0!afJ;{5%wbRYzt=t9-cdpbVpjdS-g{NG zRn_&YfBmRj_62@_edEtR{h%PkKgr4eOgJy$3EzcLLdl_MOMV+8(-2aOthO!FjMH|I zF^2BQYkM3shlP>f_D98baa3xTvU=rqIdJBcg;18Ve3qW=>C1i|ps( zP0wHOgcW2W5sQITQW?tpwKR^4>e4y^$Ex z@EA)x9rvT~gceYfIhLo!-d;;SYCL!K=;8HN*xcJ|Qt@UhOw8UmY8i=%L>uPjqe?dn z108XNTdk0Sw_0o3p#II?@Gxg} z$K42-mYbN0M%ANTsLL2@yGZ{so%D?)=WM5$w3D5@vwJM`SJ3qI?$(3JDA)@7qpf}~ z*tx!i#n{@pcE2B8>rJMZvBsMgYm25Fvh8G<&7+4&gI6L8U~*v)(KZjMb79nE1y9ZJ zWoj+qVN<*+N}?h>Wc1fi>l`OI7EmYSS2fZbUbGXv2=Y;e>^ zIZssaybrGgKFmRx=onOHc5I`iF>_+)i41q6>bwR{9MIxXhG{88^?8G7`2+H6G1%1~ zqI7{uprycN(86ykd)uJLf7$u^H`huz16A+aV9G`8qAJno2IWEJJ)z36@t*iC z`cjokLRDjz+4G`x)VvgXIrdEA505>=Q3=Ls_q2nh)%1ZhEi$vEiMx|3xkZ>``RD5ZW#7EOWA1U?S*1!{1S%sQD%WH!iLCi4uL zFOazcgHs{nHXYI^JkVdH*v6vNzzDjT>8?NCFv8N(h>CM;dw_~1)KUd>Yn40HVLuG`t>_-i5&@nCbEd5 zrzJx%ZHSqXHMgN}<|5_KLChr)Ru1c(H!nc%{8aC_x3nH{>9X>41Z>4zONv9ku>s&)X#H`l;ff*F~=Tam%uJYIH(S4;JEUX z<0?3=#U689h&E93a$Lwbc9#s}?cg+6S)CZ`eOq81R#xe)ca;m`>yPSh;@ECtlQbEk z=JeMx2g3RRsIT9iR>^~`UcgzNoI%4Ei$`gNTG7P)XwpO z1BRv>(p-c^sQ9u0R4S>I0UJwJa@fR-O${|XslSajpAOI8{u4Y)pv)8_W#D3HVbj>k zBy<3d5jk^Q*XCXh9ESz2K=pFqkl^KfczIy|+cp{6QBj#0XblFf#GsWKvXKReY{K*lRQdnF7YkOCI(v}}N!R~Kml|ZzZ3Jt1(teRAZ4Yf* zYl*kKZnGLEmpkbNeKVC`T$(p^@V4$pxNJWSLF&_3s^xSwXqVEf?q+(mre#g4St!!| z0~}GIHWAI;3+S9nEIK>*F3ZBn2Y{xrZdjSU?~EpDIt=d8&Isx1;E9ItAjTIA P&v2w)$5X{~*^wUuDNAVW literal 0 HcmV?d00001 diff --git a/4-bit-counter-cocotb/tests/dump.vcd b/4-bit-counter-cocotb/tests/dump.vcd new file mode 100644 index 0000000..2db6176 --- /dev/null +++ b/4-bit-counter-cocotb/tests/dump.vcd @@ -0,0 +1,183 @@ +$date + Tue Jun 8 18:10:07 2021 +$end +$version + Icarus Verilog +$end +$timescale + 1ps +$end +$scope module counter $end +$var wire 1 ! clk $end +$var wire 4 " data [3:0] $end +$var wire 1 # load $end +$var wire 1 $ rst $end +$var wire 1 % updown $end +$var reg 4 & data_out [3:0] $end +$upscope $end +$enddefinitions $end +#0 +$dumpvars +bx & +z% +z$ +z# +bz " +1! +$end +#5000000 +0! +#10000000 +1$ +1! +#15000000 +0! +#20000000 +b0 & +1! +#25000000 +0! +#30000000 +1! +#35000000 +0! +#40000000 +1! +#40000001 +0$ +1# +b1110 " +#45000001 +0! +#50000001 +b1110 & +1! +#55000001 +0! +#55000002 +b0 & +1$ +0# +1% +b1100 " +1! +#60000002 +0$ +0! +#65000002 +b1 & +1! +#70000002 +0! +#75000002 +b10 & +1! +#80000002 +0! +#85000002 +b11 & +1! +#90000002 +0! +#95000002 +b100 & +1! +#100000002 +0! +#105000002 +b101 & +1! +#110000002 +0! +#115000002 +b110 & +1! +#120000002 +0! +#125000002 +b111 & +1! +#130000002 +0! +#135000002 +b1000 & +1! +#140000002 +0! +#145000002 +b1001 & +1! +#150000002 +0! +#155000002 +b1010 & +1! +#160000002 +0! +#160000003 +b0 & +1$ +0% +b1110 " +1! +#165000003 +0$ +1# +0! +#170000003 +b1110 & +1! +#175000003 +0# +0! +#180000003 +b1101 & +1! +#185000003 +0! +#190000003 +b1100 & +1! +#195000003 +0! +#200000003 +b1011 & +1! +#205000003 +0! +#210000003 +b1010 & +1! +#215000003 +0! +#220000003 +b1001 & +1! +#225000003 +0! +#230000003 +b1000 & +1! +#235000003 +0! +#240000003 +b111 & +1! +#245000003 +0! +#250000003 +b110 & +1! +#255000003 +0! +#260000003 +b101 & +1! +#265000003 +0! +#270000003 +b100 & +1! +#275000003 +0! +#275000004 diff --git a/4-bit-counter-cocotb/tests/results.xml b/4-bit-counter-cocotb/tests/results.xml new file mode 100644 index 0000000..aa66b42 --- /dev/null +++ b/4-bit-counter-cocotb/tests/results.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/4-bit-counter-cocotb/tests/sim_build/cmds.f b/4-bit-counter-cocotb/tests/sim_build/cmds.f new file mode 100644 index 0000000..3e26e00 --- /dev/null +++ b/4-bit-counter-cocotb/tests/sim_build/cmds.f @@ -0,0 +1 @@ ++timescale+1ns/1ps diff --git a/4-bit-counter-cocotb/tests/sim_build/sim.vvp b/4-bit-counter-cocotb/tests/sim_build/sim.vvp new file mode 100755 index 0000000..a751c79 --- /dev/null +++ b/4-bit-counter-cocotb/tests/sim_build/sim.vvp @@ -0,0 +1,79 @@ +#! /usr/local/bin/vvp +:ivl_version "12.0 (devel)" "(s20150603-1130-g1f8876be)"; +:ivl_delay_selection "TYPICAL"; +:vpi_time_precision - 12; +:vpi_module "/usr/local/lib/ivl/system.vpi"; +:vpi_module "/usr/local/lib/ivl/vhdl_sys.vpi"; +:vpi_module "/usr/local/lib/ivl/vhdl_textio.vpi"; +:vpi_module "/usr/local/lib/ivl/v2005_math.vpi"; +:vpi_module "/usr/local/lib/ivl/va_math.vpi"; +:vpi_module "/usr/local/lib/ivl/v2009.vpi"; +S_0x55fb04b57e00 .scope package, "$unit" "$unit" 2 1; + .timescale -9 -12; +S_0x55fb04b57f90 .scope module, "counter" "counter" 3 5; + .timescale -9 -12; + .port_info 0 /INPUT 1 "clk"; + .port_info 1 /INPUT 1 "rst"; + .port_info 2 /INPUT 4 "data"; + .port_info 3 /INPUT 1 "updown"; + .port_info 4 /INPUT 1 "load"; + .port_info 5 /OUTPUT 4 "data_out"; +o0x7f9f460c2018 .functor BUFZ 1, C4; HiZ drive +v0x55fb04b7dc80_0 .net "clk", 0 0, o0x7f9f460c2018; 0 drivers +o0x7f9f460c2048 .functor BUFZ 4, C4; HiZ drive +v0x55fb04ba0930_0 .net "data", 3 0, o0x7f9f460c2048; 0 drivers +v0x55fb04ba0a10_0 .var "data_out", 3 0; +o0x7f9f460c20a8 .functor BUFZ 1, C4; HiZ drive +v0x55fb04ba0ad0_0 .net "load", 0 0, o0x7f9f460c20a8; 0 drivers +o0x7f9f460c20d8 .functor BUFZ 1, C4; HiZ drive +v0x55fb04ba0b90_0 .net "rst", 0 0, o0x7f9f460c20d8; 0 drivers +o0x7f9f460c2108 .functor BUFZ 1, C4; HiZ drive +v0x55fb04ba0ca0_0 .net "updown", 0 0, o0x7f9f460c2108; 0 drivers +E_0x55fb04b905c0 .event posedge, v0x55fb04b7dc80_0; + .scope S_0x55fb04b57f90; +T_0 ; + %wait E_0x55fb04b905c0; + %load/vec4 v0x55fb04ba0b90_0; + %flag_set/vec4 8; + %jmp/0xz T_0.0, 8; + %pushi/vec4 0, 0, 4; + %assign/vec4 v0x55fb04ba0a10_0, 0; + %jmp T_0.1; +T_0.0 ; + %load/vec4 v0x55fb04ba0ad0_0; + %flag_set/vec4 8; + %jmp/0xz T_0.2, 8; + %load/vec4 v0x55fb04ba0930_0; + %assign/vec4 v0x55fb04ba0a10_0, 0; + %jmp T_0.3; +T_0.2 ; + %load/vec4 v0x55fb04ba0ca0_0; + %flag_set/vec4 8; + %jmp/0 T_0.4, 8; + %load/vec4 v0x55fb04ba0a10_0; + %addi 1, 0, 4; + %jmp/1 T_0.5, 8; +T_0.4 ; End of true expr. + %load/vec4 v0x55fb04ba0a10_0; + %subi 1, 0, 4; + %jmp/0 T_0.5, 8; + ; End of false expr. + %blend; +T_0.5; + %assign/vec4 v0x55fb04ba0a10_0, 0; +T_0.3 ; +T_0.1 ; + %jmp T_0; + .thread T_0; + .scope S_0x55fb04b57f90; +T_1 ; + %vpi_call/w 3 25 "$dumpfile", "dump.vcd" {0 0 0}; + %vpi_call/w 3 26 "$dumpvars", 32'sb00000000000000000000000000000001, S_0x55fb04b57f90 {0 0 0}; + %end; + .thread T_1; +# The file index is used to find the file name in the following table. +:file_names 4; + "N/A"; + ""; + "-"; + "/home/sim/ice40/cocotb/examples/4-bit-counter/tests/../hdl/counter.sv"; diff --git a/4-bit-counter-cocotb/tests/test_counter.py b/4-bit-counter-cocotb/tests/test_counter.py new file mode 100644 index 0000000..0c5c475 --- /dev/null +++ b/4-bit-counter-cocotb/tests/test_counter.py @@ -0,0 +1,98 @@ +import cocotb +from cocotb.clock import Clock +from cocotb.triggers import Timer, RisingEdge, FallingEdge + +import random + +@cocotb.test() +async def test_counter_reset(dut): + clock = Clock(dut.clk, 10, units="us") # Create a 10us period clock on port clk + cocotb.fork(clock.start()) # Start the clock + + await RisingEdge(dut.clk) + await RisingEdge(dut.clk) + + dut.rst <= 1 + await RisingEdge(dut.clk) + await FallingEdge(dut.clk) + + cnt = dut.data_out.value.integer # assert counter ouput is 0 + assert cnt == 0 + + await RisingEdge(dut.clk) + await RisingEdge(dut.clk) + +@cocotb.test() +async def test_counter_load(dut): + clock = Clock(dut.clk, 10, units="us") # Create a 10us period clock on port clk + cocotb.fork(clock.start()) # Start the clock + + dut.rst <= 0 + dut.load <= 1 + soll = random.randint(0,15) + dut.data <= soll + + await RisingEdge(dut.clk) + await FallingEdge(dut.clk) + assert dut.data_out.value.integer == soll, f"counter value is incorrect: {dut.data_out.value.integer} != {soll}" + + + +@cocotb.test() +async def test_counter_inc(dut): + """Test for count up""" + + dut.rst <= 0 + dut.load <= 0 + dut.updown <= 1 + dut.data <= random.randint(0,15) + + clock = Clock(dut.clk, 10, units="us") # Create a 10us period clock on port clk + cocotb.fork(clock.start()) # Start the clock + + dut.rst <= 1 + await RisingEdge(dut.clk) + await FallingEdge(dut.clk) + dut.rst <= 0 + + soll = 0 + for _ in range(10): + assert dut.data_out.value.integer == soll, f"counter value is incorrect: {dut.data_out.value.integer} != {soll}" + + await RisingEdge(dut.clk) + soll += 1 + await FallingEdge(dut.clk) + + +@cocotb.test() +async def test_counter_dec(dut): + """Test for count down""" + + dut.rst <= 0 + dut.load <= 0 + dut.updown <= 0 + dut.data <= 14 + soll = 14 + + clock = Clock(dut.clk, 10, units="us") # Create a 10us period clock on port clk + cocotb.fork(clock.start()) # Start the clock + + dut.rst <= 1 + await RisingEdge(dut.clk) + await FallingEdge(dut.clk) + dut.rst <= 0 + + dut.load <= 1 + await RisingEdge(dut.clk) + await FallingEdge(dut.clk) + dut.load <= 0 + + for _ in range(10): + assert dut.data_out.value.integer == soll, f"counter value is incorrect: {dut.data_out.value.integer} != {soll}" + + await RisingEdge(dut.clk) + soll -= 1 + await FallingEdge(dut.clk) + + + diff --git a/4-bit-counter-myhdl/.vscode/settings.json b/4-bit-counter-myhdl/.vscode/settings.json new file mode 100644 index 0000000..615aafb --- /dev/null +++ b/4-bit-counter-myhdl/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/usr/bin/python3" +} \ No newline at end of file diff --git a/4-bit-counter-myhdl/__pycache__/counter_4bit_conv.cpython-38.pyc b/4-bit-counter-myhdl/__pycache__/counter_4bit_conv.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..755e98baa2c979387eb77480ece0f11027976510 GIT binary patch literal 954 zcmZ`%y-pl45cb&KpTLn{2?*&@L~JCu6etx!k)pITBq_GJ?5#Jj#J7uVA8^r99m!q8 zgYXVf9>i@bULjRx_E54Eu{57&JoecBzWK1Svcz!wP(MGt6O8?$pgVAly+N~^2#P7t zETx%i_MR1>gp!wR3Mp5C3NKkI6dbT5y20ISKLHOf^N{@85#dZRm9@_i9BbGyOku`m zFyk{Zlb-_xieJW4xComNi;4XlH{KZ>qbF$gHNsq&o`N|HSoLDg&H9|R{>EII%{i7@ zTf|G`ueZKpZCL|&`i1}>Dy!n$U9;=JOO?6I$Ap7=?7Y-a)rOc;@$R z|EL}neOr$DWnS#O>RXrfceaM5+sf;4T4Db-H~r@j*VxbwPaC z`v{Cnhye}f9{>8RduDrA*LkMx-gbK?;XcgtSvIk0bW+7(&J5?onOB=r7 z%AyELTw&WN_KiQq*13@X%>+&~tbs;0yb(<>4XGoJCAHcW0Jb5u+Wtbu2l%8!cyXF( zFGgjBke%Pqx6achNtb9eMI^c#wC%ViVH^n zk=b%fjCxsC)-5P)c_m8C8p0}?CHffjP)an|fDQf_+H4~6I_iov7^13Q+FRR9r`F$s WKHkN*jdig{U25s#7+ZwH(xX2aaK+UC literal 0 HcmV?d00001 diff --git a/4-bit-counter-myhdl/__pycache__/counter_4bit_tb.cpython-38.pyc b/4-bit-counter-myhdl/__pycache__/counter_4bit_tb.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0d85a0a4092a53d68731213b668c8d7785156f2 GIT binary patch literal 2300 zcma)7-D?|15Z{lx(@B<&jmeKEs;B6*6$rebP3tw`{Bwyn&@p{PP12)as|wFA&a?lh^Tmux*L2Dy={v)oP1&^O)A1wA~QZb_A9#d@?@L>F{x zYpd@%M-r5tejJ!8H0=XfM`o`vPz0vBKqh43P5cR;&2% zM|7W>`k0LAn2q_^8~ba4sEN6UxWdf*h=8~1cNB$l9h?BtdeJ#$6Rd&mM7V!9G?onl~KayeKe4BGq9bREcq)S-1CEmp}3igERFxno|CCRG?4^)8Tq zSC%%4o?OytZz)aW^5rFM;-%$9i2CAT3M@K^OS1{lG2K>w*9HJ{UFIL7MKn#=@I%Oy z*`2NHS&_tmfc$h9^yRG6dNj)f+hqE819xJ=o)A%a$}wY(*8gt_g^klz(i z8__SxPdE1==l6)SdmrtZaKc6uPCT~9#5(8HkBYDM3CJ)AdEo9N0)q@w*f(p|@2fO7 z>Kz!_O25!jtV>(T<+@`UUpNG5k-NHLgVl6BhpOZE3enxNzKV0$&Ow81teT>~n)U`+ zY+!$rw>@2CnWd?vofkoQ{T;jpV#I2p5QBoZrmPFaaLY{+Eu6JYgyAcTc9nEt?r z*x(PQl%2#GUakam!Oe&C9CJI4=1Uom)#-Vsq3(2fKvDZtDmY%}A@FrJJoo16f?`rD{nZ>&{OmnD@c_M9f%4w|rVqg>&UWK*L6;^c~Ip@U_ub@VE>lP3~;Z*KF zO;3Y&YT!`@9$?4+KS8ZV8=TRTKdQ?h@lyT7e8swZ3z}X4f-mR@?%qDxBhT1#tbvg0 z>hO)K9cP5o1ux7Xhi8Gq(M!zuB9xfJLwCp#>c;1c06et}eY2u2LI-(=PnQiK{RWv- jmtam^K!P~k&KadMny;4vHxRwX{KIqzxd(@D@NoM-ov#K0 literal 0 HcmV?d00001 diff --git a/4-bit-counter-myhdl/counter_4bit.v b/4-bit-counter-myhdl/counter_4bit.v new file mode 100644 index 0000000..1318498 --- /dev/null +++ b/4-bit-counter-myhdl/counter_4bit.v @@ -0,0 +1,46 @@ +// File: counter_4bit.v +// Generated by MyHDL 0.11 +// Date: Mon Jun 7 19:39:23 2021 + + +`timescale 1ns/10ps + +module counter_4bit ( + clk, + rst, + data, + updown, + load, + data_out +); + + +input clk; +input rst; +input [3:0] data; +input updown; +input load; +output [3:0] data_out; +reg [3:0] data_out; + + + + +always @(posedge clk) begin: COUNTER_4BIT_CYCLE + if (rst) begin + data_out <= 0; + end + else if (load) begin + data_out <= data; + end + else begin + if (updown) begin + data_out <= (data_out + 1); + end + else begin + data_out <= (data_out - 1); + end + end +end + +endmodule diff --git a/4-bit-counter-myhdl/counter_4bit_conv.py b/4-bit-counter-myhdl/counter_4bit_conv.py new file mode 100644 index 0000000..79f1aa2 --- /dev/null +++ b/4-bit-counter-myhdl/counter_4bit_conv.py @@ -0,0 +1,33 @@ +import myhdl +from myhdl import * + +@block +def counter_4bit(clk, rst, data, updown, load, data_out): + + @always(clk.posedge) + def cycle(): + if rst: + data_out.next = 0 + elif load: + data_out.next = data + else: + if updown: + data_out.next = data_out + 1 + else: + data_out.next = data_out - 1 + + return cycle + + +def convert(): + clk = Signal(bool(0)) + rst = Signal(bool(0)) # nur sync reset hier + # reset = ResetSignal(0, active=0, isasync=True) + updown = Signal(bool(0)) + load = Signal(bool(0)) + data = Signal(modbv(val=0, min=0, max=15)[4:]) + data_out = Signal(modbv(val=0, min=0, max=15)[4:]) + + inst = counter_4bit(clk, rst, data, updown, load, data_out) + inst.convert(hdl='Verilog') + # inst.convert(hdl='VHDL') diff --git a/4-bit-counter-myhdl/counter_4bit_tb.py b/4-bit-counter-myhdl/counter_4bit_tb.py new file mode 100644 index 0000000..d8b5827 --- /dev/null +++ b/4-bit-counter-myhdl/counter_4bit_tb.py @@ -0,0 +1,133 @@ +import os +import myhdl +from myhdl import * + + +module = 'counter_4bit' +testbench = 'tb_%s' % module + +build_cmd = "iverilog -o %s.vvp %s.v %s.v" % (testbench, module, testbench) + + +def tb_counter_4bit(): + clk = Signal(bool(0)) + rst = Signal(bool(0)) + updown = Signal(bool(0)) + load = Signal(bool(0)) + data = Signal(modbv(val=0, min=0, max=15)[4:]) + data_out = Signal(modbv(val=0, min=0, max=15)[4:]) + + # DUT + print(build_cmd) + if os.system(build_cmd): + raise Exception("Error running build command") + + dut = Cosimulation( + "vvp -m myhdl %s.vvp -lxt2" % testbench, + clk=clk, + rst=rst, + updown=updown, + load=load, + data=data, + data_out=data_out + ) + + @always(delay(4)) + def clkgen(): + clk.next = not clk + + @instance + def check(): + print("initialize") + clk.next = 0 + rst.next = 0 + load.next = 0 + updown.next = 1 + data.next = 0 + + yield clk.posedge + yield clk.posedge + + print("... OK") + print("test 1: reset") + yield clk.negedge + rst.next = 1 + yield clk.posedge + yield clk.negedge + rst.next = 0 + yield clk.posedge + + assert data_out == 0, f"assert failed with data_out {data_out} != 0" + + yield clk.posedge + yield clk.posedge + + + print("... OK") + print("test 2: load") + + yield clk.posedge + load.next = 1 + data.next = Signal(modbv(13)[4:]) + yield clk.negedge + yield clk.posedge + yield clk.negedge + assert data_out == 13, f"assert failed with data_out {data_out} != {13}" + + load.next = 0 + yield clk.posedge + yield clk.negedge + + + print("... OK") + print("test 3: inc") + + yield clk.negedge + rst.next = 1 + yield clk.posedge + yield clk.negedge + rst.next = 0 + soll = 0 + + for i in range(4): + assert data_out == soll, f"assert failed with data_out {int(data_out)} != {i}" + + yield clk.posedge + soll += 1 + yield clk.negedge + + print("... OK") + print("test 4: dec") + + soll = 13 + + yield clk.posedge + updown.next = 0 + load.next = 1 + data.next = Signal(modbv(soll)[4:]) + yield clk.negedge + yield clk.posedge + yield clk.negedge + load.next = 0 + + for i in range(4): + assert data_out == soll, f"assert failed with data_out {int(data_out)} != {soll}" + + yield clk.posedge + soll -= 1 + yield clk.negedge + + + print("... OK") + + for _ in range(10): + yield clk.posedge + + raise StopSimulation + + return instances() + + +def simulate(): + sim = Simulation(tb_counter_4bit()) + sim.run() diff --git a/4-bit-counter-myhdl/counter_reference.v b/4-bit-counter-myhdl/counter_reference.v new file mode 100644 index 0000000..f380ba4 --- /dev/null +++ b/4-bit-counter-myhdl/counter_reference.v @@ -0,0 +1,23 @@ +////////////////////////////////////////////////////////////// +// 4-bit loadable up-down counter ////// +////////////////////////////////////////////////////////////// + +module counter(clk, rst, data, updown, load, data_out); + + input clk, rst, load; + input updown; + input [3:0] data; + + output reg [3:0] data_out; + + always @(posedge clk) + begin + if(rst) + data_out <= 4'b0; + else if(load) + data_out <= data; + else + data_out <= ((updown)?(data_out + 1'b1):(data_out -1'b1)); + end + +endmodule \ No newline at end of file diff --git a/4-bit-counter-myhdl/main.py b/4-bit-counter-myhdl/main.py new file mode 100644 index 0000000..fcb1ef1 --- /dev/null +++ b/4-bit-counter-myhdl/main.py @@ -0,0 +1,10 @@ +import counter_4bit_conv, counter_4bit_tb +import os + +# print("Konvertiere MyHDL Design in Verilog") +# counter_4bit_conv.convert() + +print("Simuliere Verilog Design mit MyHDL") +counter_4bit_tb.simulate() + +os.system("gtkwave.exe -S run.tcl *.lxt") \ No newline at end of file diff --git a/4-bit-counter-myhdl/run.tcl b/4-bit-counter-myhdl/run.tcl new file mode 100644 index 0000000..c57509f --- /dev/null +++ b/4-bit-counter-myhdl/run.tcl @@ -0,0 +1,22 @@ +### -------------------------------------------------------------------- +### gtkwave.tcl +### Author: Simon Schmidt +### -------------------------------------------------------------------- + +# Resources: +# Manual: http://gtkwave.sourceforge.net/gtkwave.pdf#Appendix-E-Tcl-Command-Syntax + +# Add all signals +set nfacs [ gtkwave::getNumFacs ] + +set all_facs [list] +for {set i 0} {$i < $nfacs } {incr i} { + set facname [ gtkwave::getFacName $i ] + lappend all_facs "$facname" +} + +set num_added [ gtkwave::addSignalsFromList $all_facs ] +puts "num signals added: $num_added" + +# zoom full +gtkwave::/Time/Zoom/Zoom_Full \ No newline at end of file diff --git a/4-bit-counter-myhdl/tb_counter_4bit.lxt b/4-bit-counter-myhdl/tb_counter_4bit.lxt new file mode 100644 index 0000000000000000000000000000000000000000..24fbffc38093941eac9835ecf780636ce8bcfbf2 GIT binary patch literal 627 zcmWe`U|@7$U|`^3U|^I1(jXiU#MwZs@m0Q?14uJ4Ffk`5Xn1z{pVL39?Wx;k?s-b* zqW8IzX$b-zo;sc>2?Cwx^>q^y1ax#SHgkA5u&@+;5)N(%2{h~oj+!tjejfX!5U#6w zOcTW!Pj@>!Wt3cS{uRgqWaAHT&Cq-@ncJdahG_5kwqxn;&zKoBJT%T80IFkPU^WN3 zZyT5iBbaw8!t^sRhn!RNU@nws`}libeUt?EbhhS$YbA~(>{2kwbCuv&=FMh0gU5T> z!GeUS2qVs>4JigQ#acQuH*DFmL1DVsG#~b+4bOFdpPGD6KK@GIxAUHFr< z#Ka&4BJ%tH|LVVQch`S!zG`G>(B8(@T2<9%Vq{QYVxVEzAUuVOSy*F{l*6*dtA++Q aoHHc^Sd-io(pZ!H7*fxyKWNU(zyJWZ_4JMa literal 0 HcmV?d00001 diff --git a/4-bit-counter-myhdl/tb_counter_4bit.v b/4-bit-counter-myhdl/tb_counter_4bit.v new file mode 100644 index 0000000..bb1b977 --- /dev/null +++ b/4-bit-counter-myhdl/tb_counter_4bit.v @@ -0,0 +1,38 @@ +module tb_counter_4bit; + +reg clk; +reg rst; +reg [3:0] data; +reg updown; +reg load; +wire [3:0] data_out; + + + +initial begin + $from_myhdl( + clk, + rst, + data, + updown, + load + ); + $to_myhdl( + data_out + ); + + // dump file + $dumpfile("tb_counter_4bit.lxt"); + $dumpvars(0, tb_counter_4bit); +end + +counter_4bit dut( + clk, + rst, + data, + updown, + load, + data_out +); + +endmodule diff --git a/4-bit-counter-myhdl/tb_counter_4bit.vvp b/4-bit-counter-myhdl/tb_counter_4bit.vvp new file mode 100755 index 0000000..261ef9c --- /dev/null +++ b/4-bit-counter-myhdl/tb_counter_4bit.vvp @@ -0,0 +1,88 @@ +#! /usr/local/bin/vvp +:ivl_version "12.0 (devel)" "(s20150603-1130-g1f8876be)"; +:ivl_delay_selection "TYPICAL"; +:vpi_time_precision - 11; +:vpi_module "/usr/local/lib/ivl/system.vpi"; +:vpi_module "/usr/local/lib/ivl/vhdl_sys.vpi"; +:vpi_module "/usr/local/lib/ivl/vhdl_textio.vpi"; +:vpi_module "/usr/local/lib/ivl/v2005_math.vpi"; +:vpi_module "/usr/local/lib/ivl/va_math.vpi"; +S_0x556346c658c0 .scope module, "tb_counter_4bit" "tb_counter_4bit" 2 1; + .timescale -9 -11; +v0x556346c77d30_0 .var "clk", 0 0; +v0x556346c77df0_0 .var "data", 3 0; +v0x556346c77ec0_0 .net "data_out", 3 0, v0x556346c77920_0; 1 drivers +v0x556346c77fc0_0 .var "load", 0 0; +v0x556346c78090_0 .var "rst", 0 0; +v0x556346c78180_0 .var "updown", 0 0; +S_0x556346c65a50 .scope module, "dut" "counter_4bit" 2 29, 3 8 0, S_0x556346c658c0; + .timescale -9 -11; + .port_info 0 /INPUT 1 "clk"; + .port_info 1 /INPUT 1 "rst"; + .port_info 2 /INPUT 4 "data"; + .port_info 3 /INPUT 1 "updown"; + .port_info 4 /INPUT 1 "load"; + .port_info 5 /OUTPUT 4 "data_out"; +v0x556346c51a80_0 .net "clk", 0 0, v0x556346c77d30_0; 1 drivers +v0x556346c77840_0 .net "data", 3 0, v0x556346c77df0_0; 1 drivers +v0x556346c77920_0 .var "data_out", 3 0; +v0x556346c779e0_0 .net "load", 0 0, v0x556346c77fc0_0; 1 drivers +v0x556346c77aa0_0 .net "rst", 0 0, v0x556346c78090_0; 1 drivers +v0x556346c77bb0_0 .net "updown", 0 0, v0x556346c78180_0; 1 drivers +E_0x556346c631d0 .event posedge, v0x556346c51a80_0; +S_0x556346c518a0 .scope begin, "COUNTER_4BIT_CYCLE" "COUNTER_4BIT_CYCLE" 3 29, 3 29 0, S_0x556346c65a50; + .timescale -9 -11; + .scope S_0x556346c65a50; +T_0 ; + %wait E_0x556346c631d0; + %fork t_1, S_0x556346c518a0; + %jmp t_0; + .scope S_0x556346c518a0; +t_1 ; + %load/vec4 v0x556346c77aa0_0; + %flag_set/vec4 8; + %jmp/0xz T_0.0, 8; + %pushi/vec4 0, 0, 4; + %assign/vec4 v0x556346c77920_0, 0; + %jmp T_0.1; +T_0.0 ; + %load/vec4 v0x556346c779e0_0; + %flag_set/vec4 8; + %jmp/0xz T_0.2, 8; + %load/vec4 v0x556346c77840_0; + %assign/vec4 v0x556346c77920_0, 0; + %jmp T_0.3; +T_0.2 ; + %load/vec4 v0x556346c77bb0_0; + %flag_set/vec4 8; + %jmp/0xz T_0.4, 8; + %load/vec4 v0x556346c77920_0; + %addi 1, 0, 4; + %assign/vec4 v0x556346c77920_0, 0; + %jmp T_0.5; +T_0.4 ; + %load/vec4 v0x556346c77920_0; + %subi 1, 0, 4; + %assign/vec4 v0x556346c77920_0, 0; +T_0.5 ; +T_0.3 ; +T_0.1 ; + %end; + .scope S_0x556346c65a50; +t_0 %join; + %jmp T_0; + .thread T_0; + .scope S_0x556346c658c0; +T_1 ; + %vpi_call 2 13 "$from_myhdl", v0x556346c77d30_0, v0x556346c78090_0, v0x556346c77df0_0, v0x556346c78180_0, v0x556346c77fc0_0 {0 0 0}; + %vpi_call 2 20 "$to_myhdl", v0x556346c77ec0_0 {0 0 0}; + %vpi_call 2 25 "$dumpfile", "tb_counter_4bit.lxt" {0 0 0}; + %vpi_call 2 26 "$dumpvars", 32'sb00000000000000000000000000000000, S_0x556346c658c0 {0 0 0}; + %end; + .thread T_1; +# The file index is used to find the file name in the following table. +:file_names 4; + "N/A"; + ""; + "tb_counter_4bit.v"; + "counter_4bit.v"; diff --git a/7Segment_Lattice_ice40_UltraPlus b/7Segment_Lattice_ice40_UltraPlus new file mode 160000 index 0000000..d567bd2 --- /dev/null +++ b/7Segment_Lattice_ice40_UltraPlus @@ -0,0 +1 @@ +Subproject commit d567bd258c4e6cee6d2dc2866892824e890c5656 diff --git a/README.md b/README.md index b221e37..0892b29 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# ESY1B_SV_Python_Verifikation +# ESY1B Verifikation mit SystemVerilog und Python -Verwendeter Programmcode in Studienarbeit für ESY1B zum Thema "Verifikation mit SystemVerilog und Python" \ No newline at end of file +Verwendeter Programmcode in Studienarbeit für ESY1B zum Thema "Verifikation mit SystemVerilog und Python" diff --git a/digitaler-filter-cocotb/.gitignore b/digitaler-filter-cocotb/.gitignore new file mode 100644 index 0000000..180c0d1 --- /dev/null +++ b/digitaler-filter-cocotb/.gitignore @@ -0,0 +1,4 @@ +*swp +*vcd +results.xml +sim_build diff --git a/digitaler-filter-cocotb/Makefile b/digitaler-filter-cocotb/Makefile new file mode 100644 index 0000000..02b8131 --- /dev/null +++ b/digitaler-filter-cocotb/Makefile @@ -0,0 +1,12 @@ +# cocotb setup +MODULE = test +TOPLEVEL = top +VERILOG_SOURCES = top.v filter.v + +include $(shell cocotb-config --makefiles)/Makefile.sim + +# filters exported by pyfda always have module name set to top +filter.v: + sed -i 's/top/filter/' $@ + +.PHONY: filter.v diff --git a/digitaler-filter-cocotb/__pycache__/test.cpython-38.pyc b/digitaler-filter-cocotb/__pycache__/test.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4eab7cf02c97a192b59ea9a25f216c3863b6721 GIT binary patch literal 1046 zcmY*X&2AGh5VpO4$u>!UfC7a>FC2290f{3*2&e>7RiRc?!UDpwb`m%H6KrpzR-03} z@(4(qBX5Dk8*ucMQ(u7-<4u9$mB;gWzWqEN&#QJjL@?gXzrFwBAoSCM%LDe%W0-0W z3_}bjh}xATI3<)|>pO{)y40hP!OYV{D@rqY0}A^E*uS1B^x`I>rn$!ko{}3~N$3C9d2BT40Q{ zSNY6c;2EhskNFESb4sTQN>VkJ96(J#;a{`@sC9uz)n1^Pt2-J8XL( zqm-+2TQ7r0-7QJLqfVTRjUVT6u0I%ekjt_0l#Zk}E{JgB<`bULmf|{#M^TpXMA6pp zKLjxqrIV>(dQ`_QA&AxI%1HA%_78>}bTEsIzizsM$0 zJf;DQbkrA_v<+w6daqIM!M%-l5+wyU9VLbtXF$_@$R%BwN}>5uvD-8bD>U_D+f1|( z6-?y7q|K!VGBo&;7Z%2=e=`m!(?CYkJ`lblxdq4n+Ut$-l=qZKdm`o!?)7#LU*CVy zKRoKcJk_H->mP9`24Wm(k!L+7hC)XPmv;vu(XcG5-qT#^oyn#rT{5>Ur|~e&S&{HZwrNxc3}k^@kPCdo$G-swMj~?n literal 0 HcmV?d00001 diff --git a/digitaler-filter-cocotb/filter.v b/digitaler-filter-cocotb/filter.v new file mode 100644 index 0000000..f05e6ec --- /dev/null +++ b/digitaler-filter-cocotb/filter.v @@ -0,0 +1,99 @@ +/* Machine-generated using Migen */ +module filter( + input signed [15:0] i, + output signed [15:0] o, + input sys_clk, + input sys_rst +); + +reg signed [15:0] sreg0 = 16'sd0; +reg signed [15:0] sreg1 = 16'sd0; +reg signed [15:0] sreg2 = 16'sd0; +reg signed [15:0] sreg3 = 16'sd0; +reg signed [15:0] sreg4 = 16'sd0; +reg signed [15:0] sreg5 = 16'sd0; +reg signed [15:0] sreg6 = 16'sd0; +reg signed [15:0] sreg7 = 16'sd0; +reg signed [15:0] sreg8 = 16'sd0; +reg signed [15:0] sreg9 = 16'sd0; +reg signed [15:0] sreg10 = 16'sd0; +reg signed [15:0] sreg11 = 16'sd0; +reg signed [15:0] sreg12 = 16'sd0; +reg signed [15:0] sreg13 = 16'sd0; +reg signed [15:0] sreg14 = 16'sd0; +reg signed [15:0] sreg15 = 16'sd0; +reg signed [15:0] sreg16 = 16'sd0; +reg signed [15:0] sreg17 = 16'sd0; +reg signed [15:0] sreg18 = 16'sd0; +reg signed [15:0] sreg19 = 16'sd0; +reg signed [15:0] sreg20 = 16'sd0; +reg signed [35:0] sum_full = 36'sd0; +wire signed [31:0] sum_accu; +wire signed [35:0] sig_i_q0; +wire signed [31:0] sig_o0; +wire signed [31:0] sig_i_q1; +wire signed [15:0] sig_o1; + +// synthesis translate_off +reg dummy_s; +initial dummy_s <= 1'd0; +// synthesis translate_on + +assign sig_i_q0 = (sum_full <<< 1'd0); +assign sig_o0 = sig_i_q0; +assign sum_accu = sig_o0; +assign sig_i_q1 = (sum_accu >>> 4'd15); +assign sig_o1 = sig_i_q1; +assign o = sig_o1; + +always @(posedge sys_clk) begin + sreg0 <= i; + sreg1 <= sreg0; + sreg2 <= sreg1; + sreg3 <= sreg2; + sreg4 <= sreg3; + sreg5 <= sreg4; + sreg6 <= sreg5; + sreg7 <= sreg6; + sreg8 <= sreg7; + sreg9 <= sreg8; + sreg10 <= sreg9; + sreg11 <= sreg10; + sreg12 <= sreg11; + sreg13 <= sreg12; + sreg14 <= sreg13; + sreg15 <= sreg14; + sreg16 <= sreg15; + sreg17 <= sreg16; + sreg18 <= sreg17; + sreg19 <= sreg18; + sreg20 <= sreg19; + sum_full <= ((((((((((((((((((((($signed({1'd0, 11'd1135}) * sreg0) + ($signed({1'd0, 10'd512}) * sreg1)) + ($signed({1'd0, 9'd364}) * sreg2)) + (6'sd46 * sreg3)) + (11'sd1406 * sreg4)) + (12'sd2625 * sreg5)) + (13'sd5777 * sreg6)) + (13'sd4839 * sreg7)) + (14'sd12231 * sreg8)) + (14'sd11695 * sreg9)) + ($signed({1'd0, 15'd27889}) * sreg10)) + (14'sd11695 * sreg11)) + (14'sd12231 * sreg12)) + (13'sd4839 * sreg13)) + (13'sd5777 * sreg14)) + (12'sd2625 * sreg15)) + (11'sd1406 * sreg16)) + (6'sd46 * sreg17)) + ($signed({1'd0, 9'd364}) * sreg18)) + ($signed({1'd0, 10'd512}) * sreg19)) + ($signed({1'd0, 11'd1135}) * sreg20)); + if (sys_rst) begin + sreg0 <= 16'sd0; + sreg1 <= 16'sd0; + sreg2 <= 16'sd0; + sreg3 <= 16'sd0; + sreg4 <= 16'sd0; + sreg5 <= 16'sd0; + sreg6 <= 16'sd0; + sreg7 <= 16'sd0; + sreg8 <= 16'sd0; + sreg9 <= 16'sd0; + sreg10 <= 16'sd0; + sreg11 <= 16'sd0; + sreg12 <= 16'sd0; + sreg13 <= 16'sd0; + sreg14 <= 16'sd0; + sreg15 <= 16'sd0; + sreg16 <= 16'sd0; + sreg17 <= 16'sd0; + sreg18 <= 16'sd0; + sreg19 <= 16'sd0; + sreg20 <= 16'sd0; + sum_full <= 36'sd0; + end +end + +endmodule + diff --git a/digitaler-filter-cocotb/hello.wav b/digitaler-filter-cocotb/hello.wav new file mode 100644 index 0000000000000000000000000000000000000000..b30ad06ac80cb970bb38135f2966e96d0507e9e4 GIT binary patch literal 76108 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%0DZ+R_?19j?D34$@AhZz!+ZV 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 literal 0 HcmV?d00001 diff --git a/digitaler-filter-cocotb/out.wav b/digitaler-filter-cocotb/out.wav new file mode 100644 index 0000000000000000000000000000000000000000..41cdb0a2b7675d908b8a880a7648c438dc6009dd GIT binary patch literal 76108 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 literal 0 HcmV?d00001 diff --git a/digitaler-filter-cocotb/test.py b/digitaler-filter-cocotb/test.py new file mode 100644 index 0000000..bd90472 --- /dev/null +++ b/digitaler-filter-cocotb/test.py @@ -0,0 +1,32 @@ +import cocotb +from cocotb.clock import Clock +from cocotb.triggers import RisingEdge + +import wave +import struct +import numpy as np + +@cocotb.test() +async def test(dut): + clock = Clock(dut.clk, 10, units="us") + cocotb.fork(clock.start()) + + # open audio files for read and write + audio_in = wave.open('hello.wav') + audio_out = wave.open('out.wav', 'wb') + audio_out.setnchannels(audio_in.getnchannels()) + audio_out.setsampwidth(audio_in.getsampwidth()) + audio_out.setframerate(audio_in.getframerate()) + + nframes = audio_in.getnframes() + print("sending %d frames" % nframes) + + # process the audio through the dut + for i in range(nframes): + frame = audio_in.readframes(1) + val, = struct.unpack('h', frame) + dut.data_in <= val + await RisingEdge(dut.clk) + + raw_out = struct.pack('h', dut.data_out.value.signed_integer) + audio_out.writeframes(raw_out) diff --git a/digitaler-filter-cocotb/test.sh b/digitaler-filter-cocotb/test.sh new file mode 100755 index 0000000..2fec8f8 --- /dev/null +++ b/digitaler-filter-cocotb/test.sh @@ -0,0 +1,4 @@ +#!/bin/bash +make +cp hello.wav out.wav /mnt/c/Users/simon/Google_Drive/OHM_BEI6_Simon/ESY1_KUNTZSCH/000_Studienarbeit/verilog/fftplot +py.exe "C:\Users\simon\Google_Drive\OHM_BEI6_Simon\ESY1_KUNTZSCH\000_Studienarbeit\verilog\fftplot\fftplot.py" diff --git a/digitaler-filter-cocotb/top.v b/digitaler-filter-cocotb/top.v new file mode 100644 index 0000000..9748c43 --- /dev/null +++ b/digitaler-filter-cocotb/top.v @@ -0,0 +1,18 @@ +`default_nettype none +module top ( + input wire clk, + input wire signed [15:0] data_in, + input wire signed [15:0] data_out + ); + + `ifdef COCOTB_SIM + initial begin + $dumpfile ("top.vcd"); + $dumpvars (0, top); + #1; + end + `endif + + filter filter (.i(data_in), .o(data_out), .sys_clk(clk), .sys_rst(1'b0)); + +endmodule diff --git a/digitaler-filter-cocotb/top_coco.gtkw b/digitaler-filter-cocotb/top_coco.gtkw new file mode 100644 index 0000000..e60a15f --- /dev/null +++ b/digitaler-filter-cocotb/top_coco.gtkw @@ -0,0 +1,28 @@ +[*] +[*] GTKWave Analyzer v3.3.105 (w)1999-2020 BSI +[*] Wed Sep 23 09:52:12 2020 +[*] +[dumpfile] "/home/matt/work/fpga/pyfda-cocotb-demo/top.vcd" +[dumpfile_mtime] "Wed Sep 23 09:51:27 2020" +[dumpfile_size] 24963113 +[savefile] "/home/matt/work/fpga/pyfda-cocotb-demo/top_coco.gtkw" +[timestart] 0 +[size] 2353 1179 +[pos] -1 -1 +*-36.000000 2010000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[sst_width] 272 +[signals_width] 438 +[sst_expanded] 1 +[sst_vpaned_height] 349 +@28 +top.clk +@8420 +top.data_in[15:0] +@20000 +- +@8420 +top.data_out[15:0] +@20000 +- +[pattern_trace] 1 +[pattern_trace] 0