From e2ef356f1556669aa81f24094abe25d5397312bf Mon Sep 17 00:00:00 2001 From: Maximilian Eibl Date: Mon, 10 Feb 2025 20:28:13 +0100 Subject: [PATCH] first commit --- 01_Halfadder/.gitignore | 40 +++ 01_Halfadder/01_Halfadder.vhdpproj | 7 + 01_Halfadder/design.vhd | 19 ++ 01_Halfadder/testbench.ghw | Bin 0 -> 435 bytes 01_Halfadder/testbench.vhd | 38 +++ 01_Halfadder/vhdl_ls.toml | 12 + 02_Fulladder/.gitignore | 40 +++ 02_Fulladder/02_Fulladder.vhdpproj | 9 + 02_Fulladder/design.vhd | 1 + 02_Fulladder/fulladder.vhd | 42 +++ 02_Fulladder/halfadder.vhd | 16 ++ 02_Fulladder/testbench.vhd | 34 +++ 02_Fulladder/vhdl_ls.toml | 8 + 03_MUX_Example/.gitignore | 40 +++ 03_MUX_Example/03_MUX_Example.vhdpproj | 7 + 03_MUX_Example/design.vhd | 20 ++ 03_MUX_Example/testbench.vhd | 39 +++ 03_MUX_Example/vhdl_ls.toml | 8 + 04_ClockGen_Example/.gitignore | 40 +++ .../04_ClockGen_Example.vhdpproj | 10 + 04_ClockGen_Example/clkGen.vhd | 24 ++ 04_ClockGen_Example/design.vhd | 0 04_ClockGen_Example/testbench.vhd | 23 ++ 04_ClockGen_Example/vhdl_ls.toml | 14 + 05_Fulladder_allVariants/.gitignore | 40 +++ .../05_Fulladder_allVariants.vhdpproj | 11 + 05_Fulladder_allVariants/design.vhd | 0 .../fulladder_process.vhd | 38 +++ 05_Fulladder_allVariants/fulladder_select.vhd | 34 +++ 05_Fulladder_allVariants/fulladder_struct.vhd | 43 +++ 05_Fulladder_allVariants/halfadder.vhd | 16 ++ 05_Fulladder_allVariants/testbench.vhd | 141 ++++++++++ 05_Fulladder_allVariants/vhdl_ls.toml | 8 + 06_VELS_Example/.gitignore | 40 +++ 06_VELS_Example/06_VELS_Example.vhdpproj | 7 + 06_VELS_Example/design.vhd | 13 + 06_VELS_Example/testbench.vhd | 74 +++++ 06_VELS_Example/vhdl_ls.toml | 8 + 07_DTime_GateDelay_Example/.gitignore | 40 +++ .../07_DTime_GateDelay_Example.vhdpproj | 7 + 07_DTime_GateDelay_Example/design.vhd | 17 ++ 07_DTime_GateDelay_Example/testbench.vhd | 25 ++ 07_DTime_GateDelay_Example/vhdl_ls.toml | 8 + 08_InfereredLatch_Example/.gitignore | 40 +++ .../08_InfereredLatch_Example.vhdpproj | 7 + 08_InfereredLatch_Example/design.vhd | 21 ++ 08_InfereredLatch_Example/testbench.vhd | 46 ++++ 08_InfereredLatch_Example/vhdl_ls.toml | 8 + 09_DFF_Example/.gitignore | 40 +++ 09_DFF_Example/09_DFF_Example.vhdpproj | 8 + 09_DFF_Example/clkgen.vhd | 24 ++ 09_DFF_Example/design.vhd | 24 ++ 09_DFF_Example/testbench.vhd | 60 +++++ 09_DFF_Example/vhdl_ls.toml | 8 + 10_LFSR_Example/.gitignore | 40 +++ 10_LFSR_Example/10_LFSR_Example.vhdpproj | 8 + 10_LFSR_Example/clkgen.vhd | 24 ++ 10_LFSR_Example/design.vhd | 32 +++ 10_LFSR_Example/testbench.vhd | 40 +++ 10_LFSR_Example/vhdl_ls.toml | 8 + 11_MinArith/.gitignore | 40 +++ 11_MinArith/11_MinArith.vhdpproj | 7 + 11_MinArith/design.vhd | 25 ++ 11_MinArith/testbench.vhd | 40 +++ 11_MinArith/vhdl_ls.toml | 8 + 12_HA_with_assert_tb_Example/.gitignore | 40 +++ .../12_HA_with_assert_tb_Example.vhdpproj | 7 + 12_HA_with_assert_tb_Example/design.vhd | 18 ++ 12_HA_with_assert_tb_Example/testbench.vhd | 70 +++++ 12_HA_with_assert_tb_Example/vhdl_ls.toml | 8 + 13_procedure_Example/.gitignore | 40 +++ .../13_procedure_Example.vhdpproj | 7 + 13_procedure_Example/design.vhd | 14 + 13_procedure_Example/testbench.vhd | 108 ++++++++ 13_procedure_Example/vhdl_ls.toml | 8 + 14_FSM_Moore_Example/.gitignore | 40 +++ .../14_FSM_Moore_Example.vhdpproj | 8 + 14_FSM_Moore_Example/clkgen.vhd | 24 ++ 14_FSM_Moore_Example/design.vhd | 81 ++++++ 14_FSM_Moore_Example/testbench.vhd | 45 ++++ 14_FSM_Moore_Example/vhdl_ls.toml | 8 + 15_FSM_Mealy_Example/.gitignore | 40 +++ .../15_FSM_Mealy_Example.vhdpproj | 9 + 15_FSM_Mealy_Example/clkgen.vhd | 24 ++ 15_FSM_Mealy_Example/design.vhd | 0 15_FSM_Mealy_Example/fsm_syn.vhd | 79 ++++++ 15_FSM_Mealy_Example/testbench.vhd | 60 +++++ 15_FSM_Mealy_Example/vhdl_ls.toml | 8 + 16_asyncROM_Example/.gitignore | 40 +++ .../16_asyncROM_Example.vhdpproj | 9 + 16_asyncROM_Example/design.vhd | 41 +++ 16_asyncROM_Example/testbench.ghw | Bin 0 -> 525 bytes 16_asyncROM_Example/testbench.vhd | 47 ++++ 16_asyncROM_Example/vhdl_ls.toml | 12 + 17_syncROM_Example/.gitignore | 40 +++ .../17_syncROM_Example.vhdpproj | 10 + 17_syncROM_Example/clkgen.vhd | 24 ++ 17_syncROM_Example/design.vhd | 45 ++++ 17_syncROM_Example/testbench.vhd | 51 ++++ 17_syncROM_Example/vhdl_ls.toml | 14 + 18_RAM_Example/.gitignore | 40 +++ 18_RAM_Example/18_RAM_Example.vhdpproj | 8 + 18_RAM_Example/clkgen.vhd | 24 ++ 18_RAM_Example/design.vhd | 46 ++++ 18_RAM_Example/testbench.vhd | 95 +++++++ 18_RAM_Example/vhdl_ls.toml | 8 + 19_RAMbus_Example/.gitignore | 40 +++ 19_RAMbus_Example/19_RAMbus_Example.vhdpproj | 8 + 19_RAMbus_Example/clkgen.vhd | 24 ++ 19_RAMbus_Example/design.vhd | 47 ++++ 19_RAMbus_Example/testbench.vhd | 104 ++++++++ 19_RAMbus_Example/vhdl_ls.toml | 8 + 20_pdRAM_Example/.gitignore | 40 +++ 20_pdRAM_Example/20_pdRAM_Example.vhdpproj | 10 + 20_pdRAM_Example/clkgen.vhd | 24 ++ 20_pdRAM_Example/design.vhd | 81 ++++++ 20_pdRAM_Example/testbench.vhd | 87 ++++++ 20_pdRAM_Example/vhdl_ls.toml | 8 + Task1/.gitignore | 40 +++ Task1/IEEE_1164_Gates.vhdl | 252 ++++++++++++++++++ Task1/IEEE_1164_Gates_beh.vhdl | 111 ++++++++ Task1/IEEE_1164_Gates_pkg.vhdl | 205 ++++++++++++++ Task1/Task1.ghw | Bin 0 -> 377 bytes Task1/Task1.vhdpproj | 13 + Task1/desc_7_Task1.pdf | Bin 0 -> 20582 bytes Task1/gates.vhdl | 7 + Task1/gates_beh.vhdl | 43 +++ Task1/vhdl_ls.toml | 18 ++ Task2/.gitignore | 40 +++ Task2/Task2.vhdpproj | 10 + Task2/demux.vhdl | 13 + Task2/demux_beh.vhdl | 56 ++++ Task2/desc_7_Task2.pdf | Bin 0 -> 38802 bytes Task2/vhdl_ls.toml | 12 + Task3/.gitignore | 40 +++ Task3/Task3.vhdpproj | 7 + Task3/counter.vhdl | 15 ++ Task3/counter_beh.vhdl | 24 ++ Task3/desc_7_Task3.pdf | Bin 0 -> 38872 bytes Task3/vhdl_ls.toml | 8 + Task4/.gitignore | 40 +++ Task4/Task4.vhdpproj | 8 + Task4/desc_7_Task4.pdf | Bin 0 -> 88597 bytes Task4/fsm.vhdl | 13 + Task4/fsm_beh.vhdl | 93 +++++++ Task4/fsm_pkg.vhdl | 9 + Task4/vhdl_ls.toml | 8 + Task5/.gitignore | 40 +++ Task5/RAM.vhdl | 16 ++ Task5/RAM_beh.vhdl | 60 +++++ Task5/Task5.vhdpproj | 7 + Task5/desc_7_Task5.pdf | Bin 0 -> 43838 bytes Task5/vhdl_ls.toml | 8 + Task6/Task6.vhdpproj | 7 + Task6/cache.vhdl | 13 + Task6/cache_beh.vhdl | 63 +++++ Task6/desc_7_Task6.pdf | Bin 0 -> 93261 bytes Task6/vhdl_ls.toml | 8 + Task7/.gitignore | 40 +++ Task7/Task7.vhdpproj | 7 + Task7/desc_7_Task7.pdf | Bin 0 -> 70504 bytes Task7/pwm.vhdl | 7 + Task7/pwm_beh.vhdl | 40 +++ Task7/vhdl_ls.toml | 8 + Task8/.gitignore | 40 +++ Task8/Task8.vhdpproj | 7 + Task8/arithmetic.vhdl | 12 + Task8/arithmetic_beh.vhdl | 8 + Task8/desc_7_Task8.pdf | Bin 0 -> 45974 bytes Task8/vhdl_ls.toml | 8 + 170 files changed, 4884 insertions(+) create mode 100644 01_Halfadder/.gitignore create mode 100644 01_Halfadder/01_Halfadder.vhdpproj create mode 100644 01_Halfadder/design.vhd create mode 100644 01_Halfadder/testbench.ghw create mode 100644 01_Halfadder/testbench.vhd create mode 100644 01_Halfadder/vhdl_ls.toml create mode 100644 02_Fulladder/.gitignore create mode 100644 02_Fulladder/02_Fulladder.vhdpproj create mode 100644 02_Fulladder/design.vhd create mode 100644 02_Fulladder/fulladder.vhd create mode 100644 02_Fulladder/halfadder.vhd create mode 100644 02_Fulladder/testbench.vhd create mode 100644 02_Fulladder/vhdl_ls.toml create mode 100644 03_MUX_Example/.gitignore create mode 100644 03_MUX_Example/03_MUX_Example.vhdpproj create mode 100644 03_MUX_Example/design.vhd create mode 100644 03_MUX_Example/testbench.vhd create mode 100644 03_MUX_Example/vhdl_ls.toml create mode 100644 04_ClockGen_Example/.gitignore create mode 100644 04_ClockGen_Example/04_ClockGen_Example.vhdpproj create mode 100644 04_ClockGen_Example/clkGen.vhd create mode 100644 04_ClockGen_Example/design.vhd create mode 100644 04_ClockGen_Example/testbench.vhd create mode 100644 04_ClockGen_Example/vhdl_ls.toml create mode 100644 05_Fulladder_allVariants/.gitignore create mode 100644 05_Fulladder_allVariants/05_Fulladder_allVariants.vhdpproj create mode 100644 05_Fulladder_allVariants/design.vhd create mode 100644 05_Fulladder_allVariants/fulladder_process.vhd create mode 100644 05_Fulladder_allVariants/fulladder_select.vhd create mode 100644 05_Fulladder_allVariants/fulladder_struct.vhd create mode 100644 05_Fulladder_allVariants/halfadder.vhd create mode 100644 05_Fulladder_allVariants/testbench.vhd create mode 100644 05_Fulladder_allVariants/vhdl_ls.toml create mode 100644 06_VELS_Example/.gitignore create mode 100644 06_VELS_Example/06_VELS_Example.vhdpproj create mode 100644 06_VELS_Example/design.vhd create mode 100644 06_VELS_Example/testbench.vhd create mode 100644 06_VELS_Example/vhdl_ls.toml create mode 100644 07_DTime_GateDelay_Example/.gitignore create mode 100644 07_DTime_GateDelay_Example/07_DTime_GateDelay_Example.vhdpproj create mode 100644 07_DTime_GateDelay_Example/design.vhd create mode 100644 07_DTime_GateDelay_Example/testbench.vhd create mode 100644 07_DTime_GateDelay_Example/vhdl_ls.toml create mode 100644 08_InfereredLatch_Example/.gitignore create mode 100644 08_InfereredLatch_Example/08_InfereredLatch_Example.vhdpproj create mode 100644 08_InfereredLatch_Example/design.vhd create mode 100644 08_InfereredLatch_Example/testbench.vhd create mode 100644 08_InfereredLatch_Example/vhdl_ls.toml create mode 100644 09_DFF_Example/.gitignore create mode 100644 09_DFF_Example/09_DFF_Example.vhdpproj create mode 100644 09_DFF_Example/clkgen.vhd create mode 100644 09_DFF_Example/design.vhd create mode 100644 09_DFF_Example/testbench.vhd create mode 100644 09_DFF_Example/vhdl_ls.toml create mode 100644 10_LFSR_Example/.gitignore create mode 100644 10_LFSR_Example/10_LFSR_Example.vhdpproj create mode 100644 10_LFSR_Example/clkgen.vhd create mode 100644 10_LFSR_Example/design.vhd create mode 100644 10_LFSR_Example/testbench.vhd create mode 100644 10_LFSR_Example/vhdl_ls.toml create mode 100644 11_MinArith/.gitignore create mode 100644 11_MinArith/11_MinArith.vhdpproj create mode 100644 11_MinArith/design.vhd create mode 100644 11_MinArith/testbench.vhd create mode 100644 11_MinArith/vhdl_ls.toml create mode 100644 12_HA_with_assert_tb_Example/.gitignore create mode 100644 12_HA_with_assert_tb_Example/12_HA_with_assert_tb_Example.vhdpproj create mode 100644 12_HA_with_assert_tb_Example/design.vhd create mode 100644 12_HA_with_assert_tb_Example/testbench.vhd create mode 100644 12_HA_with_assert_tb_Example/vhdl_ls.toml create mode 100644 13_procedure_Example/.gitignore create mode 100644 13_procedure_Example/13_procedure_Example.vhdpproj create mode 100644 13_procedure_Example/design.vhd create mode 100644 13_procedure_Example/testbench.vhd create mode 100644 13_procedure_Example/vhdl_ls.toml create mode 100644 14_FSM_Moore_Example/.gitignore create mode 100644 14_FSM_Moore_Example/14_FSM_Moore_Example.vhdpproj create mode 100644 14_FSM_Moore_Example/clkgen.vhd create mode 100644 14_FSM_Moore_Example/design.vhd create mode 100644 14_FSM_Moore_Example/testbench.vhd create mode 100644 14_FSM_Moore_Example/vhdl_ls.toml create mode 100644 15_FSM_Mealy_Example/.gitignore create mode 100644 15_FSM_Mealy_Example/15_FSM_Mealy_Example.vhdpproj create mode 100644 15_FSM_Mealy_Example/clkgen.vhd create mode 100644 15_FSM_Mealy_Example/design.vhd create mode 100644 15_FSM_Mealy_Example/fsm_syn.vhd create mode 100644 15_FSM_Mealy_Example/testbench.vhd create mode 100644 15_FSM_Mealy_Example/vhdl_ls.toml create mode 100644 16_asyncROM_Example/.gitignore create mode 100644 16_asyncROM_Example/16_asyncROM_Example.vhdpproj create mode 100644 16_asyncROM_Example/design.vhd create mode 100644 16_asyncROM_Example/testbench.ghw create mode 100644 16_asyncROM_Example/testbench.vhd create mode 100644 16_asyncROM_Example/vhdl_ls.toml create mode 100644 17_syncROM_Example/.gitignore create mode 100644 17_syncROM_Example/17_syncROM_Example.vhdpproj create mode 100644 17_syncROM_Example/clkgen.vhd create mode 100644 17_syncROM_Example/design.vhd create mode 100644 17_syncROM_Example/testbench.vhd create mode 100644 17_syncROM_Example/vhdl_ls.toml create mode 100644 18_RAM_Example/.gitignore create mode 100644 18_RAM_Example/18_RAM_Example.vhdpproj create mode 100644 18_RAM_Example/clkgen.vhd create mode 100644 18_RAM_Example/design.vhd create mode 100644 18_RAM_Example/testbench.vhd create mode 100644 18_RAM_Example/vhdl_ls.toml create mode 100644 19_RAMbus_Example/.gitignore create mode 100644 19_RAMbus_Example/19_RAMbus_Example.vhdpproj create mode 100644 19_RAMbus_Example/clkgen.vhd create mode 100644 19_RAMbus_Example/design.vhd create mode 100644 19_RAMbus_Example/testbench.vhd create mode 100644 19_RAMbus_Example/vhdl_ls.toml create mode 100644 20_pdRAM_Example/.gitignore create mode 100644 20_pdRAM_Example/20_pdRAM_Example.vhdpproj create mode 100644 20_pdRAM_Example/clkgen.vhd create mode 100644 20_pdRAM_Example/design.vhd create mode 100644 20_pdRAM_Example/testbench.vhd create mode 100644 20_pdRAM_Example/vhdl_ls.toml create mode 100644 Task1/.gitignore create mode 100644 Task1/IEEE_1164_Gates.vhdl create mode 100644 Task1/IEEE_1164_Gates_beh.vhdl create mode 100644 Task1/IEEE_1164_Gates_pkg.vhdl create mode 100644 Task1/Task1.ghw create mode 100644 Task1/Task1.vhdpproj create mode 100644 Task1/desc_7_Task1.pdf create mode 100644 Task1/gates.vhdl create mode 100644 Task1/gates_beh.vhdl create mode 100644 Task1/vhdl_ls.toml create mode 100644 Task2/.gitignore create mode 100644 Task2/Task2.vhdpproj create mode 100644 Task2/demux.vhdl create mode 100644 Task2/demux_beh.vhdl create mode 100644 Task2/desc_7_Task2.pdf create mode 100644 Task2/vhdl_ls.toml create mode 100644 Task3/.gitignore create mode 100644 Task3/Task3.vhdpproj create mode 100644 Task3/counter.vhdl create mode 100644 Task3/counter_beh.vhdl create mode 100644 Task3/desc_7_Task3.pdf create mode 100644 Task3/vhdl_ls.toml create mode 100644 Task4/.gitignore create mode 100644 Task4/Task4.vhdpproj create mode 100644 Task4/desc_7_Task4.pdf create mode 100644 Task4/fsm.vhdl create mode 100644 Task4/fsm_beh.vhdl create mode 100644 Task4/fsm_pkg.vhdl create mode 100644 Task4/vhdl_ls.toml create mode 100644 Task5/.gitignore create mode 100644 Task5/RAM.vhdl create mode 100644 Task5/RAM_beh.vhdl create mode 100644 Task5/Task5.vhdpproj create mode 100644 Task5/desc_7_Task5.pdf create mode 100644 Task5/vhdl_ls.toml create mode 100644 Task6/Task6.vhdpproj create mode 100644 Task6/cache.vhdl create mode 100644 Task6/cache_beh.vhdl create mode 100644 Task6/desc_7_Task6.pdf create mode 100644 Task6/vhdl_ls.toml create mode 100644 Task7/.gitignore create mode 100644 Task7/Task7.vhdpproj create mode 100644 Task7/desc_7_Task7.pdf create mode 100644 Task7/pwm.vhdl create mode 100644 Task7/pwm_beh.vhdl create mode 100644 Task7/vhdl_ls.toml create mode 100644 Task8/.gitignore create mode 100644 Task8/Task8.vhdpproj create mode 100644 Task8/arithmetic.vhdl create mode 100644 Task8/arithmetic_beh.vhdl create mode 100644 Task8/desc_7_Task8.pdf create mode 100644 Task8/vhdl_ls.toml diff --git a/01_Halfadder/.gitignore b/01_Halfadder/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/01_Halfadder/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/01_Halfadder/01_Halfadder.vhdpproj b/01_Halfadder/01_Halfadder.vhdpproj new file mode 100644 index 0000000..38d1ce5 --- /dev/null +++ b/01_Halfadder/01_Halfadder.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/01_Halfadder/design.vhd b/01_Halfadder/design.vhd new file mode 100644 index 0000000..864e1dd --- /dev/null +++ b/01_Halfadder/design.vhd @@ -0,0 +1,19 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + +-- Entity HA +entity halfadder is + port (a_i : in std_logic; + b_i : in std_logic; + sum_o : out std_logic; + cy_o : out std_logic); +end halfadder; + +-- Architecture HA +architecture behavior of halfadder is +begin + -- HA is made out of 2 gates: + sum_o <= a_i xor b_i; + cy_o <= a_i and b_i; +end behavior; \ No newline at end of file diff --git a/01_Halfadder/testbench.ghw b/01_Halfadder/testbench.ghw new file mode 100644 index 0000000000000000000000000000000000000000..e453628007601534d1dacafd58bba35d0f1fffde GIT binary patch literal 435 zcmX|7%}&BV5T2PXP*7~aALM4d?8!(IK+bGq+x=^BTQON;V)01V0#nT6M-7LtaR1NOUB65<3#_B@QJ%NPLvg zZ=eHFID;`G-h?YivJ}>{X&8yIh&N)LEijFiN%Wjh63$oCSzHVq=lV)yI>2nfpVG-X z9Z#0=6SzGef>B@T12Jl~V%{X9SjY)HKgJrEFuV)&wSnNZUG3)Bnhe1x99e}ED_^&5 zLc2m_ACh5LN#w1{K4GOyR6Ql5dO)IFD(_j^u&f7ucPpzi?u_eqp*d>)A0cfweEj@g zqCv*iA>26zDfiuNj-b^ZfEuT&OO4cKR-Jt^s}{bPRsG-0N}iwU5=>?#dB&`A44K_t L3xb=r&Zpu(t#?6` literal 0 HcmV?d00001 diff --git a/01_Halfadder/testbench.vhd b/01_Halfadder/testbench.vhd new file mode 100644 index 0000000..0f2e843 --- /dev/null +++ b/01_Halfadder/testbench.vhd @@ -0,0 +1,38 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + +-- Entity TB +entity testbench is +-- empty +end testbench; + + +-- Architecture TB +architecture tb of testbench is + +-- DUT component declaration + component halfadder is + port (a_i : in std_logic; + b_i : in std_logic; + sum_o : out std_logic; + cy_o : out std_logic); + end component; + +-- declare signals + signal sig_a, sig_b, sig_sum, sig_cy: std_logic; + +begin + + -- DUT instantiation and port mapping + DUT: halfadder port map( + a_i => sig_a, + b_i => sig_b, + sum_o => sig_sum, + cy_o => sig_cy); + + -- apply testpattern + sig_a <= '0', '1' after 100 ns, '0' after 200 ns, '1' after 300 ns; + sig_b <= '0', '1' after 200 ns; + +end tb; diff --git a/01_Halfadder/vhdl_ls.toml b/01_Halfadder/vhdl_ls.toml new file mode 100644 index 0000000..b6c38f9 --- /dev/null +++ b/01_Halfadder/vhdl_ls.toml @@ -0,0 +1,12 @@ +# auto-generated +[Libraries] +work.files = [ + 'design.vhd', + 'testbench.vhd' +] +[libraries.work] +files = [ + 'design.vhd', + 'testbench.vhd' +] +# auto-generated-end \ No newline at end of file diff --git a/02_Fulladder/.gitignore b/02_Fulladder/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/02_Fulladder/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/02_Fulladder/02_Fulladder.vhdpproj b/02_Fulladder/02_Fulladder.vhdpproj new file mode 100644 index 0000000..d7384b9 --- /dev/null +++ b/02_Fulladder/02_Fulladder.vhdpproj @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/02_Fulladder/design.vhd b/02_Fulladder/design.vhd new file mode 100644 index 0000000..aa63f6e --- /dev/null +++ b/02_Fulladder/design.vhd @@ -0,0 +1 @@ +-- empty: NOT EVEN library (otherwise compiler error) \ No newline at end of file diff --git a/02_Fulladder/fulladder.vhd b/02_Fulladder/fulladder.vhd new file mode 100644 index 0000000..daf599b --- /dev/null +++ b/02_Fulladder/fulladder.vhd @@ -0,0 +1,42 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +entity fulladder is + port (afa_i : in std_logic; + bfa_i : in std_logic; + cinfa_i : in std_logic; + sumfa_o : out std_logic; + coutfa_o : out std_logic); +end fulladder; + +architecture fa_behaviour of fulladder is + +-- Halfadder component + component halfadder is + port (a_i : in std_logic; + b_i : in std_logic; + sum_o : out std_logic; + cy_o : out std_logic); + end component; + + signal sig_ha1e, sig_ha1c, sig_ha2c : std_logic; + +begin + +-- Instances of two halfadders + HA1: halfadder port map( + a_i => afa_i, + b_i => bfa_i, + sum_o => sig_ha1e, + cy_o => sig_ha1c); + + HA2: halfadder port map( + a_i => sig_ha1e, + b_i => cinfa_i, + sum_o => sumfa_o, + cy_o => sig_ha2c); + +-- The OR gate + coutfa_o <= sig_ha1c OR sig_ha2c; + +end fa_behaviour; \ No newline at end of file diff --git a/02_Fulladder/halfadder.vhd b/02_Fulladder/halfadder.vhd new file mode 100644 index 0000000..3424cb8 --- /dev/null +++ b/02_Fulladder/halfadder.vhd @@ -0,0 +1,16 @@ +-- The halfadder design +library IEEE; +use IEEE.std_logic_1164.all; + +entity halfadder is + port (a_i : in std_logic; + b_i : in std_logic; + sum_o : out std_logic; + cy_o : out std_logic); +end halfadder; + +architecture behavior of halfadder is +begin + sum_o <= a_i xor b_i; + cy_o <= a_i and b_i; +end behavior; \ No newline at end of file diff --git a/02_Fulladder/testbench.vhd b/02_Fulladder/testbench.vhd new file mode 100644 index 0000000..484f3a5 --- /dev/null +++ b/02_Fulladder/testbench.vhd @@ -0,0 +1,34 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +entity testbench is +-- empty +end testbench; + +architecture tb of testbench is + -- DUT components + component fulladder is + port (afa_i : in std_logic; + bfa_i : in std_logic; + cinfa_i : in std_logic; + sumfa_o : out std_logic; + coutfa_o : out std_logic); + end component; + + signal sig_afa, sig_bfa, sig_cinfa, sig_sumfa, sig_coutfa: std_logic; + +begin + + -- Connect DUTs + DUT_s: fulladder port map( + afa_i => sig_afa, + bfa_i => sig_bfa, + cinfa_i => sig_cinfa, + sumfa_o => sig_sumfa, + coutfa_o => sig_coutfa); + + + sig_afa <= '0', '1' after 100 ns, '0' after 200 ns, '1' after 300 ns,'0' after 400 ns, '1' after 500 ns, '0' after 600 ns, '1' after 700 ns; + sig_bfa <= '0', '1' after 200 ns, '0' after 400 ns, '1' after 600 ns; + sig_cinfa <= '0', '1' after 400 ns; +end tb; diff --git a/02_Fulladder/vhdl_ls.toml b/02_Fulladder/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/02_Fulladder/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/03_MUX_Example/.gitignore b/03_MUX_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/03_MUX_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/03_MUX_Example/03_MUX_Example.vhdpproj b/03_MUX_Example/03_MUX_Example.vhdpproj new file mode 100644 index 0000000..38d1ce5 --- /dev/null +++ b/03_MUX_Example/03_MUX_Example.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/03_MUX_Example/design.vhd b/03_MUX_Example/design.vhd new file mode 100644 index 0000000..4e4c34f --- /dev/null +++ b/03_MUX_Example/design.vhd @@ -0,0 +1,20 @@ + +library IEEE; +use IEEE.std_logic_1164.all; + + +entity myMux is + port (sel : in std_logic_vector(1 downto 0); + data1_i : in std_logic_vector(2 downto 0); + data2_i : in std_logic_vector(2 downto 0); + outp : out std_logic_vector(2 downto 0) ); +end myMux; + + +architecture behavior of myMux is + +begin + with sel select outp <= data1_i when "00", + data2_i when "01", + "010" when others; +end behavior; diff --git a/03_MUX_Example/testbench.vhd b/03_MUX_Example/testbench.vhd new file mode 100644 index 0000000..116b837 --- /dev/null +++ b/03_MUX_Example/testbench.vhd @@ -0,0 +1,39 @@ + +library IEEE; +use IEEE.std_logic_1164.all; + +entity testbench is +end testbench; + + +architecture tb of testbench is + +-- DUT component declaration +component myMux is +port (sel : in std_logic_vector(1 downto 0); + data1_i : in std_logic_vector(2 downto 0); + data2_i : in std_logic_vector(2 downto 0); + outp : out std_logic_vector(2 downto 0) ); +end component; + +signal sig1, sig2 : std_logic; +signal sig_sel : std_logic_vector(1 downto 0); +signal sig_data1, sig_data2, sig_outp : std_logic_vector(2 downto 0); + + +begin +-- DUT instance +DUT: myMux port map( + sel => sig_sel, + data1_i => sig_data1, + data2_i => sig_data2, + outp => sig_outp); + +sig_data1 <= "111"; +sig_data2 <= "000"; +sig_sel <= (sig2,sig1); + +sig1 <= '0', '1' after 100 ns, '0' after 200 ns, '1' after 300 ns; +sig2 <= '0', '1' after 200 ns; + +end tb; \ No newline at end of file diff --git a/03_MUX_Example/vhdl_ls.toml b/03_MUX_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/03_MUX_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/04_ClockGen_Example/.gitignore b/04_ClockGen_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/04_ClockGen_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/04_ClockGen_Example/04_ClockGen_Example.vhdpproj b/04_ClockGen_Example/04_ClockGen_Example.vhdpproj new file mode 100644 index 0000000..0f8f11c --- /dev/null +++ b/04_ClockGen_Example/04_ClockGen_Example.vhdpproj @@ -0,0 +1,10 @@ + + + + + + + + testbench.vhd + + \ No newline at end of file diff --git a/04_ClockGen_Example/clkGen.vhd b/04_ClockGen_Example/clkGen.vhd new file mode 100644 index 0000000..e63528e --- /dev/null +++ b/04_ClockGen_Example/clkGen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; diff --git a/04_ClockGen_Example/design.vhd b/04_ClockGen_Example/design.vhd new file mode 100644 index 0000000..e69de29 diff --git a/04_ClockGen_Example/testbench.vhd b/04_ClockGen_Example/testbench.vhd new file mode 100644 index 0000000..4aba64c --- /dev/null +++ b/04_ClockGen_Example/testbench.vhd @@ -0,0 +1,23 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + +architecture tb of testbench is + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_clk : std_logic; + +begin + DUT: clkGen port map( + clk => sig_clk + ); + + +end tb; diff --git a/04_ClockGen_Example/vhdl_ls.toml b/04_ClockGen_Example/vhdl_ls.toml new file mode 100644 index 0000000..3d7c846 --- /dev/null +++ b/04_ClockGen_Example/vhdl_ls.toml @@ -0,0 +1,14 @@ +# auto-generated +[Libraries] +work.files = [ + 'clkGen.vhd', + 'design.vhd', + 'testbench.vhd' +] +[libraries.work] +files = [ + 'clkGen.vhd', + 'design.vhd', + 'testbench.vhd' +] +# auto-generated-end \ No newline at end of file diff --git a/05_Fulladder_allVariants/.gitignore b/05_Fulladder_allVariants/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/05_Fulladder_allVariants/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/05_Fulladder_allVariants/05_Fulladder_allVariants.vhdpproj b/05_Fulladder_allVariants/05_Fulladder_allVariants.vhdpproj new file mode 100644 index 0000000..ace605d --- /dev/null +++ b/05_Fulladder_allVariants/05_Fulladder_allVariants.vhdpproj @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/05_Fulladder_allVariants/design.vhd b/05_Fulladder_allVariants/design.vhd new file mode 100644 index 0000000..e69de29 diff --git a/05_Fulladder_allVariants/fulladder_process.vhd b/05_Fulladder_allVariants/fulladder_process.vhd new file mode 100644 index 0000000..c2708ba --- /dev/null +++ b/05_Fulladder_allVariants/fulladder_process.vhd @@ -0,0 +1,38 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + +entity fulladder_proc is + port (afa_proc_i : in std_logic; + bfa_proc_i : in std_logic; + cinfa_proc_i : in std_logic; + sumfa_proc_o : out std_logic; + coutfa_proc_o : out std_logic); +end fulladder_proc; + +architecture beh of fulladder_proc is + +signal sig_INPUTS: STD_LOGIC_VECTOR(2 downto 0); +signal sig_OUTPUTS: STD_LOGIC_VECTOR(1 downto 0); + +begin + sig_INPUTS <= (cinfa_proc_i,bfa_proc_i,afa_proc_i); + + table : process (sig_INPUTS) + begin + IF (sig_INPUTS = "000") then sig_OUTPUTS <= "00"; + elsif (sig_INPUTS = "001") then sig_OUTPUTS <= "01"; + elsif (sig_INPUTS = "010") then sig_OUTPUTS <= "01"; + elsif (sig_INPUTS = "011") then sig_OUTPUTS <= "10"; + elsif (sig_INPUTS = "100") then sig_OUTPUTS <= "01"; + elsif (sig_INPUTS = "101") then sig_OUTPUTS <= "10"; + elsif (sig_INPUTS = "110") then sig_OUTPUTS <= "10"; + elsif (sig_INPUTS = "111") then sig_OUTPUTS <= "11"; + else sig_OUTPUTS <= "XX"; end if; + + end process table; + + + sumfa_proc_o <= sig_OUTPUTS(0); + coutfa_proc_o <= sig_OUTPUTS(1); +end beh; \ No newline at end of file diff --git a/05_Fulladder_allVariants/fulladder_select.vhd b/05_Fulladder_allVariants/fulladder_select.vhd new file mode 100644 index 0000000..2edad24 --- /dev/null +++ b/05_Fulladder_allVariants/fulladder_select.vhd @@ -0,0 +1,34 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + +entity fulladder_sel is + port (afa_sel_i : in std_logic; + bfa_sel_i : in std_logic; + cinfa_sel_i : in std_logic; + sumfa_sel_o : out std_logic; + coutfa_sel_o : out std_logic); +end fulladder_sel; + +architecture behavior of fulladder_sel is + +signal sig_INPUTS: STD_LOGIC_VECTOR(2 downto 0); +signal sig_OUTPUTS: STD_LOGIC_VECTOR(1 downto 0); + +begin + sig_INPUTS <= (cinfa_sel_i,bfa_sel_i,afa_sel_i); + + with sig_INPUTS select + sig_OUTPUTS <= "00" when "000", + "01" when "001", + "01" when "010", + "10" when "011", + "01" when "100", + "10" when "101", + "10" when "110", + "11" when "111", + "XX" when others; + + sumfa_sel_o <= sig_OUTPUTS(0); + coutfa_sel_o <= sig_OUTPUTS(1); +end behavior; \ No newline at end of file diff --git a/05_Fulladder_allVariants/fulladder_struct.vhd b/05_Fulladder_allVariants/fulladder_struct.vhd new file mode 100644 index 0000000..388fc63 --- /dev/null +++ b/05_Fulladder_allVariants/fulladder_struct.vhd @@ -0,0 +1,43 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + +entity fulladder_struct is + port (afa_s_i : in std_logic; + bfa_s_i : in std_logic; + cinfa_s_i : in std_logic; + sumfa_s_o : out std_logic; + coutfa_s_o : out std_logic); +end fulladder_struct; + +architecture structural of fulladder_struct is + +-- Halfadder component +component halfadder is +port (a_i : in std_logic; + b_i : in std_logic; + sum_o : out std_logic; + cy_o : out std_logic); +end component; + +signal sig_ha1e, sig_ha1c, sig_ha2c : std_logic; + +begin + +-- Instances of two halfadders + HA1: halfadder port map( + a_i => afa_s_i, + b_i => bfa_s_i, + sum_o => sig_ha1e, + cy_o => sig_ha1c); + + HA2: halfadder port map( + a_i => sig_ha1e, + b_i => cinfa_s_i, + sum_o => sumfa_s_o, + cy_o => sig_ha2c); + +-- The OR gate + coutfa_s_o <= sig_ha1c OR sig_ha2c; + +end structural; \ No newline at end of file diff --git a/05_Fulladder_allVariants/halfadder.vhd b/05_Fulladder_allVariants/halfadder.vhd new file mode 100644 index 0000000..2cba44c --- /dev/null +++ b/05_Fulladder_allVariants/halfadder.vhd @@ -0,0 +1,16 @@ +-- The halfadder design +library IEEE; +use IEEE.std_logic_1164.all; + +entity halfadder is + port (a_i : in std_logic; + b_i : in std_logic; + sum_o : out std_logic; + cy_o : out std_logic); +end halfadder; + +architecture behavior of halfadder is +begin + sum_o <= a_i xor b_i; + cy_o <= a_i and b_i; +end behavior; \ No newline at end of file diff --git a/05_Fulladder_allVariants/testbench.vhd b/05_Fulladder_allVariants/testbench.vhd new file mode 100644 index 0000000..56af80e --- /dev/null +++ b/05_Fulladder_allVariants/testbench.vhd @@ -0,0 +1,141 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + +entity testbench is +-- empty +end testbench; + +architecture tb of testbench is +-- DUT components +component fulladder_struct is + port (afa_s_i : in std_logic; + bfa_s_i : in std_logic; + cinfa_s_i : in std_logic; + sumfa_s_o : out std_logic; + coutfa_s_o : out std_logic); +end component; + +component fulladder_sel is + port (afa_sel_i : in std_logic; + bfa_sel_i : in std_logic; + cinfa_sel_i : in std_logic; + sumfa_sel_o : out std_logic; + coutfa_sel_o : out std_logic); +end component; + +component fulladder_proc is + port (afa_proc_i : in std_logic; + bfa_proc_i : in std_logic; + cinfa_proc_i : in std_logic; + sumfa_proc_o : out std_logic; + coutfa_proc_o : out std_logic); +end component; + + + +signal sig_afa_s, sig_bfa_s, sig_cinfa_s, sig_sumfa_s, sig_coutfa_s: std_logic; +signal sig_afa_sel, sig_bfa_sel, sig_cinfa_sel, sig_sumfa_sel, sig_coutfa_sel: std_logic; +signal sig_afa_proc, sig_bfa_proc, sig_cinfa_proc, sig_sumfa_proc, sig_coutfa_proc: std_logic; + +begin + + -- Connect DUTs + DUT_s: fulladder_struct port map( + afa_s_i => sig_afa_s, + bfa_s_i => sig_bfa_s, + cinfa_s_i => sig_cinfa_s, + sumfa_s_o => sig_sumfa_s, + coutfa_s_o => sig_coutfa_s); + + DUT_sel: fulladder_sel port map( + afa_sel_i => sig_afa_sel, + bfa_sel_i => sig_bfa_sel, + cinfa_sel_i => sig_cinfa_sel, + sumfa_sel_o => sig_sumfa_sel, + coutfa_sel_o => sig_coutfa_sel); + + DUT_proc: fulladder_proc port map( + afa_proc_i => sig_afa_proc, + bfa_proc_i => sig_bfa_proc, + cinfa_proc_i => sig_cinfa_proc, + sumfa_proc_o => sig_sumfa_proc, + coutfa_proc_o => sig_coutfa_proc); + + stim :process is + + begin + + sig_afa_s <= '0'; sig_bfa_s <= '0'; sig_cinfa_s <= '0'; + sig_afa_sel <= '0'; sig_bfa_sel <= '0'; sig_cinfa_sel <= '0'; + sig_afa_proc <= '0'; sig_bfa_proc <= '0'; sig_cinfa_proc <= '0'; + + wait for 10 ns; + assert (sig_sumfa_s = sig_sumfa_sel) report "Test sum 000 NOK" severity failure; + assert (sig_coutfa_s = sig_coutfa_sel) report "Test carry 000 NOK" severity failure; + + sig_afa_s <= '1'; sig_bfa_s <= '0'; sig_cinfa_s <= '0'; + sig_afa_sel <= '1'; sig_bfa_sel <= '0'; sig_cinfa_sel <= '0'; + sig_afa_proc <= '1'; sig_bfa_proc <= '0'; sig_cinfa_proc <= '0'; + + wait for 10 ns; + assert (sig_sumfa_s = sig_sumfa_sel) report "Test sum 001 NOK" severity failure; + assert (sig_coutfa_s = sig_coutfa_sel) report "Test carry 001 NOK" severity failure; + + sig_afa_s <= '0'; sig_bfa_s <= '1'; sig_cinfa_s <= '0'; + sig_afa_sel <= '0'; sig_bfa_sel <= '1'; sig_cinfa_sel <= '0'; + sig_afa_proc <= '0'; sig_bfa_proc <= '1'; sig_cinfa_proc <= '0'; + + wait for 10 ns; + assert (sig_sumfa_s = sig_sumfa_sel) report "Test sum 010 NOK" severity failure; + assert (sig_coutfa_s = sig_coutfa_sel) report "Test carry 010 NOK" severity failure; + + sig_afa_s <= '1'; sig_bfa_s <= '1'; sig_cinfa_s <= '0'; + sig_afa_sel <= '1'; sig_bfa_sel <= '1'; sig_cinfa_sel <= '0'; + sig_afa_proc <= '1'; sig_bfa_proc <= '1'; sig_cinfa_proc <= '0'; + + wait for 10 ns; + assert (sig_sumfa_s = sig_sumfa_sel) report "Test sum 011 NOK" severity failure; + assert (sig_coutfa_s = sig_coutfa_sel) report "Test carry 011 NOK" severity failure; + + sig_afa_s <= '0'; sig_bfa_s <= '0'; sig_cinfa_s <= '1'; + sig_afa_sel <= '0'; sig_bfa_sel <= '0'; sig_cinfa_sel <= '1'; + sig_afa_proc <= '0'; sig_bfa_proc <= '0'; sig_cinfa_proc <= '1'; + + wait for 10 ns; + assert (sig_sumfa_s = sig_sumfa_sel) report "Test sum 100 NOK" severity failure; + assert (sig_coutfa_s = sig_coutfa_sel) report "Test carry 100 NOK" severity failure; + + sig_afa_s <= '1'; sig_bfa_s <= '0'; sig_cinfa_s <= '1'; + sig_afa_sel <= '1'; sig_bfa_sel <= '0'; sig_cinfa_sel <= '1'; + sig_afa_proc <= '1'; sig_bfa_proc <= '0'; sig_cinfa_proc <= '1'; + + wait for 10 ns; + assert (sig_sumfa_s = sig_sumfa_sel) report "Test sum 101 NOK" severity failure; + assert (sig_coutfa_s = sig_coutfa_sel) report "Test carry 101 NOK" severity failure; + + sig_afa_s <= '0'; sig_bfa_s <= '1'; sig_cinfa_s <= '1'; + sig_afa_sel <= '0'; sig_bfa_sel <= '1'; sig_cinfa_sel <= '1'; + sig_afa_proc <= '0'; sig_bfa_proc <= '1'; sig_cinfa_proc <= '1'; + + wait for 10 ns; + assert (sig_sumfa_s = sig_sumfa_sel) report "Test sum 110 NOK" severity failure; + assert (sig_coutfa_s = sig_coutfa_sel) report "Test carry 110 NOK" severity failure; + + sig_afa_s <= '1'; sig_bfa_s <= '1'; sig_cinfa_s <= '1'; + sig_afa_sel <= '1'; sig_bfa_sel <= '1'; sig_cinfa_sel <= '1'; + sig_afa_proc <= '1'; sig_bfa_proc <= '1'; sig_cinfa_proc <= '1'; + + wait for 10 ns; + assert (sig_sumfa_s = sig_sumfa_sel) report "Test sum 111 NOK" severity failure; + assert (sig_coutfa_s = sig_coutfa_sel) report "Test carry 111 NOK" severity failure; + + wait; + + end process stim; + + + + + +end tb; diff --git a/05_Fulladder_allVariants/vhdl_ls.toml b/05_Fulladder_allVariants/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/05_Fulladder_allVariants/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/06_VELS_Example/.gitignore b/06_VELS_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/06_VELS_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/06_VELS_Example/06_VELS_Example.vhdpproj b/06_VELS_Example/06_VELS_Example.vhdpproj new file mode 100644 index 0000000..38d1ce5 --- /dev/null +++ b/06_VELS_Example/06_VELS_Example.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/06_VELS_Example/design.vhd b/06_VELS_Example/design.vhd new file mode 100644 index 0000000..c2a09f0 --- /dev/null +++ b/06_VELS_Example/design.vhd @@ -0,0 +1,13 @@ +-- be aware of the correct order! +-- EDA compiles from left to right + +-- 1) gate entities +-- 2) architectures for the gate entities +-- 3) Package (must be done after 1, because otherwise componante is not known) +-- 4) your entity +-- 5) your architecture (needs to know all above) +-- 6) Testbench Entity +-- 7) Testbench Architecture (in same file as testbench entity) + + +-- This example is related to the first VELS taks using packages (if there is no package, skip step 1-3) \ No newline at end of file diff --git a/06_VELS_Example/testbench.vhd b/06_VELS_Example/testbench.vhd new file mode 100644 index 0000000..57c6acc --- /dev/null +++ b/06_VELS_Example/testbench.vhd @@ -0,0 +1,74 @@ +library IEEE; +use IEEE.std_logic_1164.all; +--use IEEE.std_artih.all; + + +entity testbench is +end testbench; + + +architecture tb of testbench is + + -- declare your DUT + component gates is + port( A,B,C,D : in std_logic; + O : out std_logic); + end component; + + + -- needed signals + signal sig_A, sig_B, sig_C, sig_D, sig_O: std_logic; + + begin + + -- Connect DUT with tb signals + DUT: gates port map( + A => sig_A, + B => sig_B, + C => sig_C, + D => sig_D, + O => sig_O); + + -- define process for testing our DUT + gate_tester : process + + -- define a procedure (Slides 07) that applys input vector, waits and than checks output + procedure check_sample(val_A, val_B, val_C, val_D, val_O : in std_logic) is + begin + + -- apply signals to DUT inputs + sig_A <= val_A; + sig_B <= val_B; + sig_C <= val_C; + sig_D <= val_D; + + -- wait (at least 1 delta cycle) + wait for 10 ns; + + -- check output of DUT and report possible error message + assert (sig_O = val_O) report "Error for A= " + & std_logic'image(val_A) & " B= " + & std_logic'image(val_B) & " C= " + & std_logic'image(val_C) & " D= " + & std_logic'image(val_D) & ". Output is " + & std_logic'image(sig_O) & " but should be " + & std_logic'image(val_O) & "." + severity failure; + + end procedure check_sample; + + begin + + -- now use procedure to check different combinations + -- change this according to your solution + -- (can also be done with loop, but we havn't learned that yet) + check_sample('0','0','0','0','1'); + check_sample('0','0','0','1','0'); + check_sample('1','1','1','1','1'); + + -- wait forever to stop process + wait; + + end process gate_tester; + +end tb; diff --git a/06_VELS_Example/vhdl_ls.toml b/06_VELS_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/06_VELS_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/07_DTime_GateDelay_Example/.gitignore b/07_DTime_GateDelay_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/07_DTime_GateDelay_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/07_DTime_GateDelay_Example/07_DTime_GateDelay_Example.vhdpproj b/07_DTime_GateDelay_Example/07_DTime_GateDelay_Example.vhdpproj new file mode 100644 index 0000000..38d1ce5 --- /dev/null +++ b/07_DTime_GateDelay_Example/07_DTime_GateDelay_Example.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/07_DTime_GateDelay_Example/design.vhd b/07_DTime_GateDelay_Example/design.vhd new file mode 100644 index 0000000..6feeb3e --- /dev/null +++ b/07_DTime_GateDelay_Example/design.vhd @@ -0,0 +1,17 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity log is + port (inp : in std_logic; + C : out std_logic); +end log; + +architecture behavior of log is +signal A,B : std_logic; +begin + A <= NOT inp after 1 ns; + B <= A NAND '1' after 1 ns; + C <= A AND B after 1 ns; +end behavior; diff --git a/07_DTime_GateDelay_Example/testbench.vhd b/07_DTime_GateDelay_Example/testbench.vhd new file mode 100644 index 0000000..2b4a8d3 --- /dev/null +++ b/07_DTime_GateDelay_Example/testbench.vhd @@ -0,0 +1,25 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +-- empty +end testbench; + +architecture tb of testbench is + +component log is +port (inp : in std_logic; + C : out std_logic); +end component; +signal inp_in, C_in : std_logic; + +begin + DUT: log port map( + inp => inp_in, + C => C_in + ); + inp_in <= '1', '0' after 10 ns, '1' after 20 ns; + +end tb; \ No newline at end of file diff --git a/07_DTime_GateDelay_Example/vhdl_ls.toml b/07_DTime_GateDelay_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/07_DTime_GateDelay_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/08_InfereredLatch_Example/.gitignore b/08_InfereredLatch_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/08_InfereredLatch_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/08_InfereredLatch_Example/08_InfereredLatch_Example.vhdpproj b/08_InfereredLatch_Example/08_InfereredLatch_Example.vhdpproj new file mode 100644 index 0000000..38d1ce5 --- /dev/null +++ b/08_InfereredLatch_Example/08_InfereredLatch_Example.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/08_InfereredLatch_Example/design.vhd b/08_InfereredLatch_Example/design.vhd new file mode 100644 index 0000000..1d30580 --- /dev/null +++ b/08_InfereredLatch_Example/design.vhd @@ -0,0 +1,21 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + +entity InfLatch is +port ( D:in std_logic; + En:in std_logic; + Q:out std_logic); +end InfLatch; + +architecture beh of InfLatch is +begin + +p0: process (D,En) +begin + if En= '1' then + Q <= D; + end if; +end process p0; + +end beh; \ No newline at end of file diff --git a/08_InfereredLatch_Example/testbench.vhd b/08_InfereredLatch_Example/testbench.vhd new file mode 100644 index 0000000..5fdf06a --- /dev/null +++ b/08_InfereredLatch_Example/testbench.vhd @@ -0,0 +1,46 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +-- empty +end testbench; + +architecture tb of testbench is + +component InfLatch is +port ( D:in std_logic; + En:in std_logic; + Q:out std_logic); +end component; + +signal sig_D, sig_En, sig_Q : std_logic; + +begin + DUT: InfLatch port map( + D => sig_D, + En => sig_en, + Q => sig_Q + ); + +stim : process +begin + sig_D <= '1'; + sig_EN <= '0'; + wait for 10 ns; + sig_En <= '1'; + wait for 2 ns; + sig_D <= '0'; + wait for 2 ns; + sig_D <= '1'; + wait for 10 ns; + sig_En <= '0'; + wait for 2 ns; + sig_D <= '0'; + wait for 2 ns; + sig_D <= '1'; + wait; +end process stim; + +end tb; \ No newline at end of file diff --git a/08_InfereredLatch_Example/vhdl_ls.toml b/08_InfereredLatch_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/08_InfereredLatch_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/09_DFF_Example/.gitignore b/09_DFF_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/09_DFF_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/09_DFF_Example/09_DFF_Example.vhdpproj b/09_DFF_Example/09_DFF_Example.vhdpproj new file mode 100644 index 0000000..ece8b06 --- /dev/null +++ b/09_DFF_Example/09_DFF_Example.vhdpproj @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/09_DFF_Example/clkgen.vhd b/09_DFF_Example/clkgen.vhd new file mode 100644 index 0000000..0f197fc --- /dev/null +++ b/09_DFF_Example/clkgen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; \ No newline at end of file diff --git a/09_DFF_Example/design.vhd b/09_DFF_Example/design.vhd new file mode 100644 index 0000000..6eb1437 --- /dev/null +++ b/09_DFF_Example/design.vhd @@ -0,0 +1,24 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + +entity myDFF is +port ( clk:in std_logic; + D:in std_logic; + reset:in std_logic; + Q:out std_logic); +end myDFF; + +architecture beh of myDFF is +begin + +DFF: process ( Clk, reset ) +begin + If reset ='1' then + Q <='0'; + Elsif (Clk'event and Clk ='1') then + Q <= D ; + end if ; +end process DFF; + +end beh; \ No newline at end of file diff --git a/09_DFF_Example/testbench.vhd b/09_DFF_Example/testbench.vhd new file mode 100644 index 0000000..f0db6b9 --- /dev/null +++ b/09_DFF_Example/testbench.vhd @@ -0,0 +1,60 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + +architecture tb of testbench is + +component myDFF is +port ( clk:in std_logic; + D:in std_logic; + reset:in std_logic; + Q:out std_logic); +end component; + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_D, sig_clk, sig_Q, sig_reset : std_logic; + +begin + DUT: myDFF port map( + clk => sig_clk, + D => sig_D, + reset => sig_reset, + Q => sig_Q + ); + + mClkGen : clkGen port map( + clk => sig_clk + ); + +res_stim : process +begin + sig_reset <= '0'; + wait for 2 ns; + sig_reset <= '1'; + wait for 10 ns; + sig_reset <= '0'; + wait for 20 ns; + sig_reset <= '1'; + wait for 1 ns; + sig_reset <= '0'; + wait; +end process res_stim; + +d_stim : process +begin + sig_D <= '0'; + wait for 17 ns; + sig_D <= '1'; + wait for 30 ns; + sig_D <= '0'; + wait; +end process d_stim; + +end tb; \ No newline at end of file diff --git a/09_DFF_Example/vhdl_ls.toml b/09_DFF_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/09_DFF_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/10_LFSR_Example/.gitignore b/10_LFSR_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/10_LFSR_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/10_LFSR_Example/10_LFSR_Example.vhdpproj b/10_LFSR_Example/10_LFSR_Example.vhdpproj new file mode 100644 index 0000000..ece8b06 --- /dev/null +++ b/10_LFSR_Example/10_LFSR_Example.vhdpproj @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/10_LFSR_Example/clkgen.vhd b/10_LFSR_Example/clkgen.vhd new file mode 100644 index 0000000..0f197fc --- /dev/null +++ b/10_LFSR_Example/clkgen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; \ No newline at end of file diff --git a/10_LFSR_Example/design.vhd b/10_LFSR_Example/design.vhd new file mode 100644 index 0000000..8b0a8aa --- /dev/null +++ b/10_LFSR_Example/design.vhd @@ -0,0 +1,32 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +entity LFSR is + Port ( clk : in std_logic; + value32 : out std_logic_vector (31 downto 0); + value16 : out std_logic_vector (15 downto 0); + value8 : out std_logic_vector ( 7 downto 0)); +end LFSR; + +architecture Behavioral of LFSR is +signal rnd32 : std_logic_vector (31 downto 0) := (others=>'0'); +signal rnd16 : std_logic_vector (15 downto 0) := (others=>'0'); +signal rnd8 : std_logic_vector ( 7 downto 0) := (others=>'0'); +begin + process begin + wait until rising_edge(CLK); + -- 8Bit + rnd8(7 downto 1) <= rnd8(6 downto 0) ; + rnd8(0) <= not(rnd8(7) XOR rnd8(6) XOR rnd8(4)); + -- 16Bit + rnd16(15 downto 1) <= rnd16(14 downto 0) ; + rnd16(0) <= not(rnd16(15) XOR rnd16(14) XOR rnd16(13) XOR rnd16(4)); + -- 32 Bit + rnd32(31 downto 1) <= rnd32(30 downto 0) ; + rnd32(0) <= not(rnd32(31) XOR rnd32(22) XOR rnd32(2) XOR rnd32(1)); + end process; + value32 <= rnd32; + value16 <= rnd16; + value8 <= rnd8; +end Behavioral; \ No newline at end of file diff --git a/10_LFSR_Example/testbench.vhd b/10_LFSR_Example/testbench.vhd new file mode 100644 index 0000000..63384ca --- /dev/null +++ b/10_LFSR_Example/testbench.vhd @@ -0,0 +1,40 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + +architecture tb of testbench is + +component LFSR is +Port ( clk : in std_logic; + value32 : out std_logic_vector (31 downto 0); + value16 : out std_logic_vector (15 downto 0); + value8 : out std_logic_vector ( 7 downto 0)); +end component; + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_clk : std_logic; +signal sig_r8 : std_logic_vector (7 downto 0); +signal sig_r16 : std_logic_vector (15 downto 0); +signal sig_r32 : std_logic_vector (31 downto 0); + +begin + DUT: LFSR port map( + clk => sig_clk, + value32 => sig_r32, + value16 => sig_r16, + value8 => sig_r8 + ); + + mClkGen : clkGen port map( + clk => sig_clk + ); + + +end tb; \ No newline at end of file diff --git a/10_LFSR_Example/vhdl_ls.toml b/10_LFSR_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/10_LFSR_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/11_MinArith/.gitignore b/11_MinArith/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/11_MinArith/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/11_MinArith/11_MinArith.vhdpproj b/11_MinArith/11_MinArith.vhdpproj new file mode 100644 index 0000000..38d1ce5 --- /dev/null +++ b/11_MinArith/11_MinArith.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/11_MinArith/design.vhd b/11_MinArith/design.vhd new file mode 100644 index 0000000..a8704e2 --- /dev/null +++ b/11_MinArith/design.vhd @@ -0,0 +1,25 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use ieee.numeric_std.all; + + +entity minArith is + port (a_i : in std_logic_vector (7 downto 0); + b_i : in std_logic_vector (7 downto 0); + ssum_o : out std_logic_vector (7 downto 0); + sdiff_o : out std_logic_vector (7 downto 0); + usum_o : out std_logic_vector (7 downto 0); + udiff_o : out std_logic_vector (7 downto 0); + ainc_o : out std_logic_vector (7 downto 0)); +end minArith; + +-- behavioral description of the halfadder given by two gates +architecture behavior of minArith is +begin + ssum_o <= std_logic_vector(signed(a_i) + signed(b_i)); + sdiff_o <= std_logic_vector(signed(a_i) - signed(b_i)); + usum_o <= std_logic_vector(unsigned(a_i) + unsigned(b_i)); + udiff_o <= std_logic_vector(unsigned(a_i) - unsigned(b_i)); + ainc_o <= std_logic_vector(unsigned(a_i) + "00000001"); + +end behavior; \ No newline at end of file diff --git a/11_MinArith/testbench.vhd b/11_MinArith/testbench.vhd new file mode 100644 index 0000000..5ab1309 --- /dev/null +++ b/11_MinArith/testbench.vhd @@ -0,0 +1,40 @@ +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + + +architecture tb of testbench is + +component minArith is +port (a_i : in std_logic_vector (7 downto 0); + b_i : in std_logic_vector (7 downto 0); + ssum_o : out std_logic_vector (7 downto 0); + sdiff_o : out std_logic_vector (7 downto 0); + usum_o : out std_logic_vector (7 downto 0); + udiff_o : out std_logic_vector (7 downto 0); + ainc_o : out std_logic_vector (7 downto 0)); +end component; + + +signal sig_a, sig_b, sig_ssum, sig_sdiff, sig_usum, sig_udiff, sig_ainc : std_logic_vector(7 downto 0); + +begin + + DUT: minArith port map( + a_i => sig_a, + b_i => sig_b, + ssum_o => sig_ssum, + sdiff_o => sig_sdiff, + usum_o => sig_usum, + udiff_o => sig_udiff, + ainc_o => sig_ainc ); + + + + sig_a <= "00000001", "00000010" after 100 ns, "00001010" after 200 ns; + sig_b <= "00000001", "00000011" after 100 ns, "00100010" after 200 ns; + +end tb; diff --git a/11_MinArith/vhdl_ls.toml b/11_MinArith/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/11_MinArith/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/12_HA_with_assert_tb_Example/.gitignore b/12_HA_with_assert_tb_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/12_HA_with_assert_tb_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/12_HA_with_assert_tb_Example/12_HA_with_assert_tb_Example.vhdpproj b/12_HA_with_assert_tb_Example/12_HA_with_assert_tb_Example.vhdpproj new file mode 100644 index 0000000..38d1ce5 --- /dev/null +++ b/12_HA_with_assert_tb_Example/12_HA_with_assert_tb_Example.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/12_HA_with_assert_tb_Example/design.vhd b/12_HA_with_assert_tb_Example/design.vhd new file mode 100644 index 0000000..10968ca --- /dev/null +++ b/12_HA_with_assert_tb_Example/design.vhd @@ -0,0 +1,18 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +-- entity of the halfadder +-- 2 inputs, 2 outputs, both of type IEEE1164 std_logic +entity halfadder is + port (a_i : in std_logic; + b_i : in std_logic; + sum_o : out std_logic; + cy_o : out std_logic); +end halfadder; + +-- behavioral description of the halfadder given by two gates +architecture behavior of halfadder is +begin + sum_o <= a_i xor b_i; + cy_o <= a_i and b_i; +end behavior; \ No newline at end of file diff --git a/12_HA_with_assert_tb_Example/testbench.vhd b/12_HA_with_assert_tb_Example/testbench.vhd new file mode 100644 index 0000000..475a293 --- /dev/null +++ b/12_HA_with_assert_tb_Example/testbench.vhd @@ -0,0 +1,70 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +-- the entity of the testbench is empty, no connection to the outer world +entity testbench is +end testbench; + + +architecture tb of testbench is +-- DUT (device under test = halfadder) component declaration +component halfadder is +port (a_i : in std_logic; + b_i : in std_logic; + sum_o : out std_logic; + cy_o : out std_logic); +end component; + +-- signals for the testbench +signal sig_a, sig_b, sig_sum_out, sig_cy_out: std_logic; + +begin + + -- Connect DUT with tb signals + DUT: halfadder port map( + a_i => sig_a, + b_i => sig_b, + sum_o => sig_sum_out, + cy_o => sig_cy_out); + + -- Process for DUT Test + stimTest : process + + -- Procedure for applying an input vector + procedure applyTv(inputs : in std_logic_vector (1 downto 0)) is + begin + sig_a <= inputs(0); + sig_b <= inputs(1); + wait for 10 ns; + end procedure applyTv; + + -- Procedure for checking the outputs + procedure check(outputs : in std_logic_vector (1 downto 0)) is + begin + + assert (sig_sum_out = outputs(0)) + report "Testpattern " & std_logic'image(sig_a) & " " & std_logic'image(sig_b) & " Error in sum_out got " & std_logic'image(sig_sum_out) & " expected " & std_logic'image(outputs(0)) severity error; + + assert (sig_cy_out = outputs(1)) + report "Testpattern " & std_logic'image(sig_b) & " " & std_logic'image(sig_a) & " Error in cy_out got " & std_logic'image(sig_cy_out) & " expected " & std_logic'image(outputs(1)) severity error; + + end procedure check; + + + + begin + + -- Let's apply different input vectors and check the output + applyTv("00"); + check("00"); + applyTv("01"); + check("01"); + applyTv("10"); + check("01"); + applyTv("11"); + check("10"); + wait; + + end process stimTest; + +end tb; diff --git a/12_HA_with_assert_tb_Example/vhdl_ls.toml b/12_HA_with_assert_tb_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/12_HA_with_assert_tb_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/13_procedure_Example/.gitignore b/13_procedure_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/13_procedure_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/13_procedure_Example/13_procedure_Example.vhdpproj b/13_procedure_Example/13_procedure_Example.vhdpproj new file mode 100644 index 0000000..38d1ce5 --- /dev/null +++ b/13_procedure_Example/13_procedure_Example.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/13_procedure_Example/design.vhd b/13_procedure_Example/design.vhd new file mode 100644 index 0000000..d3ed9c1 --- /dev/null +++ b/13_procedure_Example/design.vhd @@ -0,0 +1,14 @@ +library IEEE; +use IEEE.std_logic_1164.all; + + +entity MyDesign is + port (clk_i : in std_logic; + data_i : in std_logic); +end MyDesign; + + +architecture behavior of MyDesign is +begin + +end behavior; \ No newline at end of file diff --git a/13_procedure_Example/testbench.vhd b/13_procedure_Example/testbench.vhd new file mode 100644 index 0000000..26992e0 --- /dev/null +++ b/13_procedure_Example/testbench.vhd @@ -0,0 +1,108 @@ +library IEEE; +use IEEE.std_logic_1164.all; +--use IEEE.std_artih.all; + + +entity testbench is +end testbench; + + +architecture tb of testbench is + +component MyDesign is +port (clk_i : in std_logic; + data_i : in std_logic); +end component; + + + +signal sig_data, sig_clk: std_logic; +signal send_count : integer :=0; + +begin + + -- Connect DUT with tb signals + DUT: MyDesign port map( + clk_i => sig_clk, + data_i => sig_data); + + stimTest : process + + procedure send(d0,d1,d2,d3 : in std_logic) is + begin + + if (send_count=0) then + assert ((d0='1') AND (d1='1') AND (d2='1') AND (d3='1')) report "error in first frame (d0,d1,d2,d3) is " + & std_logic'image(d0) + & std_logic'image(d1) + & std_logic'image(d2) + & std_logic'image(d3) + severity error; + end if; + + wait for 4 ms; + + sig_data <= '0'; + sig_clk <= '1'; + + for I in 0 to 3 loop + wait for 1 ms; + sig_clk <= NOT sig_clk; + end loop; + + sig_data <= d0; + sig_clk <= '1'; + wait for 1 ms; + sig_clk <= '0'; + wait for 1 ms; + + sig_data <= d1; + sig_clk <= '1'; + wait for 1 ms; + sig_clk <= '0'; + wait for 1 ms; + + sig_data <= d2; + sig_clk <= '1'; + wait for 1 ms; + sig_clk <= '0'; + wait for 1 ms; + + sig_data <= d3; + sig_clk <= '1'; + wait for 1 ms; + sig_clk <= '0'; + wait for 1 ms; + + sig_data <= '0'; + sig_clk <= '1'; + wait for 1 ms; + sig_clk <= '0'; + wait for 1 ms; + + sig_data <= '1'; + sig_clk <= '1'; + wait for 1ms; + sig_clk <= '0'; + + send_count <= send_count+1; + + end procedure send; + + + begin + + sig_clk <= '0'; + sig_data <= '1'; + + send('1','0','1','0'); + + wait for 10 ms; + + send('0','1','0','1'); + + + wait; + end process stimTest; + +end tb; diff --git a/13_procedure_Example/vhdl_ls.toml b/13_procedure_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/13_procedure_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/14_FSM_Moore_Example/.gitignore b/14_FSM_Moore_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/14_FSM_Moore_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/14_FSM_Moore_Example/14_FSM_Moore_Example.vhdpproj b/14_FSM_Moore_Example/14_FSM_Moore_Example.vhdpproj new file mode 100644 index 0000000..ece8b06 --- /dev/null +++ b/14_FSM_Moore_Example/14_FSM_Moore_Example.vhdpproj @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/14_FSM_Moore_Example/clkgen.vhd b/14_FSM_Moore_Example/clkgen.vhd new file mode 100644 index 0000000..0f197fc --- /dev/null +++ b/14_FSM_Moore_Example/clkgen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; \ No newline at end of file diff --git a/14_FSM_Moore_Example/design.vhd b/14_FSM_Moore_Example/design.vhd new file mode 100644 index 0000000..b247d34 --- /dev/null +++ b/14_FSM_Moore_Example/design.vhd @@ -0,0 +1,81 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + +entity FSM is + port ( clk : in STD_LOGIC; + reset : in STD_LOGIC; + start : in STD_LOGIC; + stop : in STD_LOGIC; + cout : out STD_LOGIC_VECTOR (2 downto 0)); +end FSM; + +architecture beh of FSM is + +type state_t is (cs_reset,cs_wait,cs_one,cs_two,cs_three,cs_four,cs_five); +signal state, next_state : state_t := cs_reset; + + +begin + +p_seq: process (clk,reset) +begin + if reset ='1' then + state <= cs_reset; + elsif (Clk'event and Clk ='1') then + state <= next_state; + end if; +end process p_seq; + +p_comb: process (state,start,stop) +begin + case state is + when cs_reset => next_state <= cs_wait; + cout <= "XXX"; + + when cs_wait => if (start='1' and stop='0') then + next_state <= cs_one; + else + next_state <= cs_wait; + end if; + cout <= "000"; + + when cs_one => if (stop='1') then + next_state <= cs_wait; + else + next_state <= cs_two; + end if; + cout <= "001"; + + + when cs_two => if (stop='1') then + next_state <= cs_wait; + else + next_state <= cs_three; + end if; + cout <= "010"; + + when cs_three => if (stop='1') then + next_state <= cs_wait; + else + next_state <= cs_four; + end if; + cout <= "011"; + + when cs_four => if (stop='1') then + next_state <= cs_wait; + else + next_state <= cs_five; + end if; + cout <= "100"; + + when cs_five => next_state <= cs_wait; + cout <= "101"; + + end case; + +end process p_comb; + + + +end beh; \ No newline at end of file diff --git a/14_FSM_Moore_Example/testbench.vhd b/14_FSM_Moore_Example/testbench.vhd new file mode 100644 index 0000000..97da47f --- /dev/null +++ b/14_FSM_Moore_Example/testbench.vhd @@ -0,0 +1,45 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + +architecture tb of testbench is + +component FSM is +port ( clk : in STD_LOGIC; + reset : in STD_LOGIC; + start : in STD_LOGIC; + stop : in STD_LOGIC; + cout : out STD_LOGIC_VECTOR (2 downto 0)); +end component; + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_clk, sig_reset, sig_start, sig_stop : std_logic; +signal sig_cout : STD_LOGIC_VECTOR (2 downto 0); + +begin + DUT: FSM port map( + clk => sig_clk, + reset => sig_reset, + start => sig_start, + stop => sig_stop, + cout => sig_cout + ); + + mClkGen : clkGen port map( + clk => sig_clk + ); + + + +sig_start <= '0', '1' after 22 ns, '0' after 45 ns, '1' after 82 ns, '0' after 86 ns; + +sig_reset <='0','1' after 102 ns, '0' after 123 ns; +sig_stop <= '0', '1' after 58 ns, '0' after 68 ns; +end tb; \ No newline at end of file diff --git a/14_FSM_Moore_Example/vhdl_ls.toml b/14_FSM_Moore_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/14_FSM_Moore_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/15_FSM_Mealy_Example/.gitignore b/15_FSM_Mealy_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/15_FSM_Mealy_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/15_FSM_Mealy_Example/15_FSM_Mealy_Example.vhdpproj b/15_FSM_Mealy_Example/15_FSM_Mealy_Example.vhdpproj new file mode 100644 index 0000000..17c77d7 --- /dev/null +++ b/15_FSM_Mealy_Example/15_FSM_Mealy_Example.vhdpproj @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/15_FSM_Mealy_Example/clkgen.vhd b/15_FSM_Mealy_Example/clkgen.vhd new file mode 100644 index 0000000..0f197fc --- /dev/null +++ b/15_FSM_Mealy_Example/clkgen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; \ No newline at end of file diff --git a/15_FSM_Mealy_Example/design.vhd b/15_FSM_Mealy_Example/design.vhd new file mode 100644 index 0000000..e69de29 diff --git a/15_FSM_Mealy_Example/fsm_syn.vhd b/15_FSM_Mealy_Example/fsm_syn.vhd new file mode 100644 index 0000000..545a307 --- /dev/null +++ b/15_FSM_Mealy_Example/fsm_syn.vhd @@ -0,0 +1,79 @@ +-- Code your design here +library IEEE; +use IEEE.std_logic_1164.all; + +entity FSM_sync is + port ( clk : in STD_LOGIC; + data_in : in STD_LOGIC; + direct : in STD_LOGIC; + invert : in STD_LOGIC; + data_out_sync : out STD_LOGIC); +end FSM_sync; + +architecture beh of FSM_sync is + + type state_t is (S_start,S_direct,S_invert); + + signal state : state_t := S_start; + signal next_state : state_t := S_start; + + signal dbg_state: std_logic_vector(1 downto 0); -- just for debugging (we can't see type state_t in the waveform viewer) + + signal next_data_out : std_logic := '0'; + +begin + + p_seq: process (clk) + begin + if (clk'event and clk ='1') then + state <= next_state; + data_out_sync <= next_data_out; + end if; + end process p_seq; + + + p_comb: process (state,data_in,direct,invert) + begin + case state is + when S_start => if direct AND NOT invert then + next_data_out <= data_in; + next_state <= S_direct; + elsif invert AND NOT direct then + next_data_out <= not data_in; + next_state <= S_invert; + else + next_data_out <= '0'; + next_state <= S_start; + end if; + + when S_direct => if direct and not invert then + next_state <= S_direct; + next_data_out <= data_in; + else + next_state <= S_start; + next_data_out <= '0'; + end if; + + when S_invert => if invert and not direct then + next_state <= S_invert; + next_data_out <= not data_in; + else + next_state <= S_start; + next_data_out <= '0'; + end if; + end case; + + end process p_comb; + + -- just for debugging, we transform the state (type state_t) to a 2bit vector, which we can see in the waveform viewer + dbg: process (state) + begin + case state is + when S_start => dbg_state <= "00"; + when S_direct => dbg_state <= "01"; + when S_invert => dbg_state <= "10"; + end case; + end process dbg; + + +end beh; \ No newline at end of file diff --git a/15_FSM_Mealy_Example/testbench.vhd b/15_FSM_Mealy_Example/testbench.vhd new file mode 100644 index 0000000..c9901c9 --- /dev/null +++ b/15_FSM_Mealy_Example/testbench.vhd @@ -0,0 +1,60 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + +architecture tb of testbench is + +component FSM is +port ( clk : in STD_LOGIC; + data_in : in STD_LOGIC; + direct : in STD_LOGIC; + invert : in STD_LOGIC; + data_out : out STD_LOGIC); +end component; + +component FSM_sync is +port ( clk : in STD_LOGIC; + data_in : in STD_LOGIC; + direct : in STD_LOGIC; + invert : in STD_LOGIC; + data_out_sync : out STD_LOGIC); +end component; + + + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_clk, sig_din,sig_dout, sig_dout_sync, sig_direct, sig_invert : std_logic; + + +begin + DUT: FSM port map( + clk => sig_clk, + direct => sig_direct, + invert => sig_invert, + data_in => sig_din, + data_out => sig_dout + ); + + DUT_sync: FSM_sync port map( + clk => sig_clk, + direct => sig_direct, + invert => sig_invert, + data_in => sig_din, + data_out_sync => sig_dout_sync + ); + + mClkGen : clkGen port map( + clk => sig_clk + ); + +sig_din <='0', '1' after 22 ns, '0' after 40 ns, '1' after 100 ns, '0' after 140 ns, '1' after 142 ns, '0' after 150 ns, '1' after 170 ns, '0' after 200 ns, '1' after 282 ns, '0' after 482 ns, '1' after 500 ns, '0' after 525 ns, '1' after 570 ns, '0' after 632ns, '1' after 750 ns; +sig_direct<= '0', '1' after 100 ns, '0' after 400 ns, '1' after 600 ns; +sig_invert<= '0', '1' after 350 ns, '0' after 650 ns, '1' after 700 ns; +end tb; \ No newline at end of file diff --git a/15_FSM_Mealy_Example/vhdl_ls.toml b/15_FSM_Mealy_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/15_FSM_Mealy_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/16_asyncROM_Example/.gitignore b/16_asyncROM_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/16_asyncROM_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/16_asyncROM_Example/16_asyncROM_Example.vhdpproj b/16_asyncROM_Example/16_asyncROM_Example.vhdpproj new file mode 100644 index 0000000..e12c55f --- /dev/null +++ b/16_asyncROM_Example/16_asyncROM_Example.vhdpproj @@ -0,0 +1,9 @@ + + + + + + + testbench.vhd + + \ No newline at end of file diff --git a/16_asyncROM_Example/design.vhd b/16_asyncROM_Example/design.vhd new file mode 100644 index 0000000..bdda6db --- /dev/null +++ b/16_asyncROM_Example/design.vhd @@ -0,0 +1,41 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity single_port_rom is + port + ( + addr : in std_logic_vector(3 downto 0); + q : out std_logic_vector(4 downto 0) + ); +end single_port_rom; + +architecture rtl of single_port_rom is + + -- Build a 2-D array type for the ROM + subtype word_t is std_logic_vector(4 downto 0); + type memory_t is array(0 to 15) of word_t; + + constant romdata : memory_t := ( + "10101", -- data for address 0 + "11111", -- data for address 1 + "10101", + "11110", + "10110", + "10101", + "11010", + "10010", + "10110", + "11101", + "10110", + "10111", + "00110", + "11101", + "10010", + "10110" -- data for address 15 + ); + +begin + q <= romdata(to_integer(unsigned(addr))); + +end rtl; \ No newline at end of file diff --git a/16_asyncROM_Example/testbench.ghw b/16_asyncROM_Example/testbench.ghw new file mode 100644 index 0000000000000000000000000000000000000000..3b0f465b9419a7c571571c011476b447ab2a1a13 GIT binary patch literal 525 zcmYjOO-sW-5S>Z3`KZ>!&)Snv4|@_?5RZbk!4}1qCQ|Dq#3s~0t(c~I)W6`-AK=l0 zf62RdZ#uJ8ah5l4W*8oCcaK`lll$l{DY}3t5d5GA92LS7LGDPbNvun3Nj#BwCb2K^ zT;hdf8@>v#*adw?#=`ft;G2Fs59fiCpZZVH0ag@bc9FA{B z>Cg`A^}XHVT{6sXGBHy#Exm?3ndX5R3rbFgh;GfRTDY^g2^G~5MX#9;(`#CzX0zAIH3!!UtRH@UH zLp2&T1%hgLA0E8M0GjO{@JCss%b(>E^ZUFI^Zh=E`EsAcY;PZFk1QS%vzw5ZHQtE5 MP7{KIw$kJN8+oQxoB#j- literal 0 HcmV?d00001 diff --git a/16_asyncROM_Example/testbench.vhd b/16_asyncROM_Example/testbench.vhd new file mode 100644 index 0000000..40e1de1 --- /dev/null +++ b/16_asyncROM_Example/testbench.vhd @@ -0,0 +1,47 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + +architecture tb of testbench is + +component single_port_rom is +port + ( + addr : in std_logic_vector(3 downto 0); + q : out std_logic_vector(4 downto 0) + ); +end component; + + +signal sig_addr : std_logic_vector(3 downto 0); +signal sig_q : std_logic_vector(4 downto 0); + + +begin + DUT: single_port_rom port map( + addr => sig_addr, + q => sig_q + ); + + + +stim: process +begin +sig_addr <= "0000"; +wait for 10 ns; +sig_addr <= "0001"; +wait for 10 ns; +sig_addr <= "0010"; +wait for 10 ns; +sig_addr <= "0100"; +wait for 10 ns; +sig_addr <= "1000"; +wait; +end process stim; + + +end tb; \ No newline at end of file diff --git a/16_asyncROM_Example/vhdl_ls.toml b/16_asyncROM_Example/vhdl_ls.toml new file mode 100644 index 0000000..b6c38f9 --- /dev/null +++ b/16_asyncROM_Example/vhdl_ls.toml @@ -0,0 +1,12 @@ +# auto-generated +[Libraries] +work.files = [ + 'design.vhd', + 'testbench.vhd' +] +[libraries.work] +files = [ + 'design.vhd', + 'testbench.vhd' +] +# auto-generated-end \ No newline at end of file diff --git a/17_syncROM_Example/.gitignore b/17_syncROM_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/17_syncROM_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/17_syncROM_Example/17_syncROM_Example.vhdpproj b/17_syncROM_Example/17_syncROM_Example.vhdpproj new file mode 100644 index 0000000..4ab5dc4 --- /dev/null +++ b/17_syncROM_Example/17_syncROM_Example.vhdpproj @@ -0,0 +1,10 @@ + + + + + + + + testbench.vhd + + \ No newline at end of file diff --git a/17_syncROM_Example/clkgen.vhd b/17_syncROM_Example/clkgen.vhd new file mode 100644 index 0000000..0f197fc --- /dev/null +++ b/17_syncROM_Example/clkgen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; \ No newline at end of file diff --git a/17_syncROM_Example/design.vhd b/17_syncROM_Example/design.vhd new file mode 100644 index 0000000..f07f22a --- /dev/null +++ b/17_syncROM_Example/design.vhd @@ -0,0 +1,45 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity single_port_rom is + port + ( + addr : in std_logic_vector(15 downto 0); + clk : in std_logic; + q : out std_logic_vector(7 downto 0) + ); +end single_port_rom; + +architecture rtl of single_port_rom is + + -- Build a 2-D array type for the RoM + subtype word_t is std_logic_vector(7 downto 0); + type memory_t is array(0 to 5) of word_t; + + constant romdata : memory_t := ( + X"FF", -- data for address 0 in HEX notation + X"A5", -- data for address 1 in HEX notation + X"AA", + X"B6", + X"5C", + X"23" + ); + + +begin + + process(clk) + variable addr_to_read : integer; + begin + if(rising_edge(clk)) then + addr_to_read := to_integer(unsigned(addr)); + if addr_to_read <= 5 then + q <= romdata(addr_to_read); + else + q <= "XXXXXXXX"; + end if; + end if; + end process; + +end rtl; \ No newline at end of file diff --git a/17_syncROM_Example/testbench.vhd b/17_syncROM_Example/testbench.vhd new file mode 100644 index 0000000..b8d9f7e --- /dev/null +++ b/17_syncROM_Example/testbench.vhd @@ -0,0 +1,51 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; +use ieee.numeric_std.all; + +entity testbench is +end testbench; + +architecture tb of testbench is + +component single_port_rom is +port + ( + addr : in std_logic_vector(15 downto 0); + clk : in std_logic; + q : out std_logic_vector(7 downto 0) + ); +end component; + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_clk : std_logic; +signal sig_addr : std_logic_vector(15 downto 0); +signal sig_q : std_logic_vector(7 downto 0); + + +begin + DUT: single_port_rom port map( + clk => sig_clk, + addr => sig_addr, + q => sig_q + ); + + mClkGen : clkGen port map( + clk => sig_clk + ); + +stim: process +begin +sig_addr <= "0000000000000000"; +wait for 12 ns; +sig_addr <= "0000000000000001"; +wait for 12 ns; +sig_addr <= std_logic_vector(to_unsigned(10,16)); +wait; +end process stim; + + +end tb; \ No newline at end of file diff --git a/17_syncROM_Example/vhdl_ls.toml b/17_syncROM_Example/vhdl_ls.toml new file mode 100644 index 0000000..7c72fe6 --- /dev/null +++ b/17_syncROM_Example/vhdl_ls.toml @@ -0,0 +1,14 @@ +# auto-generated +[Libraries] +work.files = [ + 'clkgen.vhd', + 'design.vhd', + 'testbench.vhd' +] +[libraries.work] +files = [ + 'clkgen.vhd', + 'design.vhd', + 'testbench.vhd' +] +# auto-generated-end \ No newline at end of file diff --git a/18_RAM_Example/.gitignore b/18_RAM_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/18_RAM_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/18_RAM_Example/18_RAM_Example.vhdpproj b/18_RAM_Example/18_RAM_Example.vhdpproj new file mode 100644 index 0000000..ece8b06 --- /dev/null +++ b/18_RAM_Example/18_RAM_Example.vhdpproj @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/18_RAM_Example/clkgen.vhd b/18_RAM_Example/clkgen.vhd new file mode 100644 index 0000000..0f197fc --- /dev/null +++ b/18_RAM_Example/clkgen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; \ No newline at end of file diff --git a/18_RAM_Example/design.vhd b/18_RAM_Example/design.vhd new file mode 100644 index 0000000..21ee0c8 --- /dev/null +++ b/18_RAM_Example/design.vhd @@ -0,0 +1,46 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity single_port_ram is + port + ( + data : in std_logic_vector(7 downto 0); + addr : in std_logic_vector(15 downto 0); + we : in std_logic; + clk : in std_logic; + q : out std_logic_vector(7 downto 0) + ); + +end entity; + +architecture rtl of single_port_ram is + + -- Build a 2-D array type for the RAM + subtype word_t is std_logic_vector(7 downto 0); + type memory_t is array(2**7-1 downto 0) of word_t; -- 2**7 = 128 + + signal ram : memory_t; + + -- Register to hold the address + signal addr_reg : std_logic_vector(15 downto 0); + +begin + + process(clk) + begin + if(rising_edge(clk)) then + if(we = '1') then + ram(to_integer(unsigned(addr))) <= data; + end if; + + -- Register the address for reading (synchron) + addr_reg <= addr; + end if; + + end process; + + -- asynchron data output (but attention: addr_reg changes synchronously) + q <= ram(to_integer(unsigned(addr_reg))); + +end rtl; diff --git a/18_RAM_Example/testbench.vhd b/18_RAM_Example/testbench.vhd new file mode 100644 index 0000000..b2ddd97 --- /dev/null +++ b/18_RAM_Example/testbench.vhd @@ -0,0 +1,95 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + +architecture tb of testbench is + +component single_port_ram is +port + ( + data : in std_logic_vector(7 downto 0); + addr : in std_logic_vector(15 downto 0); + we : in std_logic; + clk : in std_logic; + q : out std_logic_vector(7 downto 0) + ); +end component; + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_clk : std_logic; +signal sig_addr : std_logic_vector(15 downto 0); +signal sig_q : std_logic_vector(7 downto 0); +signal sig_data : std_logic_vector(7 downto 0); +signal sig_we : std_logic; +use ieee.numeric_std.all; + +begin + DUT: single_port_ram port map( + clk => sig_clk, + addr => sig_addr, + data => sig_data, + we => sig_we, + q => sig_q + ); + + mClkGen : clkGen port map( + clk => sig_clk + ); + +stim: process + + procedure ReadRAM(read_addr : in integer) is + begin + sig_we <= '0'; + sig_addr <= std_logic_vector(to_unsigned(read_addr,16)); + end procedure ReadRAM; + + procedure WriteRAM(write_addr : in integer; write_data : in std_logic_vector(7 downto 0)) is + begin + sig_we <= '1'; + sig_addr <= std_logic_vector(to_unsigned(write_addr,16)); + sig_data <= write_data; + end procedure WriteRAM; + + +begin + +wait for 7 ns; + +WriteRAM(2,"00000001"); +wait for 20 ns; +WriteRAM(4,"00000010"); +wait for 20 ns; +WriteRAM(6,"00000011"); +wait for 20 ns; +WriteRAM(8,"00000100"); +wait for 20 ns; +WriteRAM(10,"11111111"); +wait for 30 ns; + +ReadRAM(2); +wait for 20 ns; +ReadRAM(4); +wait for 20 ns; +ReadRAM(6); +wait for 20 ns; +ReadRAM(8); +wait for 20 ns; +ReadRAM(10); +wait for 20 ns; +ReadRAM(11); +wait for 20 ns; + + +wait; +end process stim; + + +end tb; \ No newline at end of file diff --git a/18_RAM_Example/vhdl_ls.toml b/18_RAM_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/18_RAM_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/19_RAMbus_Example/.gitignore b/19_RAMbus_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/19_RAMbus_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/19_RAMbus_Example/19_RAMbus_Example.vhdpproj b/19_RAMbus_Example/19_RAMbus_Example.vhdpproj new file mode 100644 index 0000000..ece8b06 --- /dev/null +++ b/19_RAMbus_Example/19_RAMbus_Example.vhdpproj @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/19_RAMbus_Example/clkgen.vhd b/19_RAMbus_Example/clkgen.vhd new file mode 100644 index 0000000..0f197fc --- /dev/null +++ b/19_RAMbus_Example/clkgen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; \ No newline at end of file diff --git a/19_RAMbus_Example/design.vhd b/19_RAMbus_Example/design.vhd new file mode 100644 index 0000000..6ab41d6 --- /dev/null +++ b/19_RAMbus_Example/design.vhd @@ -0,0 +1,47 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity single_port_ram is + port + ( + data : inout std_logic_vector(7 downto 0); + addr : in std_logic_vector(15 downto 0); + cs : in std_logic; -- chip select + we : in std_logic; -- write enable + oe : in std_logic; -- output enable + clk : in std_logic + ); + +end entity; + +architecture rtl of single_port_ram is + + -- Build a 2-D array type for the RAM + subtype word_t is std_logic_vector(7 downto 0); + type memory_t is array(127 downto 0) of word_t; + + signal ram : memory_t; + +begin + + +wr: process (clk) begin + if (rising_edge(clk)) then + if ( cs = '1' and we = '1') then -- write (= ram stores data from data input) when we = 1 + ram(to_integer(unsigned(addr))) <= data; + end if; + end if; + end process; + +rd: process (clk) begin + if (rising_edge(clk)) then + if (cs = '1' and we = '0' and oe = '1') then -- read (= ram provides data at data ouput) only when we = 0 and oe = 1 + data <= ram(to_integer(unsigned(addr))); + else + data <= (others=>'Z'); -- IMPORTANT + end if; + end if; + end process; + +end rtl; diff --git a/19_RAMbus_Example/testbench.vhd b/19_RAMbus_Example/testbench.vhd new file mode 100644 index 0000000..9637c3c --- /dev/null +++ b/19_RAMbus_Example/testbench.vhd @@ -0,0 +1,104 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; +use ieee.numeric_std.all; + +entity testbench is +end testbench; + +architecture tb of testbench is + +component single_port_ram is +port + ( + data : inout std_logic_vector(7 downto 0); + addr : in std_logic_vector(15 downto 0); + cs : in std_logic; + we : in std_logic; + oe : in std_logic; + clk : in std_logic + ); +end component; + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_clk : std_logic; +signal sig_addr : std_logic_vector(15 downto 0); +signal sig_data : std_logic_vector(7 downto 0); +signal sig_we : std_logic; +signal sig_cs : std_logic; +signal sig_oe : std_logic; + + + +begin + DUT: single_port_ram port map( + clk => sig_clk, + addr => sig_addr, + data => sig_data, + we => sig_we, + cs => sig_cs, + oe => sig_oe + ); + + mClkGen : clkGen port map( + clk => sig_clk + ); + +stim: process + + procedure ReadRAM(read_addr : in integer) is + begin + sig_data <= (others => 'Z'); + sig_we <= '0'; + sig_oe <= '1'; + sig_cs <= '1'; + sig_addr <= std_logic_vector(to_unsigned(read_addr,16)); + end procedure ReadRAM; + + procedure WriteRAM(write_addr : in integer; write_data : in std_logic_vector(7 downto 0)) is + begin + sig_we <= '1'; + sig_oe <= '0'; + sig_cs <= '1'; + sig_addr <= std_logic_vector(to_unsigned(write_addr,16)); + sig_data <= write_data; + end procedure WriteRAM; + + +begin + +wait for 7 ns; + +WriteRAM(2,"00000001"); +wait for 20 ns; +WriteRAM(4,"00000010"); +wait for 20 ns; +WriteRAM(6,"00000011"); +wait for 20 ns; +WriteRAM(8,"00000100"); +wait for 20 ns; +WriteRAM(10,"11111111"); +wait for 20 ns; + +ReadRAM(2); +wait for 20 ns; +ReadRAM(4); +wait for 20 ns; +ReadRAM(6); +wait for 20 ns; +ReadRAM(8); +wait for 20 ns; +ReadRAM(10); +wait for 20 ns; +ReadRAM(11); +wait for 20 ns; + + +wait; +end process stim; + + +end tb; \ No newline at end of file diff --git a/19_RAMbus_Example/vhdl_ls.toml b/19_RAMbus_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/19_RAMbus_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/20_pdRAM_Example/.gitignore b/20_pdRAM_Example/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/20_pdRAM_Example/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/20_pdRAM_Example/20_pdRAM_Example.vhdpproj b/20_pdRAM_Example/20_pdRAM_Example.vhdpproj new file mode 100644 index 0000000..4ab5dc4 --- /dev/null +++ b/20_pdRAM_Example/20_pdRAM_Example.vhdpproj @@ -0,0 +1,10 @@ + + + + + + + + testbench.vhd + + \ No newline at end of file diff --git a/20_pdRAM_Example/clkgen.vhd b/20_pdRAM_Example/clkgen.vhd new file mode 100644 index 0000000..0f197fc --- /dev/null +++ b/20_pdRAM_Example/clkgen.vhd @@ -0,0 +1,24 @@ +-- Clock Generator +library IEEE; +use IEEE.std_logic_1164.all; + + +entity clkGen is + port (clk : out std_logic); +end clkGen; + +architecture behavior of clkGen is + +constant clk_period : time := 10 ns; + +begin + clkgen : process + + begin + + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process clkgen; +end behavior; \ No newline at end of file diff --git a/20_pdRAM_Example/design.vhd b/20_pdRAM_Example/design.vhd new file mode 100644 index 0000000..8ea9216 --- /dev/null +++ b/20_pdRAM_Example/design.vhd @@ -0,0 +1,81 @@ + +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_unsigned.all; + +entity ram_dp is + port ( + clk :in std_logic; -- Clock Input + address_0 :in std_logic_vector (8-1 downto 0); -- address_0 Input + data_0 :inout std_logic_vector (8-1 downto 0); -- data_0 bi-directional + cs_0 :in std_logic; -- Chip Select + we_0 :in std_logic; -- Write Enable/Read Enable + oe_0 :in std_logic; -- Output Enable + address_1 :in std_logic_vector (8-1 downto 0); -- address_1 Input + data_1 :inout std_logic_vector (8-1 downto 0); -- data_1 bi-directional + cs_1 :in std_logic; -- Chip Select + we_1 :in std_logic; -- Write Enable/Read Enable + oe_1 :in std_logic -- Output Enable + ); +end entity; + + +architecture rtl of ram_dp is + ----------------Internal variables---------------- + constant RAM_DEPTH :integer := 2**8; + + signal data_0_out :std_logic_vector (8-1 downto 0); + signal data_1_out :std_logic_vector (8-1 downto 0); + + type RAM is array (integer range <>)of std_logic_vector (8-1 downto 0); + signal mem : RAM (0 to RAM_DEPTH-1); + +begin + ----------------Code Starts Here------------------ + + -- Memory Write Block (0 and 1) + MEM_WRITE: + process (clk) begin + if (rising_edge(clk)) then + if ( cs_0 = '1' and we_0 = '1') then + mem(conv_integer(address_0)) <= data_0; + elsif (cs_1 = '1' and we_1 = '1') then + mem(conv_integer(address_1)) <= data_1; + end if; + end if; + end process; + + + -- Memory Read Block 0 + MEM_READ_0: + process (clk) begin + if (rising_edge(clk)) then + if (cs_0 = '1' and we_0 = '0' and oe_0 = '1') then + data_0_out <= mem(conv_integer(address_0)); + else + data_0_out <= (others=>'0'); + end if; + end if; + end process; + + -- Memory Read Block 1 + MEM_READ_1: + process (clk) begin + if (rising_edge(clk)) then + if (cs_1 = '1' and we_1 = '0' and oe_1 = '1') then + data_1_out <= mem(conv_integer(address_1)); + else + data_1_out <= (others=>'0'); + end if; + end if; + end process; + + -- Tri-State Buffer control + -- output : When we_0 = 0, oe_0 = 1, cs_0 = 1 + data_0 <= data_0_out when (cs_0 = '1' and oe_0 = '1' and we_0 = '0') else (others=>'Z'); + --Second Port of RAM + -- output : When we_1 = 0, oe_1 = 1, cs_1 = 1 + data_1 <= data_1_out when (cs_1 = '1' and oe_1 = '1' and we_1 = '0') else (others=>'Z'); + + +end architecture; diff --git a/20_pdRAM_Example/testbench.vhd b/20_pdRAM_Example/testbench.vhd new file mode 100644 index 0000000..93eeb4b --- /dev/null +++ b/20_pdRAM_Example/testbench.vhd @@ -0,0 +1,87 @@ +-- Code your testbench here +library IEEE; +use IEEE.std_logic_1164.all; + + +entity testbench is +end testbench; + +architecture tb of testbench is + +component ram_dp is +port ( + clk :in std_logic; + address_0 :in std_logic_vector (8-1 downto 0); + data_0 :inout std_logic_vector (8-1 downto 0); + cs_0 :in std_logic; + we_0 :in std_logic; + oe_0 :in std_logic; + address_1 :in std_logic_vector (8-1 downto 0); + data_1 :inout std_logic_vector (8-1 downto 0); + cs_1 :in std_logic; + we_1 :in std_logic; + oe_1 :in std_logic + ); +end component; + +component clkGen is + port (clk : out std_logic); +end component; + +signal sig_clk : std_logic; + +signal sig_address_0 : std_logic_vector (8-1 downto 0); +signal sig_data_0 : std_logic_vector (8-1 downto 0); +signal sig_cs_0 : std_logic; +signal sig_we_0 : std_logic; +signal sig_oe_0 : std_logic; + +signal sig_address_1 : std_logic_vector (8-1 downto 0); +signal sig_data_1 : std_logic_vector (8-1 downto 0); +signal sig_cs_1 : std_logic; +signal sig_we_1 : std_logic; +signal sig_oe_1 : std_logic; + + +begin + DUT: ram_dp port map( + clk => sig_clk, + address_0 => sig_address_0, + data_0 => sig_data_0, + cs_0 => sig_cs_0, + we_0 => sig_we_0, + oe_0 => sig_oe_0, + address_1 => sig_address_1, + data_1 => sig_data_1, + cs_1 => sig_cs_1, + we_1 => sig_we_1, + oe_1 => sig_oe_1 + ); + + mClkGen : clkGen port map( + clk => sig_clk + ); + +stim: process +begin + + + sig_address_0 <= "00000000"; + sig_data_0 <= "00000000"; + sig_cs_0 <= '0'; + sig_we_0 <= '0'; + sig_oe_0 <= '0'; + sig_address_1 <="00000000"; + sig_data_1 <= "00000000"; + sig_cs_1 <= '0'; + sig_we_1 <= '0'; + sig_oe_1 <= '0'; + + + + +wait; +end process stim; + + +end tb; \ No newline at end of file diff --git a/20_pdRAM_Example/vhdl_ls.toml b/20_pdRAM_Example/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/20_pdRAM_Example/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/Task1/.gitignore b/Task1/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/Task1/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/Task1/IEEE_1164_Gates.vhdl b/Task1/IEEE_1164_Gates.vhdl new file mode 100644 index 0000000..1cc2263 --- /dev/null +++ b/Task1/IEEE_1164_Gates.vhdl @@ -0,0 +1,252 @@ +library ieee; +use ieee.std_logic_1164.all; + + +--########################## +--######## AND GATES ####### +--########################## + entity AND2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end entity AND2; + +library ieee; +use ieee.std_logic_1164.all; + + entity AND3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end entity AND3; + +library ieee; +use ieee.std_logic_1164.all; + + entity AND4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end entity AND4; + +--########################## +--######## NAND GATES ###### +--########################## + +library ieee; +use ieee.std_logic_1164.all; + + entity NAND2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end entity NAND2; + +library ieee; +use ieee.std_logic_1164.all; + + entity NAND3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end entity NAND3; + +library ieee; +use ieee.std_logic_1164.all; + + entity NAND4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end entity NAND4; + +--########################## +--######## OR GATES ######## +--########################## +library ieee; +use ieee.std_logic_1164.all; + + entity OR2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end entity OR2; + +library ieee; +use ieee.std_logic_1164.all; + + entity OR3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end entity OR3; + +library ieee; +use ieee.std_logic_1164.all; + + entity OR4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end entity OR4; + +--########################## +--######## NOR GATES ####### +--########################## +library ieee; +use ieee.std_logic_1164.all; + entity NOR2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end entity NOR2; + +library ieee; +use ieee.std_logic_1164.all; + + entity NOR3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end entity NOR3; + +library ieee; +use ieee.std_logic_1164.all; + + entity NOR4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end entity NOR4; + +--########################## +--######## XOR GATES ####### +--########################## +library ieee; +use ieee.std_logic_1164.all; + + entity XOR2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end entity XOR2; + +library ieee; +use ieee.std_logic_1164.all; + + entity XOR3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end entity XOR3; + +library ieee; +use ieee.std_logic_1164.all; + + entity XOR4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end entity XOR4; + +--########################## +--######## XNOR GATES ###### +--########################## +library ieee; +use ieee.std_logic_1164.all; + + entity XNOR2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end entity XNOR2; + +library ieee; +use ieee.std_logic_1164.all; + + entity XNOR3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end entity XNOR3; + +library ieee; +use ieee.std_logic_1164.all; + + entity XNOR4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end entity XNOR4; diff --git a/Task1/IEEE_1164_Gates_beh.vhdl b/Task1/IEEE_1164_Gates_beh.vhdl new file mode 100644 index 0000000..68c5d4f --- /dev/null +++ b/Task1/IEEE_1164_Gates_beh.vhdl @@ -0,0 +1,111 @@ +library ieee; +use ieee.std_logic_1164.all; + +--########################## +--######## AND GATES ####### +--########################## +architecture behavior of AND2 is +begin + O<= I1 and I2; +end architecture behavior; + +architecture behavior of AND3 is +begin + O<= I1 and I2 and I3; +end architecture behavior; + +architecture behavior of AND4 is +begin + O<= I1 and I2 and I3 and I4; +end architecture behavior; + +--########################## +--######## NAND GATES ###### +--########################## +architecture behavior of NAND2 is +begin + O<= not(I1 and I2); +end architecture behavior; + +architecture behavior of NAND3 is +begin + O<= not(I1 and I2 and I3); +end architecture behavior; + +architecture behavior of NAND4 is +begin + O<= not(I1 and I2 and I3 and I4); +end architecture behavior; + +--########################## +--######## OR GATES ######## +--########################## +architecture behavior of OR2 is +begin + O<= I1 or I2; +end architecture behavior; + +architecture behavior of OR3 is +begin + O<= I1 or I2 or I3; +end architecture behavior; + +architecture behavior of OR4 is +begin + O<= I1 or I2 or I3 or I4; +end architecture behavior; + +--########################## +--######## NOR GATES ####### +--########################## +architecture behavior of NOR2 is +begin + O<= not(I1 or I2); +end architecture behavior; + +architecture behavior of NOR3 is +begin + O<= not(I1 or I2 or I3); +end architecture behavior; + +architecture behavior of NOR4 is +begin + O<= not(I1 or I2 or I3 or I4); +end architecture behavior; + +--########################## +--######## XOR GATES ####### +--########################## +architecture behavior of XOR2 is +begin + O<= I1 xor I2; +end architecture behavior; + +architecture behavior of XOR3 is +begin + O<= I1 xor I2 xor I3; +end architecture behavior; + +architecture behavior of XOR4 is +begin + O<= I1 xor I2 xor I3 xor I4; +end architecture behavior; + +--########################## +--######## XNOR GATES ###### +--########################## + +architecture behavior of XNOR2 is +begin + O<= not(I1 xor I2); +end architecture behavior; + +architecture behavior of XNOR3 is +begin + O<= not(I1 xor I2 xor I3); +end architecture behavior; + +architecture behavior of XNOR4 is +begin + O<= not(I1 xor I2 xor I3 xor I4); +end architecture behavior; diff --git a/Task1/IEEE_1164_Gates_pkg.vhdl b/Task1/IEEE_1164_Gates_pkg.vhdl new file mode 100644 index 0000000..8c79a8a --- /dev/null +++ b/Task1/IEEE_1164_Gates_pkg.vhdl @@ -0,0 +1,205 @@ +library ieee; +use ieee.std_logic_1164.all; + +package IEEE_1164_Gates_pkg is + +--########################## +--######## AND GATES ####### +--########################## + component AND2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end component AND2; + + component AND3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end component AND3; + + component AND4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end component AND4; + +--########################## +--######## NAND GATES ###### +--########################## + component NAND2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end component NAND2; + + component NAND3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end component NAND3; + + component NAND4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end component NAND4; + +--########################## +--######## OR GATES ######## +--########################## + component OR2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end component OR2; + + component OR3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end component OR3; + + component OR4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end component OR4; + +--########################## +--######## NOR GATES ####### +--########################## + component NOR2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end component NOR2; + + component NOR3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end component NOR3; + + component NOR4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end component NOR4; + +--########################## +--######## XOR GATES ####### +--########################## + component XOR2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end component XOR2; + + component XOR3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end component XOR3; + + component XOR4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end component XOR4; + +--########################## +--######## XNOR GATES ###### +--########################## + component XNOR2 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + O :out std_logic + ); + end component XNOR2; + + component XNOR3 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + O :out std_logic + ); + end component XNOR3; + + component XNOR4 is + port + ( + I1 :in std_logic; + I2 :in std_logic; + I3 :in std_logic; + I4 :in std_logic; + O :out std_logic + ); + end component XNOR4; + + +end IEEE_1164_Gates_pkg; diff --git a/Task1/Task1.ghw b/Task1/Task1.ghw new file mode 100644 index 0000000000000000000000000000000000000000..3edb74b9ec3f5a1ce2226aece185c3b56f750f32 GIT binary patch literal 377 zcmX|-F;9a~5XbKTOKGi8C22aiba|7BB*v|Sp+p*+))Y*|g&>fIKxtB_jxMf#9cTSU z4t@ad(D;)7{oY;P``_iR-O21ZdP+M6ASwu+zXU!eX+sic0?!3n0$qVKfp-E|0`CPr z2zV^AGKaXxal0?;bO#y5HL*w&DEFImm&IXKCs5Tk literal 0 HcmV?d00001 diff --git a/Task1/Task1.vhdpproj b/Task1/Task1.vhdpproj new file mode 100644 index 0000000..8e7aba2 --- /dev/null +++ b/Task1/Task1.vhdpproj @@ -0,0 +1,13 @@ + + + + + + + + + + + Task1.vhd + + \ No newline at end of file diff --git a/Task1/desc_7_Task1.pdf b/Task1/desc_7_Task1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..57673b4615da94a571acdace6e2859650d0516d9 GIT binary patch literal 20582 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 DiAoMM literal 0 HcmV?d00001 diff --git a/Task1/gates.vhdl b/Task1/gates.vhdl new file mode 100644 index 0000000..b06fd2a --- /dev/null +++ b/Task1/gates.vhdl @@ -0,0 +1,7 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +entity gates is + port( A,B,C,D : in std_logic; + O : out std_logic); +end gates; diff --git a/Task1/gates_beh.vhdl b/Task1/gates_beh.vhdl new file mode 100644 index 0000000..9d6bb48 --- /dev/null +++ b/Task1/gates_beh.vhdl @@ -0,0 +1,43 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use work.IEEE_1164_Gates_pkg.all; + +architecture behavior of gates is + + signal sig_g0, sig_g1, sig_g2, sig_g3 : std_logic; + +begin + + + G3: OR3 port map( + I1 => A, + I2 => not(B), + I3 => C, + O => sig_g3); + + G2: XOR3 port map( + I1 => not(B), + I2 => C, + I3 => not(D), + O => sig_g2); + + G1: OR3 port map( + I1 => A, + I2 => C, + I3 => not(D), + O => sig_g1); + + G0: AND3 port map( + I1 => not(A), + I2 => B, + I3 => C, + O => sig_g0); + + G4: OR4 port map( + I1 => sig_g3, + I2 => not(sig_g2), + I3 => sig_g1, + I4 => sig_g0, + O => O); + +end behavior; diff --git a/Task1/vhdl_ls.toml b/Task1/vhdl_ls.toml new file mode 100644 index 0000000..52b47f4 --- /dev/null +++ b/Task1/vhdl_ls.toml @@ -0,0 +1,18 @@ +# auto-generated +[Libraries] +work.files = [ + 'IEEE_1164_Gates.vhdl', + 'IEEE_1164_Gates_beh.vhdl', + 'IEEE_1164_Gates_pkg.vhdl', + 'gates.vhdl', + 'gates_beh.vhdl' +] +[libraries.work] +files = [ + 'IEEE_1164_Gates.vhdl', + 'IEEE_1164_Gates_beh.vhdl', + 'IEEE_1164_Gates_pkg.vhdl', + 'gates.vhdl', + 'gates_beh.vhdl' +] +# auto-generated-end \ No newline at end of file diff --git a/Task2/.gitignore b/Task2/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/Task2/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/Task2/Task2.vhdpproj b/Task2/Task2.vhdpproj new file mode 100644 index 0000000..c622866 --- /dev/null +++ b/Task2/Task2.vhdpproj @@ -0,0 +1,10 @@ + + + + + + + + Task2.vhd + + \ No newline at end of file diff --git a/Task2/demux.vhdl b/Task2/demux.vhdl new file mode 100644 index 0000000..7fff75b --- /dev/null +++ b/Task2/demux.vhdl @@ -0,0 +1,13 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +entity demux is + port ( IN1 : in std_logic_vector((4 - 1) downto 0); + SEL : in std_logic_vector((3 - 1) downto 0); + OUT1 : out std_logic_vector((4 - 1) downto 0); + OUT2 : out std_logic_vector((4 - 1) downto 0); + OUT3 : out std_logic_vector((4 - 1) downto 0); + OUT4 : out std_logic_vector((4 - 1) downto 0); + OUT5 : out std_logic_vector((4 - 1) downto 0)); + +end demux; \ No newline at end of file diff --git a/Task2/demux_beh.vhdl b/Task2/demux_beh.vhdl new file mode 100644 index 0000000..47d58b8 --- /dev/null +++ b/Task2/demux_beh.vhdl @@ -0,0 +1,56 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +architecture behavior of demux is + + CONSTANT O1 : std_logic_vector(0 to 2) := "000"; + CONSTANT O2 : std_logic_vector(0 to 2) := "001"; + CONSTANT O3 : std_logic_vector(0 to 2) := "010"; + CONSTANT O4 : std_logic_vector(0 to 2) := "011"; + CONSTANT O5 : std_logic_vector(0 to 2) := "100"; + CONSTANT OE : std_logic_vector(0 to 3) := "0000"; + +begin + process(SEL, IN1) + begin + case SEL is + when O1 => + OUT1 <= IN1; + OUT2 <= OE; + OUT3 <= OE; + OUT4 <= OE; + OUT5 <= OE; + when O2 => + OUT1 <= OE; + OUT2 <= IN1; + OUT3 <= OE; + OUT4 <= OE; + OUT5 <= OE; + when O3 => OUT3 <= IN1; + OUT1 <= OE; + OUT2 <= OE; + OUT3 <= IN1; + OUT4 <= OE; + OUT5 <= OE; + when O4 => OUT4 <= IN1; + OUT1 <= OE; + OUT2 <= OE; + OUT3 <= OE; + OUT4 <= IN1; + OUT5 <= OE; + when O5 => OUT5 <= IN1; + OUT1 <= OE; + OUT2 <= OE; + OUT3 <= OE; + OUT4 <= OE; + OUT5 <= IN1; + when others => + OUT1 <= OE; + OUT2 <= OE; + OUT3 <= OE; + OUT4 <= OE; + OUT5 <= OE; + end case; + end process; +end behavior; \ No newline at end of file diff --git a/Task2/desc_7_Task2.pdf b/Task2/desc_7_Task2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7ae46be7b3b030cd0a2602e064a23c510e57772e GIT binary patch literal 38802 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

