Init
This commit is contained in:
commit
db068e3453
|
@ -0,0 +1,33 @@
|
|||
# Makefile for lut
|
||||
# Yannick Reiß
|
||||
|
||||
# Variable section
|
||||
PARTS = lut
|
||||
CHDL = ghdl
|
||||
FLAGS = --std=08
|
||||
SRC = src/lut.vhd
|
||||
MULTI = $(SRC) tb/tb_lut.vhd
|
||||
STOP = 300ns
|
||||
|
||||
ENTITY = lut_tb
|
||||
TARGETSRC = $(MULTI)
|
||||
PART = lut
|
||||
|
||||
# Build all
|
||||
all: $(PARTS)
|
||||
|
||||
# execute testbench
|
||||
$(PART): $(TARGETSRC)
|
||||
$(CHDL) -a $(FLAGS) $(TARGETSRC)
|
||||
$(CHDL) -e $(FLAGS) $(ENTITY)
|
||||
$(CHDL) -r $(FLAGS) $(ENTITY) --vcd=$(ENTITY).vcd --stop-time=$(STOP)
|
||||
|
||||
# project rules
|
||||
clean:
|
||||
find . -name '*.o' -exec rm -r {} \;
|
||||
find . -name '*.cf' -exec rm -r {} \;
|
||||
find . -name '*.ghw' -exec rm -r {} \;
|
||||
find . -name '*.vcd' -exec rm -r {} \;
|
||||
rm $(ENTITY)
|
||||
|
||||
.PHONY: all clean
|
|
@ -0,0 +1,38 @@
|
|||
-- lut.vhd
|
||||
-- Created on: Mi 28. Dez 13:36:43 CET 2022
|
||||
-- Author(s): Yannick Reiß
|
||||
-- Content: Entity lut
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
-- Entity lut: multiply two words
|
||||
entity lut is
|
||||
port(
|
||||
clk : in std_logic;
|
||||
input_vector : in std_logic_vector(3 downto 0);
|
||||
program_enable : in std_logic;
|
||||
truth_table : in std_logic_vector(15 downto 0);
|
||||
output_signal : out std_logic
|
||||
);
|
||||
end lut;
|
||||
|
||||
-- Architecture Behavior of lut: multiply two words
|
||||
architecture Behavior of lut is
|
||||
signal internal_truth_table : std_logic_vector(15 downto 0) := (others => '0');
|
||||
begin
|
||||
|
||||
-- Process program
|
||||
program : process (all) -- runs only, when all changed
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if program_enable = '1' then
|
||||
internal_truth_table <= truth_table;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
output_signal <= truth_table(to_integer(unsigned(input_vector)));
|
||||
|
||||
end Behavior;
|
|
@ -0,0 +1,136 @@
|
|||
-- tb_lut.vhd
|
||||
-- Created on: Mo 12. Dez 10:45:36 CET 2022
|
||||
-- Author(s): Yannick Reiss
|
||||
-- Content: Testbench for Taperead and Tapewrite
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library std;
|
||||
use std.textio.all;
|
||||
|
||||
-- Entity lut_tb: Testing unit (wrapper)
|
||||
entity lut_tb is
|
||||
end lut_tb;
|
||||
|
||||
-- Architecture of : test read and write operations
|
||||
architecture testing of lut_tb is
|
||||
-- Clock
|
||||
signal clk : std_logic;
|
||||
constant clk_period : time := 10 ns;
|
||||
|
||||
-- Inputs
|
||||
signal vec_in : std_logic_vector(3 downto 0) := "0000";
|
||||
signal prog_ena : std_logic := '0';
|
||||
signal truth_table : std_logic_vector(15 downto 0) := (others => '0');
|
||||
|
||||
-- Outputs
|
||||
signal sig_out : std_logic := '0';
|
||||
|
||||
begin
|
||||
|
||||
-- Instantiate the Unit Under Test (UUT)
|
||||
-- Entity work.lut(Behavior): Unit to test
|
||||
uut : entity work.lut(Behavior)
|
||||
port map (
|
||||
clk => clk,
|
||||
input_vector => vec_in,
|
||||
program_enable => prog_ena,
|
||||
truth_table => truth_table,
|
||||
output_signal => sig_out
|
||||
);
|
||||
|
||||
-- Process clk_process Clock process definitions
|
||||
clk_process : process -- runs only, when changed
|
||||
begin
|
||||
clk <= '0';
|
||||
wait for clk_period/2;
|
||||
clk <= '1';
|
||||
wait for clk_period/2;
|
||||
end process;
|
||||
|
||||
-- Process stim_proc
|
||||
stim_proc : process -- runs only, when changed
|
||||
begin
|
||||
|
||||
-- wait for the frist rising edge
|
||||
wait until rising_edge(clk);
|
||||
|
||||
-- Set up the LUT
|
||||
truth_table <= "1111000000000000";
|
||||
prog_ena <= '1';
|
||||
wait for 5 ns;
|
||||
prog_ena <= '0';
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "0000";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "0001";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "0010";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "0011";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "0100";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "0101";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "0110";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "0111";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "1000";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "1001";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "1010";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "1011";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "1100";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "1101";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "1110";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Test
|
||||
vec_in <= "1111";
|
||||
wait for 5 ns;
|
||||
|
||||
-- Testing memory
|
||||
wait for 5 ns;
|
||||
wait;
|
||||
end process;
|
||||
|
||||
end ;
|
Loading…
Reference in New Issue