summaryrefslogtreecommitdiffstats
path: root/PIC/tb_pic.vhd
diff options
context:
space:
mode:
authorVaino Kauppila <vaino@vke.fi>2026-04-19 12:32:58 +0300
committerVaino Kauppila <vaino@vke.fi>2026-04-19 12:32:58 +0300
commiteb8643ddbef43547eb7bfe58789a3908926c7258 (patch)
treefadfba88a1c71b266b8c67df166a3a6ead6b30d1 /PIC/tb_pic.vhd
parent129a1c975dbd0c042576010b1f6eb40d19fc5733 (diff)
downloadvhdl_pic-eb8643ddbef43547eb7bfe58789a3908926c7258.tar.gz
vhdl_pic-eb8643ddbef43547eb7bfe58789a3908926c7258.zip
refactor dir structure, add fib.c
Diffstat (limited to 'PIC/tb_pic.vhd')
-rw-r--r--PIC/tb_pic.vhd83
1 files changed, 0 insertions, 83 deletions
diff --git a/PIC/tb_pic.vhd b/PIC/tb_pic.vhd
deleted file mode 100644
index 067e154..0000000
--- a/PIC/tb_pic.vhd
+++ /dev/null
@@ -1,83 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-use work.read_intel_hex_pack.all;
-
-entity tb_pic is
-end entity tb_pic;
-
-architecture behavioural of tb_pic is
- constant T_clk : time := 20 ns; -- 50M
- constant HEX_FILE : string := "program.hex";
- constant SIM_CYCLES : integer := 800_000;
-
- signal clk : std_logic := '0';
- signal reset : std_logic := '1';
- signal opcode : std_logic_vector(13 downto 0);
-
- signal program_counter : std_logic_vector(12 downto 0);
- signal instruction_return : std_logic;
- signal work_reg : std_logic_vector(7 downto 0);
- signal status : std_logic_vector(2 downto 0);
- signal port_a : std_logic_vector(7 downto 0);
- signal port_b : std_logic_vector(7 downto 0);
-
- signal done : boolean := false;
-
- signal uart_tx : std_logic;
- signal uart_rx : std_logic := '1'; -- idle high (no incoming bytes)
-
- -- program memory: 1024 x 14-bit
- signal prog_mem : program_array := (others => (others => '0'));
-
-begin
-
- clk <= not clk after T_clk / 2 when not done else unaffected;
-
- -- drive opcode from program memory using PC
- opcode <= prog_mem(to_integer(unsigned(program_counter)));
-
- dut : entity work.PIC(rtl)
- generic map (
- CLK_FREQ => 50_000_000 -- 10 MHz, matches T_clk = 100 ns
- )
- port map (
- clk => clk,
- reset => reset,
- opcode => opcode,
- program_counter => program_counter,
- instruction_return => instruction_return,
- work_reg => work_reg,
- status => status,
- port_a => port_a,
- port_b => port_b,
- uart_tx => uart_tx,
- uart_rx => uart_rx
- );
-
- stimulus : process is
- variable mem : program_array;
- begin
- -- load hex file into program memory
- read_ihex_file(HEX_FILE, mem);
- prog_mem <= mem;
-
- -- reset pulse
- reset <= '1';
- wait for T_clk * 2;
- reset <= '0';
-
- -- run for SIM_CYCLES instruction cycles
- for i in 0 to SIM_CYCLES - 1 loop
- wait until rising_edge(clk);
- end loop;
-
- report "simulation done. port_a=" & integer'image(to_integer(unsigned(port_a)))
- & " port_b=" & integer'image(to_integer(unsigned(port_b)))
- severity note;
-
- done <= true;
- wait;
- end process stimulus;
-
-end architecture behavioural;