A02Fdj*;~WpFb%5;~lB<*JUB+Xe?&* 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 + + + + + + \ No newline at end of file diff --git a/Task3/counter.vhdl b/Task3/counter.vhdl new file mode 100644 index 0000000..5db2d12 --- /dev/null +++ b/Task3/counter.vhdl @@ -0,0 +1,15 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity counter is + port( + CLK : in std_logic; + RST : in std_logic; + Enable : in std_logic; + SyncLoadInput : in std_logic; + AsyncClear : in std_logic; + Input : in std_logic_vector((6-1) downto 0); + Output : out std_logic_vector((6-1) downto 0) + ); +end counter; \ No newline at end of file diff --git a/Task3/counter_beh.vhdl b/Task3/counter_beh.vhdl new file mode 100644 index 0000000..4a9e1ca --- /dev/null +++ b/Task3/counter_beh.vhdl @@ -0,0 +1,24 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +architecture behavioral of counter is + +begin + process(CLK, RST, AsyncClear) + begin + if AsyncClear = '1' then + Output <= "000000"; -- Asynchrones Löschen + elsif rising_edge(CLK) then + if RST = '1' then + Output <= "000000"; -- Synchroner Reset + elsif Enable = '1' then + if SyncLoadInput = '1' then + Output <= Input; -- Synchrones Laden + else + Output <= std_logic_vector(unsigned(Output) + 1); -- Inkrement + end if; + end if; + end if; + end process; +end behavioral; \ No newline at end of file diff --git a/Task3/desc_7_Task3.pdf b/Task3/desc_7_Task3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e569f1da1b20e5362236013229f086a8bd8645c9 GIT binary patch literal 38872 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νZH? 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 literal 0 HcmV?d00001 diff --git a/Task3/vhdl_ls.toml b/Task3/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/Task3/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/Task4/.gitignore b/Task4/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/Task4/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/Task4/Task4.vhdpproj b/Task4/Task4.vhdpproj new file mode 100644 index 0000000..71ecc5d --- /dev/null +++ b/Task4/Task4.vhdpproj @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Task4/desc_7_Task4.pdf b/Task4/desc_7_Task4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6bab34dbbdd413eb2d5e318235a8b5435b329473 GIT binary patch literal 88597 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 literal 0 HcmV?d00001 diff --git a/Task4/fsm.vhdl b/Task4/fsm.vhdl new file mode 100644 index 0000000..c7a6c9c --- /dev/null +++ b/Task4/fsm.vhdl @@ -0,0 +1,13 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use work.fsm_pkg.all; + +entity fsm is + port( + CLK : in std_logic; + INPUT : in std_logic_vector(1 downto 0); + RST : in std_logic; + OUTPUT : out std_logic_vector(1 downto 0); + STATE : out fsm_state + ); +end fsm; diff --git a/Task4/fsm_beh.vhdl b/Task4/fsm_beh.vhdl new file mode 100644 index 0000000..6651a50 --- /dev/null +++ b/Task4/fsm_beh.vhdl @@ -0,0 +1,93 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use work.fsm_pkg.all; + +architecture behavior of fsm is + + signal current_state, next_state : work.fsm_pkg.fsm_state; + signal next_output : std_logic_vector(1 downto 0); + +begin + + process(CLK, RST) + begin + if rising_edge(CLK) then + if RST = '1' then + current_state <= START; + OUTPUT <= "00"; + else + current_state <= next_state; + OUTPUT <= next_output; + end if; + end if; + end process; + + process(current_state, INPUT) + begin + case current_state is + when START => + if INPUT = "11" then + next_state <= S2; + next_output <= "00"; + + else + next_state <= START; + next_output <= "00"; + + end if; + + when S0 => + if INPUT = "00" then + next_state <= S2; + next_output <= "00"; + + elsif INPUT = "10" then + next_state <= S0; + next_output <= "11"; + + else + next_state <= S0; + next_output <= "00"; + + end if; + + when S1 => + if INPUT = "00" then + next_state <= S1; + next_output <= "00"; + + elsif INPUT = "10" then + next_state <= S2; + next_output <= "10"; + + else + next_state <= S1; + next_output <= "00"; + + end if; + + when S2 => + if INPUT = "00" then + next_state <= S0; + next_output <= "01"; + + elsif INPUT = "01" then + next_state <= S1; + next_output <= "10"; + + elsif INPUT = "10" then + next_state <= S2; + next_output <= "11"; + + else + next_state <= S2; + next_output <= "00"; + + end if; + + end case; + end process; + + STATE <= current_state; + +end behavior; \ No newline at end of file diff --git a/Task4/fsm_pkg.vhdl b/Task4/fsm_pkg.vhdl new file mode 100644 index 0000000..1543771 --- /dev/null +++ b/Task4/fsm_pkg.vhdl @@ -0,0 +1,9 @@ +package fsm_pkg is + type fsm_state is + ( + START, + S0, + S1, + S2 + ); +end package fsm_pkg; \ No newline at end of file diff --git a/Task4/vhdl_ls.toml b/Task4/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/Task4/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/Task5/.gitignore b/Task5/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/Task5/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/Task5/RAM.vhdl b/Task5/RAM.vhdl new file mode 100644 index 0000000..8d54a1c --- /dev/null +++ b/Task5/RAM.vhdl @@ -0,0 +1,16 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity RAM is + port( Clk : in std_logic; + addr1 : in std_logic_vector(6 downto 0); + addr2 : in std_logic_vector(6 downto 0); + en_read1 : in std_logic; + en_read2 : in std_logic; + en_write : in std_logic; + input : in std_logic_vector(17 downto 0); + output1 : out std_logic_vector(35 downto 0); + output2 : out std_logic_vector(35 downto 0) + ); +end RAM; diff --git a/Task5/RAM_beh.vhdl b/Task5/RAM_beh.vhdl new file mode 100644 index 0000000..e7fabf1 --- /dev/null +++ b/Task5/RAM_beh.vhdl @@ -0,0 +1,60 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.Numeric_Std.all; + +architecture Behavioral of RAM is + -- Die Länge der Adressen beträgt 6 Bit -> Länge/Größe des Vektors 64 + -- die Länge der einzelnen Speicherzellen 8 Bit + type memory_type is array (0 to 127) of std_logic_vector(17 downto 0); + -- Der anfängliche Inhalt des Speichers ist Null. + signal memory : memory_type := (others => (others => '0')); + --constant for high Z + constant high_z : std_logic_vector(35 downto 0) := "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; + +begin + + process (Clk) is + variable addr1_int : INTEGER; + variable addr2_int : INTEGER; + begin + if rising_edge(Clk) then + + output1 <= high_z; + output2 <= high_z; + + addr1_int := to_integer(UNSIGNED(addr1)); + addr2_int := to_integer(UNSIGNED(addr2)); + + if en_write = '0' then + -- lesen + if en_read1 = '1' then + output1 <= memory(addr1_int+1) & memory(addr1_int); + end if; + if en_read2 = '1' then + output2 <= memory(addr2_int+1) & memory(addr2_int); + end if; + + --high Z wenn nur eins gelesen wird: + if (en_read2 = '0') and (en_read1 = '1') then + output2 <= high_z; + elsif (en_read1 = '0') and (en_read2 = '1') then + output1 <= high_z; + end if; + end if; + + -- schreiben + if (en_write = '1') and (en_read1 = '0') and (en_read2 = '0') then + memory(addr1_int) <= input; + + -- schreiben und lesen von addr2 + elsif (en_write = '1') and (en_read1 = '0') and (en_read2 = '1') then + --kann nur ausgeführ werden wenn addr1 != addr2 + if not(addr1_int = addr2_int) and not(addr1_int = addr2_int+1) then + memory(addr1_int) <= input; + output2 <= memory(addr2_int+1) & memory(addr2_int); + end if; + + end if; + end if; + end process; +end Behavioral; \ No newline at end of file diff --git a/Task5/Task5.vhdpproj b/Task5/Task5.vhdpproj new file mode 100644 index 0000000..382b43f --- /dev/null +++ b/Task5/Task5.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Task5/desc_7_Task5.pdf b/Task5/desc_7_Task5.pdf new file mode 100644 index 0000000000000000000000000000000000000000..10abb7d5e95af8fa8a6dca13368e7381018738fb GIT binary patch literal 43838 zcma&NQ;aT5(5O3HW81cE+qP}no>^nh8r!yQ+qP}L`#UG+PfoJ;#jdNWyGnN_^`!DN znWCsT9TPnpG}-*}$T~DTAtRxKu{AU=FEoR!nZ1RpB_T5_3k%`@8_*2mR<^EY&V&r& zwnnaIqGl!zre@Im{Ln70&Spk-(4Lzs+A=O%;>f*M8isGkjg#p)Z$lhrH^oWPtU9hbIxC-!SvbM(v7kOhqJyo7o+8K7PaRgQ?=zO2-bQfCH?pZ7aiLB z(AYlRA6PYFlNipDb`7znY@5NFm`wjpJ=7yzW-ji4?hLu!I2U{I0pa+o~~J)(!|o1nMJsBxGGHT0j^D>lJH(h-1VZtomqf zJYfmk!s<1f_T!Dac1^@|4uq?Q+_xsveCSIaHyv6K!y$(aRqgDA}(fM9u?f}#sQgq<++~ur6 z`T_?5{L`1G%ZbCU?_Z9o71nZqr`zio*3<5^=4cq1a=I*ye0s~q%g;s`18deH5iYzV zyAO2XTLxj2ldjsv$%a@a7oV^0p*HvVV4WM1Ia{7lZud3ZI(ot!*I+~^iYI8$gKe>_ zOJRZD(Aj8vk@#dYc}!Ej%*J0sCD~HiOu(rLk#jyD1i4dwn`1tcy^%t23`t}5CGb`R zu!#{lk|Dqvq?{0B>75iz5JP0t9&3M$$q~d74ph&yu4KP17ZiFl`;?-f|B6{#6jCAD zSq)bbm;%}B3w6F-eVA)4q7?%I+sJX!OK}w;zG?`$iFMfeT|_Fl@8~-ylr}-Lo4#Oq zp1`k59O+`%>Ka>uQg^8d=diF{e+GkRydFLp%54yfDMKFPT96sHVcJ~U&7}!f5trZL-nD zR#O)PPPTMm2cNaMt#Js!NciIL!%_mUT6ojXIA_pCcy#Rsoi1x%{~{q0Di2hILHD?q z?$}SF(ES*#WF9yxw4?8n*?S)H5v*B7jSB_1)B3B466N0pRL;Amrf)Bs6P<>fr>xml zCW)j))ghcrBzi8B9C9-#6IA<-SG}y&Zo69V89eX_>0PF!eyuh=kNh*el({Yk#zx>c zjdxh@6)Rm2{LX`pw*2c>f$lhufpM|?Af&#v_<)_OtFLN>bFrtoIlWtqr6?CqNErfX zSMK^U!lCwtoYP9E(1IDc!3F+8Jm5b(d5sK0zESgESOI+`JYQlcDp(ZDj_^g6iMrNM zIoo092l*TVeqtsE+zFy zP|*=RJDb!8s1DTdn88IMPx$MccFCF~Xr(m*Ns=9fGpL|kmR*`UHi&h=cl+v=#%Lp< zw=P@kcSCkG-=*y*QJSQmy2h+21fw;3HnAH?59af7z6SwqmnnqI0s6g%mH3 z;*!#jL>Gb<+WQDXml1afi<630{Wp=66ChYeA&6Gk?@*L$?z3R2t`S&YrzOHumL>1q zH6+O@c8I`*WM-^{D{WZuH|=05UI^Jkmp2uC^%OH6s?_dBaN@`Br#Wq2G$IR)ZC}qMN&4>?1&G2~%88mlCx}{* zoO?&VnOmd@QLAxim9|#-%I(bdh+EdrGTwLj!?jK6EUxLTlT~Htwxn;g_sFf+(m9l1 z^eNSp-w~#ltxa8Ffw=T#u==>iMr(%oG5kcjwQX0a!r>7zK()}+O|H&Z8dgQQJHl4P zs}rHC*&$Lv^&=Yn^q;^wN4|-xvLtu%mfB=0U@aykn5~(N?cA9%i@9SSYhr5I>?SNiyE#5!85{%i0jPl5fRQ%57}XUg#-)G^i@d@5k#qhx?C{r;=3b$T4jaHf_D zzk-7~Fsx!Swf5!OcgQ}Xc}Jo+6Nv&RzdKSP$GMGQjC>xtQB+Ok23w+}Y2qqj?MIaA z0K+E5SCMBOUty&?8of6=#)b2fd3$Tjg}E)Ax&>~kzt-D5`F7+>0|t%!yPvkS5m=XjU|_W34rNDb;fAOJN(V zL1|#xpmCpsS_Q04$<_r`I8Nuk){>P#9V<{^%hw}rEB+5*0!7L-Q7|HkBjBNKtde*F zLlz|js*}ht1~*3mW5hYb9y=a;rOB`dJitNX$*hC=?4^rRpyKGRc>x_7{ph4xQp`HK zQL?*);wj%s`@OTxlGfj&@<=YGp|=rguyZ`Qi?~8gPpAP_I6F3%*aR}zqoUxMy!65R zvt4tJeU%h#l{3HksQX~~AHyw=(>$P5v({WpZCag_{hPwHrxSm@Ll-T61jOA~RI8iQ zz=Vt!HHNW;DtsPfwM%a(<$zW(lRV7yH>>enAk2YdN`2twG*1J*z;MjW-*DrvY+_ZGP~?EQY!L?8=?-_lV-er(eoU2o4`CD8iIO zXt0{0Z)D00i<$us4!zH0&#S`YVZ&9qEkg`x2twXg*}IbQh2{C}km~rhk=o*d@6``G z<=>TQp?otA~ed>4_f5`(TSI)!sJ z`LFHQ_eVe@QNsqbnZ4=%$726w{}0D8vHl-`j+u@9{}$+GwEhFSaisr%F5j6+6Nw@n z%h230TCWwwZbMC~_*(tO8lj$%SczB&0;q;s@3pSXrxO^YxVw17jhX`9TmR?%lTEfz zEJZY+OY+r!Z(H~Kq=!8*g?Nq`ZD(789wQ^NI*GV}yOXNO;82Gwd83X)0CvkT9{(<= zK#n;bdTLMIpIw7J-fzjB*H@3d*Y2apng=_jc~P$H?x9vvo0D~EffuPF)%DTA=ntj# zfE~|g>%o&RUuVV`f$x>T0pshNe+TiQT@u-d2uHHhOUa|$++1r%*1#ZHo-#zm-j43~ znQ*YH6loEwf|$LUVnXm<*UJb)AGs1#vH*|_x5t8sW@lXUcyaIob!YE8MU{79E2{^w zn|I~)C`Jj`E9pd~3r&jaf^I3X9Nd)7zorg$DyV8XbOX>mdVTiZPu4`VGtE^(O2};_ zH&UA1=j>{2ZXy?)jbX^LX{|=qmvN>!aY?|ypB&PYtEJE>2vSsYqB|h^I5ESP66B@&if}cr}W}-jV%Su}}Y`f;R=(EiZ zLDav*5bgjbIzeEk(}uk3&@D{xqnAAE(mz41$`)JH0&D7vakgYL8g^z&lua3qi#c}G zsS}QAiS{Wne=(TR?gvUikh7pIZK;dFRR;F;)F8wnK7zpuk3mB9Zh@`uEE#p*(~|Ao zDp&FTn0ci|_!9P)Z{H}EJmO-8D2i*TUdfK5Ts4`M*Bb&%#u?#?m!_BsYPodIRXK-GFi(4Cb7Hrm zROJnL+JfUjPAKMr>+JeXAlwKoiYlMaV`l5~I&$cOR@Fu5Sozi%rE!UQCE-Ry=x-K8 zCC^%RlH92hDNff*XBIhfM=q2ktb?E@Dta=_QB|ku%hS)q0KWxa7LBH2ve#;2=X{L* zkcY>Jz^dM=SZ+63?IM)$!0|BLX8DCvy};3){qWHe%|*@O>ZAfR+Px33k%qXm^}%@= z@12hWX!*npn`z=aoQE1CG|?+j>}LBVWJ2HqyAV>Tq0$U<@gOc9l7j5;wdO9et<0q{ zVIHZuS|4jy@w}B)4M0K9VXWg~EyxwT`b5NMJ#8WkX7m3>>*=FUdm)^q>JPH5!(%Y{ z)3O2?jIEn=-`e{(eYEJ(n%lGk$T5Zgv_Ji8K3Dg75J9l z8jnGri82GY9N9+DPas(CMORrIf9Wh_D2={YnzU@U(VZQy9AX~zRJk-ym;(2`hbFc$ zih-qW!IY zpx)O|oZkgobh!q7jcux`c|o`^$!I&6+$R&sH8^(GpU&P%f=;Lyc3t!kVwdEc1mf@| z#2mC#??_3*k!_H+=350*+jxq6BcM)YTVeBREThi{ey+_X0BMF|5<-A6LPXMas5xlLdf_(DIpg-JJwM(O_>!qcYqoHv=O>h5`|_+rXeQ$Vba89Nv!P9D+y5P~EEI^PO$G%=Q5KR()t} z$Ue+_Gd5VhvSvif3gA*2n>iq+wuTY~@#XE60%Izhfe{!2v$Eoov$8Om3KlO&{*GjRJSr|2ID3;0CP z3E&-qbikF_Kx96g>rh!zqq_rmz%7m9yK5hF20+o^G=UPLqJNL#9RpMFFo9cu27oIG zi`mw1dkeuK|ID|x1qLVH0#bv;rm-Vk5l;@C-P}&VHn^NNNvcUTxqxaFi`fKWuEE6H z1L=VKbpDhFUH1pHj7H9Y%{PQ||6I(sMiA-=K{D>|0)=P?9>~8D%{t03f;bxB<=2#h zD0%=50Z6O9rS^fo*>HgnDCYJqexrVKAfW*yn5ITX4rf5YT_OkSK#-_^{*+HuITG(A z-~u6TKXM>}xit30Lv#e@GbViS9mE%f06i*a0?qqH1iYM?1_g2x=5XfZ*YEK;|H!)t zm~*w4#PsCgVaB-*{`&E2QG(by33zza_R+7Q+uuRIeIo=59;7Ag*=cg~I9?1E#LXIt zZS--zkzWVcsvD9D{&x{Nl8RtJ?qGpCwACH{81qgZK!Ahe54+yGfvu&1U0|RN2heM{ zu)w>3dcGV%dP5-O1K8Ks@3x~pBz6RZeq`$)u=J3ce8=m6#=We81c8U2ACi1~Ad*|3 zj|ZUkfPmj$3+FmU86VE+AA(N;jp>rY>XK*W*q^#IfV;HJRu?dD5Qr}jVI2@cU_^uh z7$Ipt-2LwzFE-)1!P)*Vg*p;^1H|8NukA0cpR;lL0IR^0I&dTKZx4F5FQ1cOU|Im= zPP$Iu*5PmT89?hcAoLqh@$HcYsG0}7i9XIUt`qpD2|xh|1jgZ^T>#Neb-EVEKj`I~ zdv_q;0TrM70vZ~d_~svd{9>f%{ussk>h*nNkZws4ok4VL`I0bK0w<4UdT(!q1Nn~i z;XNqNZ%ZIRkB%;Y_&fhDTHCukgfbtw-vf|6hPi-$DIq%RI={Qj`oKa!kU>BlCN6t2 zks5+P`x7pGacPEa0;;h4hoM^}cOpP6VPPQp zmA*tqhCrDs2U6!d(4P=dAYJqTl3bq>=O6(12e9rcAoz`}03e8O4}|e;aNipJAG4;UFjJ`&K(8LSG7yeM4z5e@h4`w^7|2nhkL{JJKt%=PM~!O&;gUpwRywP&)H(EJO&3Q!%b-=;Jy;sQX_9} zh_iK*4cWcvMLjRu6?KE2ONeC~o;PkL=tXR;yMOsuq*wWpnn=_(#6ra2mc1Gd+^)_` z&K$n#@mtg)sfHG`Fbzne-v?i!gLTX_4%!A1D%@sbnT5=$?IZ@6LR1|2#<;DEQE$+&ptODKV*F^X7SZ z$*^&KPN{lQ^F{e@v=T5%P?2*X3Yc;#Q!UAXxE}v4waiAL!N<@d@NTd_{i7n)#Dj@! zoYyr2Rba~cLDiaX*>-|>b@8ChTkW&Ljy;AnK0b-Ip?)+0EAiN{f!aFI zPcckU3m7sb88LH2R_kr_k`$mDBJSF5eZBOqlWjM}Y&E4>$22my(6j%qwAMilN;+D+ zAGWdaitza{{bPhQe|<$(2&|%YRWr28<}TUJUM!%kS#k%*|v;3*$FH5Y5>08FAw8OIno5e6{ zRaAS^OWF8D;Di3g!NzpBdu*iRlJ6Zwi(9j$ogK=$O@FWvf?jKZgThA?hu^Ha!D(j_ zgm<+~6o2~lkY({mo;LoWuYkDq!K$KU+RYg}f<~O!0h{f`VH)<@nZkY0d2Cnmy-&P`d0v?Imdv zbwU4A;U`!z7y9l3!m+SxHy7XLZshovqaFeEaw1vB_TKHm4?q7Lsr6>C;nym>H5%TA zbSEX)L_7eZq*?=FIk%$aWnZp23g7e;hl~ZjL?}lPv7U1X`B~D()YDNvT**c_*?Ne|#jmpC&dt&GSv2aG8lsy$ASz3!_zro*CNsCdSszNFnM4jpY?VDC-FRf~I%w)bOjy zT&$sZK4$(@zWSx9r9;L-@hQ{XY$7Fk08Jno9)uKv`%|}vD0%NG;}>u^WL_>sKAAoX z2zyJBqPAXBFh!{FTlOn(Wf#fUqxb^RZo9Htcil2PHuq}yR0kY}v8yvZ-F$+0NJ1)r z#WYH9XQ2O@ZV`eo!4S2?Y@E_Ohp6d1b6M8MbEb|+?0a`*vwP+3gp5FSmWMKb^Dp7r zZP}PtH~IxQ$;?_-gt#--ckb|j0WNQI`!hq^Ly%_dFE}BKSaa+pC(l*8Fyryxj*3}_ zrE#Vfc7o)mp%mCQmKOU}u9>-0i?FLb&f?K}-Js{|@6?#+4&6tqp$7!qZrae;v9Bpwt-$wsrL_H+@7qLM(yEm29!XfLFrJ-(w7ien# zrpu01tCiVSC#MK3SO>Q75|h;=ZA@U{2@BS%Xk~JvfYe zZTIe-@(-YTGrIFjDltPM@?Oo$!yInO{2=1wFFcoQy6Gt?YwiaM(T=R2;?RiMK2l-< zc^vhxbh_ctQb$IbUI3- zok=iC=_n}N)53%EeQ(YajT>*Cs&0A3oCg})0*ue{?MJk;gWV7FqXq5p;QB6Z!tJMX zO71b5p%b>NC3yJ_L~HBb>5W)Vvr$jzq-(nBV{#yfJO?r9!S`U5GYGB6(ULlCj{>I- zJZ?`m{}A*OOtEeO6OfE=hi$W1wJLm@=UY2=}xKA?$R6^X}uHBIt6;A64v%pME^88u)(WV)9=)F#CVga<3)dWO+FU0==SM__$ zK<+(zNX)iti@n_5x!M|;BEwC~pfPy#9nwd|fCKF{>9^|h{4;6eYD(^}q*YjZuWGyE z<<~0b?1?1lnpYC$Ko+BM$13fH+V!NUAgFXls+FEx4SdsrgX`=o1K|oES8zO$IW#ST z?QNsL#b*VDTQHkGs*wZ;W@dYXVR9sw6{0cpt{qB?-=AIE-Xv7$qmd@a6&A}+b$!0x zhJdG&$i?|q!EUjJ=W;(6ipwjk9TQEG`mhxW3HgByQ9DidN2uzplb{#J!wj9xeV}%` zxG7SxXQ-Sq7wy}@_LL$c6ppf#rn3ZAxW#{?|D2vMXzQx2xD`&B=AmrA_R82!CAn*Wq%C z`#p(BWd4Q*}Rz&}&=o9%K$mggM zJ;7jW0+lORL#ik81JWDhO+h)*vtzU)UP#99$faiiy~dJBcBQoleDt<&X|NE4a-}}` z)U`yp!jsi17ZdEdja8W^yYPrG{t|q9x=UUC+`0TGU#52zU2hXf4TQ(i4Po^eN%y_> zZ!vm7_Y|fkqK}(B*qvN871xE9FJecC)T3L4nHRO zGKGmJGtu?2Z~m25PlVvJTXuD0&V}2rwcE#av21IXZu6aEt|JhcI$r{AldZoIeX+bB zRzk^~1K@RBe;|jq5=gkjc?IsUvKx9U6Zl_{p2Wf|J;=p^H-LIK>M?DVn>9vjL(KET4?!L>E_S8u` zzl|pbkWg7J6f{M>QAzo2V>pPlj!-*WWgtO$OrW|o@vAnI|B4pkETq0WyL8OJ@+A}I zW;*qR$hgD_esWB{K5nO-E)Y(J=b?IpTtp-KgD(vjZ)u{>&CC)lc-c-LUm8S{3)U;& z#BiB?2ZjNPNv*s-XY$?lI#75P9Mc@u)!MXLR4&KtZ=fF$bXai-O@nw)TfQA_5g)2@ zD=sB-;}1up7&-Vnn7*~rD&MBtg7te{wYK!H){sUoAT4Af?;_^r3SN{|&FOp!iq~Hs z%}plITg$8~P!2Gf@7J_6=$DF5^N~%I7@5uOmNs_bs#lhiac?irb2%|Lx|6n~Wn*DKA-q;3#>5{F5;Xu(;uq?PJ zFPHQmS_b1wfkNqeQ4Hv*qhxZqTyy&MFDa9&R;Qddcv+W_?T3)=+`$r0nB)El%E!vpO|Kj+XX{!Q$zOdoC$P6TQh49 z6Vg^WQb#})2LY%8X;#(OIBH)=C&O9jEThdiar^lQqZ;)wzzbcZRpjleUHj&^b%)$W zEGMrtKf|~AGr z_EA?XwJv<&Uz-S({1QQx(y#L3OEmusM~TTWZALGl*BuD6K}IF&WCpH9*D$?f>m+~a zVxzCD=_TcCi&nc_W9%Nh$fTL&6MIsh?&nULp9R<~ z{Btzo%2$>xOo`>tZBxI`H8^Tg9^NNd)H);m@h(V|S5Tj(wolz@NVzhW8+o(5ti`ku zS^d|DZE-N4pU<|tvZqX3)N?6h{J(MlI7xZyd zj68$nFn*#$C_wjE5Q8MsnOm_;gPPIs*3-mOp}nKu(9>{r68E+Kc0GcexE*bo)RXf_ z)xd()TxH4yXGh{z^+?A;XhO)+M5IZ9=d6v+m0YD+*lPt-3xKkt>MB86oZIK zU-??UW%9o9DJx)VYOVvN^{)uQ2q9|6xNcW+T23+1lK}|;H{m(Mx(xEc+LohEnC{xe8*b?VGYpM#cBUCI-yu7Lp@L%%}trW#jF*(a2SeLC*tUczw!b^U7Q%p?cmkJ0;s zx-c|0@-l`30f-XHB+ZtQLT8A6z!UwaDIF&)&^X*upUvDR(Gm>P3 z8}ef%NeC9032KI|ts*hpu*@^N+8fI{POa6wX%Kv0Y4p zHt01MkXl}R_qB1&0oq&So#k;=y%gLfz_OtXFD@FHVd9pnoZ7Bm}v{LHKL{!Zp}L-)$(OgYBb;B4WXf#eA(Kniv;mB>T90s)rcR1J4E8JRX36z z99Ei*`%@=!Tr+}(58$?9Gz*Ue?4g2E@Q!=R?Id*QrV47l&t@Av*`IVTXkaol+g^;*(UOd??+Ynt&NP_4*HE!`k8&VLrlFxs z-_MTSMipQsM_RpF=ufXA6MRQGhGdpov?&BaA_QBlG9oL6E zpE_L?$R}x;o(W&3q|C?kkdvAEIV= z!${}y8|_H35p}@34az`bNP34#_g5OjKPf1&u>~ite!z|V@d#cW*T!EcvB0gl~Wl(ezy!}_;l6fV$k!BmDh9&hjD`f>Vh}?Rhhg9W@ZNc-C z7+yVx+?^V0&OW-zT}hgk@4o?>FcN=gxbcGcdV#=NLfH%Xn)Qd%`=%URcPm~ZpxYA- zfvadC7v5jZWY;s>60N>$8%>&Lt-F~2=rC$I!?ToO%_m(p${bq*fXKShm1LpFWf}JN z`IM~%A8oqHJyfolKr**`peh70YoWrocy7l)P8b3Nm`Jn;eZXt`acL;~&p=#u4xaJY z&NNqijhp71N*iw+v-A=4#hg5``8uMS`4Jw^M@PrjD(qaFX&`WK9yKVhE3O#K3&#~#FwDpOvaBs+#~hW zM%!|W{(LpbtibFxV>X`(AlCdh8<%~Y-74O4#N4Ta_+Nh*@C|E|wsy?|;@%1cqbaSV zL(nuacor&nO-41cUz;$ud0eRRv@%wr6#QOe=`0$3%CN|kRr;mK38O^h?Ty-DV>Ktu zoC<#@GBFE`P>cxmSw@AgMJT30t6CiEPZ)hm7G^8e1iV4VZGZz^mLikRx;GZsWQy*jK!n|0s|7)VvAxOlV-;)=ZSQ4kl7BdE_k7_nlX_byeRj8| zCl>7 z+%1T)uzq*O!b}v}Cst}!R^&hZ`$Y3tOdnRv)G9%J`g6akX}$DR1Al!v?wCZ$DcpF} zbR^4DkE@4nqFPSvv)7uKFUm{Ga6bRv!&c`4KJ01`-B5k15!I~!B&+bWMITHmcW^O& zSozJ$P7Y)VLx-(%J3ZW&a6TpX#_5GO)Sw^0>O20^3Ibe6f$1|hLEhof$BDp8jFmq#e|MM^7-^9DlgGH4k`quqt z8xwk_tvZGN>>;=*_nE55p^0X&P$Qv=0*Y2O2P#o(vYV}eL-*LOHusr>whqB^hJJTf zE@oEqRRD)p6;ib>N#p3dVH`**Pe6VXXnGS{G`hrfP1m^N?L8u-AyERm#Tf;|LUVDu z>*zInQ^qiB`5ZF-Tr|O1fTC=aw^dQ(01L}7VUC|j8|XvsKuQ@EO%5yym@alima1++ zdP33{m?mK_ZBfZATervnjAdG(=ShXZWGeG&$cmpfxp<~WqoSL5U`gGe7g;D9z=m_w z*(REOskytxHQej(+^va;-OUo8Kqlrx&AnOWsddLMgr)^CZHw}qmZnkw^C^>}o1;X5 zS+tG79r|i*6@o@$(r8$~SsKc{SFD3l;Qt7l?69jFGaQc-6&2EVjf`;zKjPPm?v3Kj_vrasl{S1lF@|}9AIXWBT-CfW z8<*ay^7%2*m^qAfo~fGH8MZ)AFh%rKjL{-&>@&U0!5!v2W^khOE$kn|iJ$lK1~bNH zJd{EqrP`*)?zOf;XOr@32V4)+sXDYksa_;!9$^jm*}~ju^;xIaUg5a&E=yyaMNUlKdQA-{uGg%`7$YB~V=&w*#e;lj&=KTU zY^QZ8F}K-h$COS4gW{#NW@P<_7zX)0-m#z2;dJj%v-#~NTU ztk!;F{nB}n+D-;rs!}uS6!oO7Q{m8_%@c44&ovosk~9{**F#pZ|mWbK7#iV zz4_9hfi{B{(8%}{7c+u^yq8!QE9YiF0=D?MRhurO{1LBO$;ZOrHX@Y8r!uFTnZz`y zrr`}v9Wu|KZ+&K;bspb3@HEsC-h9#~yw-i3VY`o+e2FhW(-dCIh zo|zp;YRepFMGU9@lac$LJPDK~7PArqt`kxhcJ^YzpC z!{4OpRBUbFR7SdiU!S`pUg6cBc!9j> zh#&x~xV3(2d*r%V@SVqQv_x`H65)!w^U>+g%%{|dT*#V-C@0&pCCySi!gPNsM z=ZMdb0#(pmon}ZZFPvv5R0S&8EkFkjd5g%CT%8jwYY9 z5)QOYOqGD^rf=XT0rc?lwcb(=%!38DuL3bZpZVJ2t|HrNfS#P3kPGyj1xuC2Im^5A zabq?j^odPV4AunFv5_%IJtLD7fMR|&5rWYC7@8S;oCV1A+BQi3{;oeL zy$HG>j{4+RCs$`@RVEBl;=_G`}C~9Bt5#5o$3$VN7vjpZuMn)!Q z!2!7f0qw}qVgd>^p6VffZ%luuzH9r(rgmrX4PWU&&Ow<$djUaj&dko>AlZ0&f&BUa z*KdYk3-dqe!Lr%Fqk=98bl(K89xU_M2Jb)jctW>8c%^SUCVv=zUY_;<&%0|=%d@MS zM+)zIXH(^+#MGr!vR@1%fS1U>>m8uo=UN*;&$QRmK=$z*LFhTW_-<&`KWOnwhZ$vln3G8{oABkpBR* z?FTe`_uae$>?8+AHa{IWR`z}Y1Z|0M+hIfiFd1L4Zj{I=2hHPZlGC257&21&ci=lAKO0r9b* zECC*R_GnS6-u?|;_>lnIf%h0@0coghYz-_wSK$ryEQ_iR zaLgexJW}8coO?PfzahILS>G59eP6QI z)q4u}0_g0meYEWC0q4Km+Tu$B2`4@2RFLP8uHFHE0ANg@m_Y%adpdx%)}OJ#Px`MP z+L~C~-^3?=%qD^RoPlcu(*OlV(2n1br#ed>jIn^@zKC=HMq@X^9PYX0({DGH4xp*Y zLkvCOxkp0Fb6p3>4uJGv5BdYz%i-{W@Ls!iNpSCHx(W!qd-{$bJ$=*q3He}IaWd2~`;ym@$!~s|oTHnZT_Vx(71Sp1H`Qd$R{s}C0 z>|NmLUS|j0fqoFozP&y7#Q{ppPJY|Y0%oSC@2~*ryiZ@lzsp7d7+^gBlk)4EW7(TS ze_rUDJ7B)2uOwy`J+40h_qNO3f}<;dv|C~4nTU7d{ z?SAd*B^)eOT00B9?b?kZkAL&k+)5+wM$;_(yme(^11hVjQ|SEF^cF4DJ^Ad<^Sy{L zT~JY&H~10)=J@_>Eex^Shu6&pQqA8S>@k&a#?|gfM1_{m*A6GyxrUHd6Bj{$O+%pS zGEUr`GBYnxC2{d5WjgT;$70STS&(N5rGGJBznx@mXLqLXRK5pkVt8rrD_gt?-N(wI zVVHN;r&go9f%9cQ;lR=a#kXAyFR%0-nM*oxK>L}RZr2r8A!qD5d%ac4xRt-~aa%*t z%aONtv5YY9uwZb&{5z2Ths?T3j(VUploL3U?#o!td`a&!s%d3CQl1I;xzut-Ypyo9 zzi00&Md!{7Oe9RHObn&eI4Dt9!E|d5UmPe`MM&x7iS3+2|kTgD{T-^nD&ieuT2@xatNqzEBbc6S|f zJV13REt@7>F!~L=i9f6VB(4h$0h%L|m5YX?F11Ao%4l7%&K^Jk;%5G$^p%hEE%LrU zLGPX6y^-bUW`?hUE{&9pDr-A!!Xmo<8VXZ-9B+r;0JmIkmvNu2Q8^!MGc(zH6XggQwupd-{9gbuK+eA`flf;%{Z#j#DRs(&uasK-$7g=WArT!Q9K=yx91rbL zrCa9~$lU@6Oo6xBr8WCQLgoNfjT&&D*kPWpJsV|4*QQJs1B+gMetb62^DJ&>_fgE0#ioL!QdZ*@bS1M119f^O+%A^-H4s4H0$d zD&J^x)GycHO0yRJq2XnPU}VO10xdm<}Nk;yJwijTb8S|&d{L`Z;1){7tbGa zZIsHX-6@}TV<}iTybSHl7A%k>u9#AtR9qun64nZ8WR%We zxzA*30e_j`*@M20$s+cqBOj-7uJs8jr%_;LvOx@J56n@gz82BqM%XA1P@-{jY%fW3 zLKhfu?Nf?nK}?enX)zUEjXLzSuSVqQEj(D8I{)mWayVr^ywB}h{o~mA*joJw!;`p7k21_r z@L7(7&-OlM_`hoJ*ZE znN}XAGXMwOUV)xLpdQiB{~OBVJQ|z*7Q;U2qD3WF{l4W2jbfOoqpcJzE|4;Xek=1^ z9T!^iw6pY^ush9oA=x(ZnmLim2W%;SRWST=UX@-Auru{7|5HI?>#x!B%N5fs=4gsX zs|@HNY6F~!*iTJvQ;B}mf~_BlMPWDdQZ$UwIrVp}GIPG&%J5d0e1uo%Nus&_xEw8s z-}AL-YuP(9VXmJrT)pVcWTI-b;0S57)OyZuJCS3?B7*};2aaWVv++l693heRmaF9gFD3S}TC}IRWse$@Uv5on&xp6cUt!$U} zOO8A4(J$NVzz>9ZvHBLsnN~uVss`gR`$VGF`ufo0J}XW14%|X*)0@Dz4LG6N_Sdg4 zdClIDZt{_ii6-dWn@Si|dpUeoTh;k{7M z;cV_~%svJf#wc4$OhdU0JW{X-;+OFevhvSH^EFZ!aKiC^=1iE<%1Joad>g#bsn4$7 zd}kambCSz@Le9|+TA@(_+oQ4e(pZ(`HB^LJH?GNJ2b@044cy??<-*mnD^>pBL>$E^ zuqi2eiM^j_GoH3;t>bSDI54g$Q*eI%U|ln`qESO^qN@6)m(!2T!LG7IuhUB|VA1bG+5lHVvseJk(0Gw8qRqlYTk*cMyj|gdGe`nmsMUow=p8cAg`lg)?64q#!E~ zOR@9v<+29_oYGO0tm z)o6np6nSK)na^>22p*^>r1r@7Q#BuKaf5CwYZ%n_k`cge!?2Gi%2C3&_UCdvYX`F> z?ZUZx#^*@%u__<^RX!D=xrcdc6YCEmce#lhEt=KN{2FZr*}P>%v$5eZ8doX2ol@ea z-+ho>?PJ~VM7g{=t_>(xw3w0+9!}4w?-0;0LFIPMosILL!GoccwsCHmt>Q6NAU#hF zEKHJ{#XB%kanI`~4tX&p?o>elPs;QQ&uFB%%!3Z--s3*V!&0pp6f;G$TI$D5Fea;c z(zqNBEz@^SVe_$I2gYwmDTF%?NL5M~(s5O$t_dwNH2Hsf#6V;}ivXLVk4+Sl zYhX8UT$b8Du5>UDEU9KBbUZ8x{B&eKQLRLt_{AMiVS3V?(&L^tC;Z#w=V01c+f;tR z%V*Pds$d$PoCmvTQ^W9r0%7?lCF9_zP<_^{(@XUGIS(#GP5A!~Dr(OF<=Y9;bf ziZQz>+BA)#I2?Q2$69qYizl3QYu9e>c02=W@W(lvaWZ?+%#5L*1fOWfsaoV?;O0A4 zl%6%dBq-YFj}1GUh#I!d=j||M#thW?S8=gdd={n}q&!XtXO_u8phm>4MoXIIAF~w{ zw~vY0HgZ5Ih}5lqJfWoiZosxo(B&ihIlr2=(R4vT-(*AM3&#*DleqSfGu_B0LM%1yA>zJI&nZ6dM%_qKCmHYUMp53vC=pksEx)UnR1_{9`4 zVV5p(M(9e9cBv`8Gg5RF*|YW57R3wlm`UYSy{cRGG76uLVm@Hy7>}q%7k8*KZf);J z0kfP)P5Bfmsmxv-c;iLS^=toS3xPcr78Aw<03B>nD?|nrC0>?OTTYC`s4)4)>_D2i z6kl-8(z%~GCy|(1{!Rvkt1>#5+^L}BVQ10e%&|6JHSJhd(M(&z<2)e z2EXcd?(Tihe(5e^$ge|9jwnD$g>Eecd*O%_HfVJxJ!4+;cyPjKdO4oMsC!0?ij}Hy zdo-h^6j)@Q-5<>EkHbkB6-mlWdS5V-+@O(vhPkrp1%5k*&1htoMZ>*x)K zm&qWjE9G4`VNM86Fum(TD4YhOCK0PRw1@}HNo`H1!gLbdQ1*fYY^j1xmt#`x=In^> zOAJCzlk8ZKcKO!Z%itiwYw?Fa_98594bGsRy>IYQ0*G z*TiK;@)IW6wACsYzhrI%Z)Xd!jSr9|=v5S@$5ashw$0CtWzNojrm62fF-`^L9?&rG zwvr?6M_ALl;>?Bh$wwjgWZj2dlX^=%AZ8f2fRrFy?d}H zepy@%jb+3}1;hvUwa<~&2$N~}=O8hm*-pan5mbAmY8HhihL;B30$3IFs=?dGGNi46 zl19eVbWIcZfRFpkiA(Ic9`RiDc#Mc`3(y*EyVWH(%O$P-R{??9pJ?7ifFeN%94`h6`glClzDC0y|}h5$qnvKLDXpI~$;KNs8$#oTBIM&_bL6GVhB zcpsp0Q@~_(4kB%sIdURzH~A}f_}Vtp1LW8vlu`H37Z5g|8VyhC@X%^=_xQ>h~==8pY2c2!vx^V67zQVggjLbjm|iCzG;SFJoK$9bDuy z5zgj$W)6^8b;p|}CQ;%CZ}dW(ErvfU&#k0oT-ZIeuT^r!__92u@RyQR6#-HFwoQ3` zpC`RgQ#lcr7Am*2kwFT;yrc{b^7&ksYBZBK`jM#nkX?5%NFmB!R!Bi8E$SzF+Pzuz zz~1^}5X(kQQ6Ff*F`si9DwG_*0L?vedV;N(^UE36_vW);|JtyT0(L9kd7jtKY%w=` zl5$?l%Nk+Gr%Jdsrq7T_wG1jAFF zn~c&}gb3!mM~O`GX1HEU3C|L&1aOJbL8@+2w)Q?^wM=I)Pd{%wZugALih}%0vxHd% z#qVMmR6ga3Ac1c}?FXbnnM|pBD_)h-wyG15H8@W5FNa0MRpHsj{cbp9Hylqcq}$qN zoV(C>%8W`RHz0-lFwKIq#4&(%f05VLp^(m8=H z^g!ivnu+}qae%3o1+9i4pPCh{R9PEncy2!zo^R+G<@HLLnHBDi7;%n4n~?zj9gFW5 zpYvh@w?f8p@A#&*v=l+!x>I&P|G5(oxn_K491`o!uZUS@vg{j8^kPl-H#wd3=7DG@ z8WZzdp(S4%D>K(pQLgo|VYJ}Tj~}_!?6rkr^-+Sxhdz`9=Ycrwo6A|6k^`0H%Ii7n zitKwnHe;F!9a5|4^}bmMuISi=*b9=Lx)-K0(LuT$2-Oq-8IHX6rr z05VAbCX(&x3VCjbuP1sutY<=d$83T-z; zw0a$LZPTU!|BbF#O{e1;x^Q{HDEORm&@pDEYq@!npEi%-*x8_QhK|zzYo8MJ%Jq+u z97md2lx;T65c@^4JOq4oF9Q0grqby^kqEqNKyFkhuER=RdI7wVq2jo=!)}CW8dUzq z_9W{u?uXg_HnQy##%u2xd6lPTdc!EZt!l(?yc`GePu_#M{pP+`{`a2&E@e8k)>l+^ z9m{Xfa{=bK>DJ=Nr*4VOExilDwEj_k_BW<0^;*{Gv0_>-MCb)Mk_fGY#w_v>z{-#N z5j4QX#fMFh%Bq$-SF7+*s<^ExYO<~hMm}_&N2>VjHgZ5_--q~p2W z636PM?NxPMq}OE-J?2J>Gk`AQHW-Q5BbWd8>rXW;9|9NC)dwb4^Als76MHfh9U8} zM$zAtYN&iI$(5=?TSi6&kl`C8HLa870;UBa(zC<%8ZREd-a)R%f1~J)v~alvqv#|Q z1`j3s6crdfNB$JUZKA7$NFqr^vVl0bQ}+1#wlQ@36l%1m7d?6A6PRZRBz{zGDlJLk zo_{krud92L)LelwJa;}q%#b4%g%L`wHCV-Y1&zUtj#{h1iLSz_e=eAoGXnUB)Ow`hmbPHEOKyUbh5|td06n{ApPh4C=@BQsoMMK_^1J0BT#WMQ7+^q_To7+|y zeMUvjV90QH_0hQ}5#A8{a>Oq@=jg5>)|PqS0)TAmIlT&0$=>oOwSBbNL*G!Wfp}dG z#dhm+Q*@zG7=A#q0&_Qs%uavPD4gr%u8`_;;HqI6Et*1My)2l#x?1#`&%7xJVhB*p zfTkV65~4uvjEvVEnAYpbHrCwCCoWLfD7Ih5FzWxslwcOyVI8|}+dc~~E*6d0U=MR7 z>d13hb4`G(QZsL}vhyq6ZnjQUr1oYR zDvIS$MuYd~56WyrBL|{<7}~(8rC(Tfd;3pfAx_r|T;Nku3Y$K`@)_G(fRznXn>cY%^^_{Ds@PigvXd! z5bD5grA-queXLA4S7lZyKT%C$Z77g+n1A?O+uFTfC;MViv#vbLZOwGmxmQyYp@7f2 zp7`-I-ceaPoj32S7p(~xP5WqM`@`**1s1hSXmN36vJY!CyaAWlInFnDMsJ&wp=Z}E zdWKX}EzSL~Zd@ZCVFRE<>^NI^GLrH%1n-Nai}oMBEPAD1%QUct`+CWpSKSdYaeY|6 zaCavdvXZi8MBPH^v)v1mJRUlvuvMv4KaUQQVz1i;ue6%n5_6B{$*p448usthg|ts? z%RvvsVQYXoActqtAZM=8nDNTlG$VX66Zh-_yf$v@laVmcf$6iQJxWxADO|W`6{7L{J{k8mO9cgD$ZkHWOY3!X8}Kj#QX z5_RteHzd@?*L5erJ*n1k*wE*k`}G`N zy9NuzutoEHFgvuvq8%FFYw{v{+I=K8s3 zL-h&l@&~M|nryhuK}ZJUq4`(-H`I!r3=+~uO2#5q{kzuTuf~~u$S~?}KJF;6ID6S& z58`8S9OAIfA|j};%$*mrG#(-Vv+J+9$cs-sByHnJK6}kuvNA4 z8Z9cSP|&uhWA0j3WTFS`lc-m-!qe6zD$p~^J+X6f$|_PQ9*@;-nI7AK5gQo2%_cFQ zZl`%;F$+G>+Mv!28-+!G0sbi4Mb4~qpryhZPa@*MT7pehR6pMVzC>5WpgGvUj6_(+ zhk#~289(1)Gp<;s`bi+2_F{98@f0m7=;!wiglC7f$Vrk(Kb*`$SCYm(x|}bqbzhL6 z#B_VHG|dJ?Wxg2&^>l5Tpb{oAp$!--BM(^i#-*~dXQ=4&hoq4}3}Hk{){s`z4Z!#3 zbF(T$wzNnQNEp?*htgL0y1`;ZZG`BB^0BT>;}iBbi(|z5acB1ZOgH(B@zOqj$|F{Z z-Lpn{AW@Q>E79>ZjfNABd=p%)2{fyR9&2PoVNYRg6`}zN{Aw^vzBKckO)~#Fx9#jO znrb@(i}1~-){1``cRRSSLQ|73DVQ&P>e8bUUwj{@S&H~ZVbh<3le;2b7f6DIf0wt{ zoPCA_f}&%cGHDyiK3TmCMu8L#NiICH+P#pUggJ0VHA0e+_VV@KUo`n#8ak%tw^Snc zbxsT#`G>ujU+tt$2oVqIHTdy2%*v15Y0S+4((3N|u|e0epReg1o3jie0|r!|;6r^F zG>746#$QtDt^i{}IE+nq?p(0<_%Kb6pFc{1AO6A#QJ`>sSVSh7j{0@$@RcJrk}E0darHI?gNTM0o;_s(u{ps8eFalbw@eLCa+El z**An2&D!EITomIs%piO(W+nk~tr&{t4L|h}V+3@P&!LT~3kMpc43!#bB8JXbeT~uj zAajsBblB}rX-UNcs(3im2dm{zv|l);C1#j3)b+H(Y=ZB8<#0yTBHGIau3*uPISA_% z>CK5OH5XqTT3(@b(OT{@Qo!TAXdGqYGcz?w8E2FI_zsQ{vox&4XG8I;3_n{8{~Hgl z!}nYWVw&91qPaY*JnX)6q_>g9{D7m~$%Jr`OQ{y=qrm}{IA`w7W6W9tYZJT$3$eAU z7fc!+AvR~uog7l| zg-u%}SKQq6rDcD#D97$gS%wrT2>sUM6>oGZi zG(;sru~`E!`(3qdieje0hqDk~_9hHt%?+ozMZOgpQRNo7QKMJaZS_SNC&1BgWDq29 zz@suQAlb?fzYe)uhzpj(OrU%Li>WLZi4M(WhLP~?SdbdQ6G;qER%{R$Jde?{+!1Jt zG4O*Dzu(cI9IQFulYB0cS4Pk@=X54_gC_M>i;XkbvWdlTPPpX+MP>!QpW5A%zA6s; z*{-?aHzc%NJuJt^jA;GIuXS9)wLk&4FMFpd(n8S2q+Tj>0P2X&@gFECIR%kCv4gDb zXn1W__PYEg$`U+br90~-w}L2jVuCxhDRidcxl?Tz5Fks&p^-?xsO_r|&Lo-3Hho)m z5TH|dJb?lI(^%9D0|s77i14w{PKq8()h?l*6&^IZ1Xh|^AmHQ0gp4GdIh5$dWH1I6 zp6s>xc|isn%Bz3thp=9lLbI7KJ|lLq)Eeay@H{dnIc&)5u`u?6K5|c0zaFxy5h_=G zxm(tqUVe=&_W3rqt=ZsMj!O=`5s(bP!Pv;wip7N-20uZ9*>ww_r(*Br*(SSFZqt32 zHts`0ay{zay{)IrdzjZ}b-lSf3;qxna_g@!+WNMxZPAjkNj!=o|9focxHb{Fx?o@P zk;Xm*PDlJ_$s>h?@YJPVJb!{oTyYF$ZR#f?W6Q$D299S{!qMHuGs!U;8@XvyyC12Z z7Mjr1-7MXZ;-*y>zB+^(=4v`v9TJNrgJ706SU68J8eO3%j__sru}*n$cN}*d{jzDF zq@lTqgx9sYYDtLL`w_VeOGd!&ZtMk+Xc4=gev!YN$Sz(_i42RN#ePq4=g7mJmQB!9 z2HWdbh%UBlF366e#Fb2V)f`S@B!-8W{>wiE+a2Z+xSNw_pHs^v7#BR0?IHNWT9VY z*{!2z6^eyYpEkaGHq<7)ixxsCd&@~Ty*=-4AnG^aATZXO5JHmIzAzTUCh5#WBqRq$ z|EQkNFBH=Yl{#!4v&Y6fZy-4+-F^VD@j+XQH_xpR#BNhP8&{R^x;-kXnCNDnd*UE)qzi25os+@awiDS>l<{ze_rJi>aPEiH;f zcvWcaQ^F-1O}J!ckVL@ zO8u<~c5m7lAJYO#Mz1_M@L;u;wCt=HJUl~2y)%dN=Mcx@nPKUqsaMHzFesjxlN&T6 z2w)_^t5*)RW*b474*YfDbUf8mO4z?y|Ks3H0b6PF31f7K{mGE}>O`s0qrGVA7@`?h zDADI9;Rg#G*&1-RUtM2!cE!=nFB%V{4*HpDRordt+(0>g0v$_Q6FQ9@VUWhtC%`1) zi>9itpCN~leLY|`RinELg68%)L$;PnVO4(DmM!8(>@UmTVUHH7HPkJURb7HpY&lUE ziNt6)v{qDXes&6dVu+MNtWw0_G~Z$9^FQ|Y(XuL|$GsKkoPUE_%-qyyh#o`oRc znpISVwPO3g<`-~Kl9G9tLnHs3d*^RNIQM`lVWA40F+UcZ+<81Kwf#z`F`OifBqR0p zG+FEP1|4YV8J}?xsEj^78sU^(jhK7EV6f;>idhtu-G}2T@)`9d8pi63X09sLq~6ry zXMA)e@(cNL6wi(~F@DrVP1>MNo6xXCxBKrU(k?sP)VHQyh*SS!4W!Gq3E@{R0!Tgb zAP6o?%5>PKZf=DyGK%}Fv-T}=wSpYzjG;ScME*|Dko}o?kh-dQO!;! zQ(Ss%X^2pya__D=F?}CHhZED9={8l2Bt$%p!LS*P!vg2aipwjb^ApS8`cPpM-3si= zIDXZ5fl?JphJT$>ZP{fY{ADcEx1q59meV;|UR-6y{c$i23wl#=3v{JL_-5&F0o*5? zwU;2nYYry12`QYDELxUuYenyE<<2FP#4IwM7EJ8LP01+sR2N(#2$i6|C->#f$^C6B z)lK5PjoBD7sP=ZE(}U!M296Zt)u-WYM#W=V!8BKlGT1;m5F^ERaxZiMQvvLjA-2+XRlU$cy#OJ}+Xc zS$eoL<=EV1(Z`tMxS--uHmu=8VP=LJ*4&GB3EO%2p{aAJQCTl6wsFw~n6!I^A@I^P zqxpLa_mfj7m-H3gkkf7XqvCVG9ua_vw0bs+sw8Y-D605P=|kzwEMb>}Zz-;#`Cb^O z(DzP9bVpGzczb8X7t{!%$ld%A5cUs~38ekzG^z0f^%F&A+EhRVNs;TlrO{(Dpxpi*jy4QI>3k~9II+)FNXITs|ppTMfj zqoe^Fpl}7dZf5ifn-;5_Ob%ko9_+R<27h(SHBH;Ioi>Tf6Qsa$;eL)O4Xj*m@rn(; zba=wJD~5!Vi+hM^vFh3ibi|W_&8&_rQzEih zu#8oQ|7<3oP@DG4^cO=MCZ}L~(g0hq*-uJ81456D;1&u(oI*`yu8h@5wUxhlcKR=~{v$TE6N()!iMgMNoMY|nzj!mzKCn6YehEhOxPstd} z*pYlw42N9nO@u|5*YTKAWxL6J8a=URoK=fTsaWq!)0>g1&Pn-po zwkz|VCkDmf*GIE&dt_%eZrfts?F`P9Bo!u!n!FbXEdGXTeD^=?ZO>1F~gip^^+ zhOIK>(a^9V{w~NWQzXrfu0FqNd%47o-mZczQ0-Vbo5(i=mE_X>Hb9{}8K27B7DFH| zp4GP?tu(g#kj)xjW5XEwqGGK#M}JnUjZ~AOS^+NY8+5bf+k05FZ3@iM2R*~ zMO*nBRhETeE~07pM8?342LXKDE1TdIDL>EbH0z@FS6Kze`-Qu&-#=d_B7V5xv56sW zYNPa+!|#Xv+7wWRYN7+iVtDqFL4ojc*dsLEmRAFi{~96H%P>jX=dcQ)3pY@oOY$aa zr`D<|1uCw3R!Vyr)vi=ureV#xz(_oax+yf5w2-3uUh$!h;W4sfVZ}IF!2nfME={|& zcR8HzLk_1$Jr?%jl#{}+?bRb<3s3&K(DU7KzQNPl>7jrTXvE5JBS@#9@HcAJ7T~lf$Zhh5sprw-RYIehB$* zJ4~JIBdeE%i7jL6#HEyFZ6rq$lTG2=e)SWCZc}_f0(FQGTmWqbU7?4xQ0B)LiIvnLBF&T0URuBNiFO zWVewx;|s6%Ah(nc>mL$ay7ec5Dvh5%hEqSXi8W%_s@bii%qt)_`?NrgG!IO9+C>KS zc$bJbxl+E?$`=8QKcnQsv@Y40e)zPOXoLGPGV=0Xd6Yoac+#oaY(0Gi*>i^aJI45# zL+Vl#n zDard~vO)0a8R-$6ajKzbVntYU$j5q4E!efyR}!rEqdLsn94Z(FKcx_@!zQI;iFdN}?V5>xsW%qu82{BKNo7nleIDd~ z-l4XW7gz4#O=K&UFjWU?-sg`mpI#n_{FcV#-+wOHXtG7&wKf-~V8$!iZ56%v#XI1cf6=~cMO zOu89+>1%QPbvM)hb1;t=85n!$w5+DBx?f0;f8mTy{_CD1OBp?#Qf?RSaI(?^9)^nR zG-7hymoV4&DQ5`v5(}ww5C7ncy?B=?Uo@VtV0Rxce!rK9(L>`$jVPX*)Ky|51isPq z#v6<;-AZb{WiNL1dB%qaIQpCm-Fi-f$Pt6a==erB+l!nBT z>gYCoqzk=B;>kF$gS9?M=7DlgKddL?A21I~N+CwMw8atneNwf|&CtV3=Ec`~H7t}XT_o8P#ktjFgE~4z-krNW1DC%VaSmf$ zJ?XplXI@ezXI)BlCE?MY6jYVqzF#qdf}%g+gi>HQJ*;>e7Qd6FUp2Wc$3UD7M~){~ z-N7I<8ij{YfvTK88gVF$ORcDZv(K8zhr_IHFY`-TGyxikUry6mp++p8I0C}cZx7&l z;$_KoUVl)Ft2m5ezE%-|R^V}sKb-5x3g!CYy@+ybISr&{DO!lvRGE?;jH%5Mx%YXq zYP`Hg{6JJ8pUe|%-|n44n0&y!X_)+e4y!8}K85*1d1){)i|#Wzv&vM@XDit^m|C6+ zRx7@v!;3t9*P$=`T=}E$WjL6+I7g}yZCV~%Rf4r|C_W)QehASf?LU8C3eah-YR|~V z5_n!&Wc@N!jO?=@8AdI*$WRu%{ncU+&pI<%75#eZAbakzGgxCxK(gH8d0kARbL(6vJX)w$pe3 z?DXt)MuRA|8nUf@U2K4dG<|U1z9)Le` zDLzQQMR0uFbKwl=f|BFTP-N+#Z@VDV7b>1duFrh3xXB0{2t4t((p<7&VP}BN$0Z60 zHmRwaU=6=zpyo{O;H>&G01Yh3Q!xJpoOO`mP^M%-4>ZO-#&F9xxVykFYaoHUx)<4> z9*>0G=nl926653tI#ve{@bs;|Lqftx8vC|l=~F+{|PoGvds5A>q0 z`ovq$U?7f@?FTN$0&9SOGP^!_*q;6pWRUUWl|D0JDTbESKgyCduV;cJ_TEu++A^pwr5$0MTdkI&GF)JSzL>I!?< zM;hjM{DspL=F3iF8b`X=*SwQw@bIV7onXi|%1M(%vX?gq9txH7U9gtWbh*=mNW)(ZmFh?>N+~u2~`C_jgi;06`(A#vc*QEA7fK_f5f(EF+DTM`z2~ zlzl(JNoN5mEz$(kNH|aUg%6RgIz{u)Q0k6sYvqUGS{1;qR;rVVI#rI^;?PtgC&4v0 z2sbcZ?3i)~Wfk%%1_>hAIJY;>4X_s-jI!$ImJz5ePS^bCYt_4eV6zN1Sg!k@?Z#5%c( z+$XTM{bu*d))HmB9VPiSN(C{#0O{^hc#IW`W#{3@?zQRw6!^Jniin# zj9XRn7*v$=NjtVOx+E*Xy@T{?yJ@GoP)38ygM7&y9(zGgZT~`{f>3yk794cN=btJY z(%z%A9c{)t^2v!TCQ@a08CiMMOt!v+;&V8O31FBXu&!WPHX+pMl%qQj^oPoGXi1*} zrO%C4h*dKq{M{f{+^*7#5c?&ZBQqQY+?4wr<{(ef=Y(_e+ZowcA{p@5Ao6Jj8a97Y z1yel3%~lORrgdKg;gY&7m>|F(tPkEEhsjT?er8v*S=>@qn66AaXni))5~}NH7=mw( zNG`^3iBrZWOnVGwmQ_URVFscrDtOe(Z61zzTo0!C#JbQn&1H`)Jw!y=dRvYoLg7{7 zE=Ci6n{sZGC%A#H8IU$GEuUDP6gyraP0q^lY>sEZUX{pLFa9~}6R_NSQKhApOy`@M zY=<*foFBL@(-7iXe$_pITW|Si2$vCYQeFr*NhbUKzICsXe4KkngJb1M7*@~-&hc99p zp)%8qVHXTyhV(l^z5^aXfF6Mi#|c<%)sraU{jJ7y!{(Qj304chRxXxm;Vr%T;h8nm zuN;bJ%pL`W6AU4U4mvxTV&ckX2pq^^&!WYH-1D;QVh1%k$cG`;NHOVCje%E+A0I3{ z(M(pEAiHP2d_TKM0Z*Yd^^4_|*GW0NxOPsXu6E6KweqzKa_3 zS?ST~BGl?U*KSKP;soma9>cfknq(ibvm%%`B|69#*f!Brq)WNXQc5!zhlIo|`~3i8 z#kt%{D1}ztigzF-J7Ljc3S+4uEyWeA0=eajD6jHUTkwsYf&WH)r;Bdd>ruj@v@GVy z88O$2dQ)muE7T~7q{7meyAVx<_sb;+8f0r=Ii}865Xk4)yC&hM2*oF*mN5_?lF~~a zVATl>I6FI)u#zciJ{(}w?fM`Q^HrvMcoW4)s0rGDD+6rYQSz}8Zzh5L%!xVIlbkyK zmkw9({y6z**;h(Az48%zK$Nh6?=%_SXLm6BA-*4Nw4wA^h+lFiHALd1RefB`ckW#B zI(M8B9FqNcw&-y!8KKvk&mQAsSdzvdAf%62xobtQAov44G?pk$60Hb-fA&6FHLP&A zsSAM`JaA)C*^WyfG>H~F!i$bpYFH~x95mcI)Gz!}#z*``jZb_G%i-XVT{xVkM`?xR z88fR>D?24Z$V71x#oQ>25R(GxEw)M9`tVIGurEwPSBihe5?Y%D>rynabI`oyaNX4y zJAjac>=e`rj(-yG&FIF`+skt{`_(Y4d`JTsZDNK3hhL@0czj}pv=>|Ut2BgBU~Et5 z!nT(EBX}SB;Mx)s${j3^xeanm})puHJXb?(o@z?gJ)!~H%{HS$??Wk&(jA8C)6I-om@gU>V|gzOk4wb|GIcBHRQ~)k`kGj|w0SPSEth z68s)_4R?Qt{DPd2;&Z({vbbazRS{6(=%kBO6?J|Q?kS%?S<`HuyXH;FU)cZ4deeXo zLyCjyVy@gbl+ncCDV*FYO9YarCC@JHt4t+)1P2NU-uIsP8N3~1SHcUfh!s(uS8T}d z1Fl?lfarQdW2*G86ZuVTt3o9^C#qBmxMFZ(Ch*a}iXtUdP>*`2Qnu#w*kw`4jF61t z5zL&jSD;AERjieN4)#QlXPWF_*Wv0Ye{-O-;jY#L4Bc#CCHNVZxwWyKjlyj|R0phqlsQ5s%&Mgo@cOWvR;!*K%cj z%VS&Na^yWQO7rHdIgc87*Q)Wz7ScH$)jaF)Dsr5#M$u#h98F2sf*YeIj zB}e;xocz6}q)BEHonrC2mb0@A^i>$%{%iX0)vpeE7-XDk`>Q_oS~Zd@knJY<>K5Oc zuN1N)z6#wL8O%gCj2KizBO_&zIS0lAl|J$Whk=+wg4Pb&7}sn&TxWYGrerwFM6K*_Xo_>iDc`m zXB##G3Dm8cWEava#L$PjL--zO=m`+^y{LU6f>&bfeq;g_?Da^uT~u0gsT4s*r#i>v z_SJGf0j7dRt#ftOq@a@|cUI-9=S`wcvjay*`zTZAUfY?L^Kr))aAm0(2ESt+aXLsN z)Zewjv*R87^VfH(k}m}#h-#3vFrF2ofdvm|rjKf*aPFO?om$5ly+41-d{zTy;d&Vz zQW2^}IUPc2s=r~r#Lv%5Y7l5JB9Z+Np4u#u)?FQgx5WM>P#PP6Y@oR#$BMs5x`)`> zMVY1$OL)xb-HDiGif2b8^b+UW29Emh#Lt)J9^w@i?A0bRmEw-=N!AY|K_`}tQNg1s z_HmW{h5?R-@E~)`rnEIUTXS!t*d$%JJtMot@BdE#ZU>S0^`;9fTr-{cO8gV?J26td zlZ?%m3F9Eb$TO1bWF;b+*x@?j^>u(W)AgmjjpdIG$SV?rt{WIb|CcSEr|(`Yw^82S zJI#OxxE}AOCi#_bT_WeN`Ip&ExDbAA#<-u-1m%xKlvkzs6flGvd~vm3f{;Fboe=11 zc13QEyK|zNc|f!CBLl?iMbk-&FbyKKR6n(1;KQ}}El#6gNc*JivxayXrCQ$iC-et(-!BKH9T^6jYrQs$ z3-Bsnaj&YWM)Y1h#jf${r(DT_kv9|xIUO~-H$x#~de?477ah<9u0hZB{;`%;L2ZE- zQNTl@p2j&j;x$A{@O)gC)$=13pxC?^PcEk(iVe+)SxTBe*miGb>C#s|FiAL0h305>bz+i^q#|xz>Vfw43 z$+;`YFTMscO=j!fA%_dJxh>OZ({y4q)DW*H-|5p+fGsvwtnf! z2$^~$r>;4^GOmZdUWSb6Wt{**=kK$bAjs>nzj|vbJN+?Mshhy0I|np)RtF_|B^m+!k5+UBfX5mF7wTML8uUc5kFDKLgd znGTN5tF0C-`wcwROK1FjLy%-6?NW(mY|%vcm`bPMB}wY?l%D{_2Sn>Y9z==G+?k-@$A_&#iE#CgBpdnaHQFeHM_M z77<>96d#mO>Ap%6W28+aJLmPfgi6#lGIKU{snh!3j}5iGBeYO-04>gS#+aA7VBx-l z;t4SPMT1tI0$cTwp7CP^*SWeKCAy(FLAIeW4q2||CBQZ1b(PL8qv6k+ue5ctblL|^ z%*Xc_*OQKeo&XRX3_aPjs`TOR|7&%aGIOn~H$338usL(Tg>&AjRe*o4c??G< zVzR@(!WPKQI^Z-@C2vOmCeny9Bo2M?r%8an#7MGU>(8wp!QA8103%?C$*u)!AV)?gz(!h0O`ebp$}CKN4NU}1xrzx@GS7NDqMUNF9x*Fx%H z3VzIS#u9u-x5L|8h6N=?MZv_Vo1@oC&W06=X8pA>N)`g(U)+4A?+P)H`mQWo)|RV& zPY`5(>8TyBat8V~W&FEM3tGRaVoOq`s)p_dRg-#>7DZjOrfv9 z^{kqd@v>2_88QiyRW&GHL4%pHj z(C7-=c7~cn2ayUd>?TK=L=ix(&Pu8)j#Q`4B$dv;R=U{KT>PyvI%xs<#wKPDPukc4 zx88n%b&h3dbT+d?QT9)*|bayfrkVBO^a``lRm0i!&Fq;SE ztuhFC%;uO?RJi4eWL-zgKi~PYB(~$)wW%T5ar;=IZTXMvu+)&mh2XNfdUvZ9|ulDA#!pUEJ9&ej+z*%5mF2(N{i7+HkDu@bihQ&BE0tl%pIN~ zoMkZj(CP}dqeU!Il`hPiBHZ=6UFAlyW$bT}qTlq_3Fd<5Sy@?CSry0h$A<~?C>+lAh9&YU_NGC$@+zW_(9!}!zYK>F-0^E&8t$~+UrkiE04DUUD1Yqs zE%g+UcjXAaYSj+~;iF0FoxK%;=*luCl5vX2;v#>cNgNC(9^UR}1na`%k;J#^k&|_l zyEo8T5V5TFl^;b>qUPP$#dA_9|6uouv9bcs4*`sf5Dw ztp6omR7E=c=}pK-xNi;1HSFf5?&Hw$8%xKU1#b}|03f9c>ppR3n8`2tCiiSG2Z?;E z5q$gd;FSf_@<#YGqmXRFF_>FGKd2me+-T3p{4$979m>w`;2_g8pkr{nAATLbv0WVD ze)UDzl_i^u%tZQnEn;o_(&_o`L#MGL8(QcAL-Hr>Ur%*53B&ceA(jh;S4b4C^DE$cQ`5xKnPms)3hE9Q9^ylW#r#5u1 z0RP)m$9>-cs>>UN1++-%0F?Xdj$^bd(yJreD+3Wy_ZazuA~|Vuqf6%Azn6h~8>)k` z!jZQ{6Vn~LL_araYpg6=&=r}%!?);CrtX(s^H^JRf9ACvCDbMQi}q*Ph@)3Lbt!)#yCKJ}PyQ6CEAX7x8l!3cLODKTNsrq<)6~jr z^`{K9=vOyEN1@hd{UIN{lNkZ@rXtLaXxEWJQ-uvt7qVszPKpAjvIfddW&%|?f$8Nn zjJK+IPmAS8?~oE6J*|;hk#5UDsSlz)AL)L_-ssBjW(;n}BdmT2aS8!f{@5sokFnZ1 zwgfRU!Z?o9cSeS_#0M;k?(A(srUIz5fAlu2NUDuFCR@q_ByT=Xo|R_;?-dAxHV`LYiC{R5dTkkuLD=PA$POhLdYD zKF1x2b&;PntBTNf)c$oFXXpY9)XBsW<`PyM*_P5FyX_X;%zc6E@0mA0)54iYb$zf4 z`t}#;*IXxjvNl|wopc!r>X$16HH0$Bm7Vq}Yc8{p?9WaNO?x$;@oY0`qi7xp_3lvA zl+XGc$=MC9d4*tqMp~tlAg2t|3Zx61IG}&F$4k{1?t1h` zP$j@qWL~;W)~Yxk!0_RZ=+NA(yVV9KlgvOLQ>e(D2LnXtSUq({y>(U@}W$#VQJ)wR!ERLcHF7J8Ml%&i)cBjd5->aD6Uo=MBj=2 zr(eYr1$}xm#hxC^hx~FAl~uy)!F7$-2(PK^eY=$^t41MvEGxp7oUde0C{*NEgf~h* z-AVJg83^6d?%P&%#Xf}*bPbn*u0%Ml)R3Usw3W)QGxhRCJ)i~3zN%sLNcF|nfzfM_ z`c*FSufBwQmTT7mlpMX1)?i9frkO~K0z$5&{#hYxr`=?JO;Lqk`#T2=@oT3xs~ZHJI21^-*g_`7(YV)F=rZV_}=dIuvemp z>C;$)(_2}rUz~ezQpUBm$aIKz*}{DebU~}(bO>nSJBV$l^Mcd&4yCsmO}_MKYJ+3{ zde0`w1PF2pK$ThGSf&3>q`m1Nj;E7i`utg(mP$eQM2Cw)G{o=MJ zi0C;~-Zh=gG%XaPl>FKhkBUfSd8fr{Kto1V$z1B__ww=FbG`I@rO=Y>;x+Hreckn$ zHQ()2EJ?3Sv0-n{=Yn7q-LS9w`VyF|Iw|}uZ7w7Nl5rVT$IYOWHgt39=TwY~S1HBi zdBEXWJmDYf6*}eIQNCK!nbj$0{NsahsF*?wr2boQnU*kUI3jxsH}&4$_Mk!6(P)oK zBd@w{zpRJEL%RI9`9*d^{+EqYMAA4d|A3VUQF|?2%9D0D6^Vv}$vlmeRgg8{kN_Pq z;?Gzv&zGM1!F5GJgU-o!NHyH%^2qWm!Va*yw#quDdd;SIfRrBp8&696-Fji3%q9m) z%(tdkw-TO!mT_v`3>_5lG!y}kL(~1+eog!jzJp6=vOGRb$4Y|%On}5=apab<)t9^R+wUO3E zqSvQ&TM&?$bcW9Sf!vdvv;WuOgY0%5v*)2kz=DbOXRSc0(u!OLp_eL;*5 zm&Mn!J9v=0opy(8+u0<x)yzx`2%P2%d6+N`R@erWn*$CZq%{Yu6R09 z${)pbJc=*#&qwOZiiJcyAcQK9p z>2&UGw2)u3FW52#Fn^kvC)$4IiYy-c;s3(90Csa8op%RFCLz5ldXRG!tqfO+`>fln4dJI{ECtTzC=d_YzL&CAmH z*w}c%BI&>?solMaSoEW;6%O5f#WCa2vbb2(Ou4!uwp1Bbnq!a+cME|~lTWf>0Nb#; z_XCF;l02!udn?gW4mVYmU5W+UbMbJi@vnqubew$>)=u!Gu}Ib?kF|&@bwMH6iB2$E z7nkFQxjKIM&xvCO;gCAEi?RS>*Ec{L+jY@>)Yx1oLz7h|ntF$-rN#UtJp$DEBEo`oi{_9Dw zPVl0l#4j;vF}f?{&dv2i&AhUD<&}BY?*pl)$+4nV1TL3GE7WGoqbrgYTgTZ-rwL%p z3dmNd%Eu%1eT|TD?A0l@ppoeSs7_X!(rLi=)099^k=p}d%Ch1RCxb7tEb0@o85WC7 zGM9kFjt9Pm3k|My9)4QLaDB~}OGQ^6rxb!!^2qKVg>%2vwO-BWi3`_Is zGZfAS(I+!*q#6-dlAL)hgW1@3zl87e)zu zcCXm#CbMOm_!`P|A%^@lERT5ao@V8~;^qm`@G5~>QcS++Hp9lO9AGUH=MdHT@f&dU z5(giebduK?I(2rrzAkBP(HdQxb8&o>B(b* zZ0l|2m`^8gf#I>R0j>PyV!Fm6ZbOYh1gpq~`H}2Le5?3;qh8aqp$&M78Pwl`j}W8l z?>PPb$_kG^jNxa3i>mhjE~rvn)%?gQR?J+zV=7JjI63zeQmEn9@Sfs56<#kgo}a6{ zqE5CHCUU0TO1&KyA=XH|RmDN0gr=^59IJW7cf)zGC#NJ!R?POE&eLZ3HI5&dkePR( zaF>N$SI_hllYWf0&zo_mK;(Fl5S`1fpCQz{v*Du|=cgmmcXO!&NCeCIXErva^p}eq z!tP4SVaM+e>M0}4j`}KyBCdXj#wU$GNNF6VlBfip3mdJ9pDT%2rhc{~Klycg*(`^6 z$wXaHN2;SW-@%2Lef;?2 z<(Ho_$Pi72bh-PW!ui(>451r$C8Wdnn9||eT$}CEe!9#i-X&H0T5pHfp|0%jL3FfW z{SVs>P2cY~Vm!xuXJJ!Yr-&BxSK>-wJKTh7e{iH-MdUE5o9fEAwLnvLN;4c}))>;j zK*rrA|Aa_ny|g_gZT_GNg7;Dli_J`A@{sH1LKjQfd~bHs0Qh71-Y)7Qsv`l?U1SkS z*gLX3R~kmmK%vTJ;<`|b@8*|q4DY}sA{dmXGC`4Z=4$GfH_4gm<3@O2^8pDE#KX7+WrVASSeaqx*4{31oM?V2)KV0v^z~X9EPvkcBT9+g?+dvarH%KM}^g7*;}$gMzo2! zjJFEE(W1*drie~$9W5@AQa zDOWGt8VU8={g7YW8)ClvyVN|?XBZ^ENG(5$y$YhBle#2JHeP0@g}d<&3b%I@6cwy{ zCi{>CD63`{9=O?MZd5RIQG=ufthG#9Y4Hpl=5&d#VWy#_sL%O)6(V&n1y0?l$N9Y^ zO{1{MKGT1URWrXF`3i~OfPL3e5N`LIGyuP@9P!w=!aSa3M0g~sTd9OYds-RBDulq# z0>v71zE6(SaM*kTOetELR`Y3!tz_v>hE+dh5Bc(o^5x;|$450;L8Q|fFlw1r?=Kne zFRZVFZMn0{WesOhNxgKqG~A?62Y^NHb^Z2*a|zpKGIkq%7NI$VL4Z@ui;%TRZEc=( z*KCjcBPY*YK3CJF$9S}9wo}-n5Cr(WW?C&SA#@B=T)OeBXVK%=}-`iQ>i-zvwNaw?QT-dLh3--)0L79A$ z7;fLt>#UNny5AsmIGX2_A=6{qdx+uYWRB^NejZ+U^A>Mz&tpeYmd)5K%pa9@bS~|6 zRQyy}b~}N^u1??RU361mG77?e)5laWxtQ)iK@`~rvEHwGaL4E5B*HF z`~7xX`kw)6iJvtZtkGcaghKejl^8@shxjzfv0Xh8`PZwRzAo*4$PUO$R(Zy^=sd?1yyv85d7>HvUW9P)2QXcYo zS=;oodr}{#f0umqPbt6bZXt^Gb|VnvI?i=xF&m$4G%%oK94RuqHGWUgTdT@Mj>+Y8 zDMc1l&zLu*`1og{qL+^%Ys) z`JBFA|HCD68jXc3QOVT26oE)4v^1<-O8b6bJ`^y<%q4BagN+}nQ?6ooHw`*Okk1)$ zETsS+xtI#||LCci=b%deNwHn(R{Wh=Mfqp|CY8bAGBV`VycQvv&xAw0QMqkUJz#3p zj%F+44oTyzxp=4Z93tFX$;Vy$gM&+}C)g#Xd`2~h!Bex+CUESVe@JzbzdDXlk~-dQ z0;Qvf-2h@h8=Y}wA01h>7C!a`Z3t>o73gbE#+lNWU>iSVrDtMX|pI-w*6e2YmOCOoRcZd_FN zuRedBb{yUGkNy~B$rsinHz71^H-dQlyO$QD_dulaHn8=DXa~{IvM|8Sp>elS6OjR6 z6kZ07CPb14sVR723AVgrFq1}%O)FJG;gfk-DIXgt)yJ;SifajD*+CQY5phI#oau>nbsBdu1M9unD%#nrt}ANj~iL)xgg z#>tp`m(-Zy=$}^i;*6rThLZJDR=eThNyrP98KYWk%^uzDRNYSB^|6qF)zSA;3TB^` zxIht;D#wJNOUAdYt09hW<)fx%N%ipQo5=Y+MxS7RBYF%CWR28msQ7s$#V z$1FNpa^AiA1a6Hba+57md1MBAzAu006=pGf7cdXuD0MW_Uf5jMb|!O?37mw+T6rt7 z0^T#H*+1ISjR)LqK!gyc_bS*8R$6MF^lUtB-FR~_k=Ti_G?_FrT2HKB-WJF)vH}k- zhJ2oQh-p`}6Dq39M;>Zf6rd8O3RTY92iT0R+gy+S=LlT2(ySwCVDykWDy2Jm1n@55k{z>IoxK5<6!O z+}3*=aKk(#a)V~ZG9L8nlqMJgRN3%SweZMssLev%V~#BDvXll&?AZPH#@UY-a9bns zYB5(q_f#c~Sb!N|W_fF_6iw67Ilctw}OFi^#ss$4DUrgW>1& zHAgvrjM|=xw;a0Ud;@NWVLzG$&FqI`8xhE z{SVM^{Re0`c>iCZ(Fix+6Wgr%cW5wQ?v5^~yccg_NQC3_td2XEU%U;J)K?rvsr|Q) zN3)yUj51_y-Q3VmPcJL@DCGGC-m7K#W(x}bo^Sg(XK8%5$Y@kIdTu=UvwkVhj-$Gb z&gN>eHa9e2;idUOune;`A?f7LB9;RG#(Eof_o{1KmSugPqwNUGgTB{*G>jbVK*5gHrqXT8|*??)n4*l)=OAB&<|-24u%3#utxQko4{!D;^@5)dyKQ z0vInPYWMHtjUJb-6`ndzost(bZXUds-dL8Da zWo!+fs%m)(LVHC>(4uj7py=3y4pNIzu}+BPN9yW({ce&(9Q0RLe_6aHJQ2`0CYCZ| z@IhxT!$cII{uN>sj<){UbG-v>GQU?{qlcEGDm|Yh-vbsRvI=bJ;JMpE-`b>j9bj;> zTSwg!3FkqB#k!@&HI~ue#~p*8=P=$Av5eai7$DU}GzjaWj1E5pcq`hG_4{o7*_t53 zJO2R9!Rc%V8WnFPm5jImHl>X(H*Qlx9p66|7uk)3;C7vpsVX5VN(+iPi}F!n2u{+# z@g#lb!RApB3CyQt93=GZ%f6pT*j7gtrVNY|LOpQzD&slm@nPI>D=Zq11q3+GjO`6!;S9m((m!6X3?s^Ti^4rYNX$e~xSl;Wk$~ANu z&7VJzC(NELpLZ8WM&tK#@@7`DZo>Q+438IbB8DCp#{-%m;5#E%h+64W5t>Y!`RM?Py6VK`O;ILW`7v-|Ds61@fS|GLTVbOD+1v|jRZc`6p|U&wiU z?G}wqShb|G^>hA|!yW%rh#!4M(ynYI?8gKNVA9m_s3Us{u!szJa%`u!Mah%pk}+WUU2M| zbnto<;6$caqK`6$TB#^{OSq)%R>5k5uS?UxnVLH(h50&>BrcmU*#piHI3L;zk-JxwmUNT$zV4oO3fJr zXf!9~A${2j63?a=tw=nke1;qz{+XPwVS{~&{~6A~hW&&_79qI9Z+Y*VPtlz#d+hM_ zrx$IjA)8p>@3V+;P>7=%G?OW!Rjx{FWH0lZBI#w@1Yu1s!b^XRR4H*yE)1txn;63^ zrJzKx;b!vvjGVwz97nWFcl9@(r-62iJeN=o#dIaByfHr!vCPXqU2E=hSb^j!j+lXi zjryZO7%w#UmEa`Sq(VN7u=k9RMr&zf0Z4i4NPXK;q68L3@0E4myxPGFBBg&!%YWd5 z_uu$Xc6BoMFoT9&^v>p%>K588U{(klD?5Y%01|`7UG7fM8ffvq4sDzq#i7v|kY1dR zo$VhpDli1h0e$0QVgu8$vC%=>DL6p|xBl-<)Ll)Soh{6vp`MAon*{)*tS+I=D(PWw zZ))P`_|I6>t!>^E<5fK!4RI9k~L+DVwB-k3<|LFWQa;V{_a2yNH1K>Im!wft~1HDNiCMAr!BS= zWv9W%mH!zd^S#azVAB_Fv6Qbn+@ zxpClW2flfu(S&_Esmww#I(OI+_gXcd_Y>tw8i)Z#tn#Y5Nq>hbo;W|afHSr-HQiFX z&DYw{h|6b7hs_)n{T&LwkR_Wkk{YTmd@);2YF#?cZz6ah&7J)z?qejfJPacJhscPP z`i;CXrTrI#PtR-Y%iB|f=YBRPC}vfeikh?6aVz$PT^a2l$-w)jAh`<1+F{>au0PThbV>Ck{6c}@juR8poAo%YQY2pVa#;+z{m<@SN`KW2==pQ19r-d^GZdC) z>Lbb}14waptBs4fUJERa^jwS7pXRu2HmGPc@xnXSj>!Jou{P|NQ=IGx3Jf=-c-5%lS$c z7Dy5FXcR8qDUi2G_rdnMd&4I@uYk%1fmY!xX2aVvcZQ0O-ytHiRT-9iZI> z&~(=ve<_O6mq=9>!5AIKKK#}J^WlheXKnP^*4x)JAT$FjPmXkLJ;8f-+3QmCjo!(Q z&xYxO=R_#m^sv$x#%Y};+YDQ%LyEbFM!%Ep9)13tiGapw9g~Tpt8xbCz%;R&sP9vy zzrl=l)jH{Ow{Tb9{n0iN)bDjg!o>enpZP#TaL;{Dwp-O9nx@S9 z;@Pod;Dznn=-pqiD`~@Lr^uv!&vlSwB?fpQH3m6PY&5)mUTWVE=-#uV$ecbV> z=w9ojx$U+1?X-8t*gGVR{?#4%6UVXiB%&PEVD0ivf*1dQ*UQ#8Wc=Lm%DchG%Z|CH zP$v11Ek$csg_ku|4P8T?cHuXTfu>`4b$Qs|?iuj?V+E?*QcvQ+UL6);Tp0JAN^$!3 z1rCJ%M-yeKJk{=1i@`cUU@5ZKbA`5A%*Pp`F7bWqujMG4U9tB12vW>{BIgH_@ zFj&|RLwMBXbjSvWg`aS`9frn_X{7MO0hW!V&0>_&)VEqJ5)!iMx}away0MOdss*f2J(NOLN|94S9fn$=%hh7AiNv^ L8X5^DNx=UHd^ literal 0 HcmV?d00001 diff --git a/Task5/vhdl_ls.toml b/Task5/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/Task5/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/Task6/Task6.vhdpproj b/Task6/Task6.vhdpproj new file mode 100644 index 0000000..1354a2d --- /dev/null +++ b/Task6/Task6.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Task6/cache.vhdl b/Task6/cache.vhdl new file mode 100644 index 0000000..24d6243 --- /dev/null +++ b/Task6/cache.vhdl @@ -0,0 +1,13 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity cache is + port( + addr : in std_logic_vector(8-1 downto 0); + clk : in std_logic; + en_read : in std_logic; + data : out std_logic_vector(7-1 downto 0); + ch_cm : out std_logic + ); +end cache; \ No newline at end of file diff --git a/Task6/cache_beh.vhdl b/Task6/cache_beh.vhdl new file mode 100644 index 0000000..2bf04f0 --- /dev/null +++ b/Task6/cache_beh.vhdl @@ -0,0 +1,63 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +architecture behavioral of cache is + -- Cache parameters + constant CACHE_SIZE : integer := 16; + constant TAG_WIDTH : integer := 4; + constant DATA_WIDTH : integer := 7; + constant INDEX_WIDTH : integer := 4; + + -- Cache memory + type cache_array is array (0 to CACHE_SIZE-1) of std_logic_vector(TAG_WIDTH+DATA_WIDTH-1 downto 0); + constant cache_content : cache_array := ( + "10001100010", "10000111101", "00111010011", "11001000110", + "10001101111", "10001110110", "11011100001", "10111101011", + "11101101110", "10001111110", "11010001110", "11011000011", + "11111100000", "10101001001", "10000101011", "11101010100" + ); + + -- Signals + signal data_next : std_logic_vector(6 downto 0); + signal hit_next : std_logic; + +begin + process(clk) + begin + if falling_edge(clk) then + if en_read = '1' then + data <= data_next; + ch_cm <= hit_next; + else + data <= "ZZZZZZZ"; + ch_cm <= '0'; + end if; + end if; + end process; + + process(addr,clk) + + variable index : integer range 0 to CACHE_SIZE-1; + variable tag : std_logic_vector(TAG_WIDTH-1 downto 0); + variable cache_tag : std_logic_vector(TAG_WIDTH-1 downto 0); + variable cache_data : std_logic_vector(DATA_WIDTH-1 downto 0); + + begin + -- Extract index and tag from address + index := to_integer(unsigned(addr(INDEX_WIDTH-1 downto 0))); + tag := addr(addr'length-1 downto INDEX_WIDTH); + + cache_tag := cache_content(index)(TAG_WIDTH+DATA_WIDTH-1 downto DATA_WIDTH); + cache_data := cache_content(index)(DATA_WIDTH-1 downto 0); + + if tag = cache_tag then + hit_next <= '1'; -- Cache hit + data_next <= cache_data; + else + hit_next <= '0'; + data_next <= (others => 'Z'); -- Cache miss + end if; + end process; + +end architecture behavioral; \ No newline at end of file diff --git a/Task6/desc_7_Task6.pdf b/Task6/desc_7_Task6.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cb0080238b7773f009d7f0fb7a2eb9d82e2c2a2c GIT binary patch literal 93261 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 byt9j;lZ(64%TL9}3F6~LrlAp+mq7ks^kg_a literal 0 HcmV?d00001 diff --git a/Task6/vhdl_ls.toml b/Task6/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/Task6/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/Task7/.gitignore b/Task7/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/Task7/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/Task7/Task7.vhdpproj b/Task7/Task7.vhdpproj new file mode 100644 index 0000000..c0f6e5e --- /dev/null +++ b/Task7/Task7.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Task7/desc_7_Task7.pdf b/Task7/desc_7_Task7.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9028228f575a2082612473fd83c93597b36ed681 GIT binary patch literal 70504 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 literal 0 HcmV?d00001 diff --git a/Task7/pwm.vhdl b/Task7/pwm.vhdl new file mode 100644 index 0000000..79239b1 --- /dev/null +++ b/Task7/pwm.vhdl @@ -0,0 +1,7 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +entity pwm is + port( CLK : in std_logic; + O : out std_logic); +end pwm; diff --git a/Task7/pwm_beh.vhdl b/Task7/pwm_beh.vhdl new file mode 100644 index 0000000..d7917ae --- /dev/null +++ b/Task7/pwm_beh.vhdl @@ -0,0 +1,40 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +architecture behavior of pwm is + + -- Constants for PWM parameters + constant CLK_PERIOD : time := 20 ns; -- Assuming 50 MHz clock + constant PWM_PERIOD : time := 10 us; -- Desired period of 10 microseconds + constant DUTY_CYCLE : time := 7.2 us; -- 72% of the period + + -- Signal to store the counter value + signal counter : natural range 0 to integer(PWM_PERIOD / CLK_PERIOD) - 1; + +begin + + -- Synchronous counter process + process(CLK) + begin + if rising_edge(CLK) then + if counter = integer(PWM_PERIOD / CLK_PERIOD) - 1 then + counter <= 0; + else + counter <= counter + 1; + end if; + end if; + end process; + + -- PWM output generation process + process(CLK, counter) + begin + if rising_edge(CLK) then + if (CLK_PERIOD * integer(counter)) < DUTY_CYCLE then + O <= '1'; + else + O <= '0'; + end if; + end if; + end process; + +end behavior; \ No newline at end of file diff --git a/Task7/vhdl_ls.toml b/Task7/vhdl_ls.toml new file mode 100644 index 0000000..807f235 --- /dev/null +++ b/Task7/vhdl_ls.toml @@ -0,0 +1,8 @@ +# auto-generated +[Libraries] +work.files = [ +] +[libraries.work] +files = [ +] +# auto-generated-end \ No newline at end of file diff --git a/Task8/.gitignore b/Task8/.gitignore new file mode 100644 index 0000000..2b04e7f --- /dev/null +++ b/Task8/.gitignore @@ -0,0 +1,40 @@ +## Default .gitignore for VHDPlus Projects + +## Ignore generated vhdl files, files generated by compiling with quartus +Generated/ +incremental_db/ +output_files/ +db/ + +## MacOS +.DS_Store + +## ModelSim +Modelsim/ + +## Quartus specific. +## *.qsf +## *.qpf + +## ISSP +Libraries/.qsys_edit + +## NIOS +*.map +*.objdump +*.elf +*.flash +*.sopcinfo + +## Clangd +.clangd/ +.cache/ +obj/ +mem_init/ + +## BSP Libraries +**/Software/**/generated_bsp/ +**/Software/**/compile_commands.json + +## Python +*__pycache__* \ No newline at end of file diff --git a/Task8/Task8.vhdpproj b/Task8/Task8.vhdpproj new file mode 100644 index 0000000..314e2e9 --- /dev/null +++ b/Task8/Task8.vhdpproj @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Task8/arithmetic.vhdl b/Task8/arithmetic.vhdl new file mode 100644 index 0000000..8760487 --- /dev/null +++ b/Task8/arithmetic.vhdl @@ -0,0 +1,12 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +entity arithmetic is + port( I1 :in std_logic_vector(15-1 downto 0); -- Operand 1 + I2 :in std_logic_vector(12-1 downto 0); -- Operand 2 + O :out std_logic_vector(15-1 downto 0); -- Output + C :out std_logic; -- Carry Flag + V :out std_logic; -- Overflow Flag + VALID :out std_logic -- Flag to indicate if the solution is valid or not +); +end arithmetic; \ No newline at end of file diff --git a/Task8/arithmetic_beh.vhdl b/Task8/arithmetic_beh.vhdl new file mode 100644 index 0000000..1c1aa76 --- /dev/null +++ b/Task8/arithmetic_beh.vhdl @@ -0,0 +1,8 @@ +library IEEE; +use IEEE.std_logic_1164.all; + +architecture behavior of arithmetic is + +begin + +end behavior; diff --git a/Task8/desc_7_Task8.pdf b/Task8/desc_7_Task8.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9c5cc182f4c25d6b273f27305ec83bde692916b3 GIT binary patch literal 45974 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