Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wb_orbit_intlk testbench refactoring #106

Merged
merged 3 commits into from
Sep 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions hdl/sim/regs/wb_orbit_intlk_regs_const_pkg.vhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

package wb_orbit_intlk_regs_const_pkg is
constant ADDR_ORBIT_INTLK_CTRL : std_logic_vector(31 downto 0) := x"00000000";
constant ORBIT_INTLK_CTRL_EN_OFFSET : integer := 0;
constant ORBIT_INTLK_CTRL_EN : std_logic_vector(31 downto 0) := x"00000001";
constant ORBIT_INTLK_CTRL_CLR_OFFSET : integer := 1;
constant ORBIT_INTLK_CTRL_CLR : std_logic_vector(31 downto 0) := x"00000002";
constant ORBIT_INTLK_CTRL_MIN_SUM_EN_OFFSET : integer := 2;
constant ORBIT_INTLK_CTRL_MIN_SUM_EN : std_logic_vector(31 downto 0) := x"00000004";
constant ORBIT_INTLK_CTRL_TRANS_EN_OFFSET : integer := 3;
constant ORBIT_INTLK_CTRL_TRANS_EN : std_logic_vector(31 downto 0) := x"00000008";
constant ORBIT_INTLK_CTRL_TRANS_CLR_OFFSET : integer := 4;
constant ORBIT_INTLK_CTRL_TRANS_CLR : std_logic_vector(31 downto 0) := x"00000010";
constant ORBIT_INTLK_CTRL_ANG_EN_OFFSET : integer := 5;
constant ORBIT_INTLK_CTRL_ANG_EN : std_logic_vector(31 downto 0) := x"00000020";
constant ORBIT_INTLK_CTRL_ANG_CLR_OFFSET : integer := 6;
constant ORBIT_INTLK_CTRL_ANG_CLR : std_logic_vector(31 downto 0) := x"00000040";
constant ORBIT_INTLK_CTRL_RESERVED_OFFSET : integer := 7;
constant ORBIT_INTLK_CTRL_RESERVED : std_logic_vector(31 downto 0) := x"7FFFFF80";
constant ADDR_ORBIT_INTLK_STS : std_logic_vector(31 downto 0) := x"00000004";
constant ORBIT_INTLK_STS_TRANS_BIGGER_X_OFFSET : integer := 0;
constant ORBIT_INTLK_STS_TRANS_BIGGER_X : std_logic_vector(31 downto 0) := x"00000001";
constant ORBIT_INTLK_STS_TRANS_BIGGER_Y_OFFSET : integer := 1;
constant ORBIT_INTLK_STS_TRANS_BIGGER_Y : std_logic_vector(31 downto 0) := x"00000002";
constant ORBIT_INTLK_STS_TRANS_BIGGER_LTC_X_OFFSET : integer := 2;
constant ORBIT_INTLK_STS_TRANS_BIGGER_LTC_X : std_logic_vector(31 downto 0) := x"00000004";
constant ORBIT_INTLK_STS_TRANS_BIGGER_LTC_Y_OFFSET : integer := 3;
constant ORBIT_INTLK_STS_TRANS_BIGGER_LTC_Y : std_logic_vector(31 downto 0) := x"00000008";
constant ORBIT_INTLK_STS_TRANS_BIGGER_ANY_OFFSET : integer := 4;
constant ORBIT_INTLK_STS_TRANS_BIGGER_ANY : std_logic_vector(31 downto 0) := x"00000010";
constant ORBIT_INTLK_STS_TRANS_BIGGER_OFFSET : integer := 5;
constant ORBIT_INTLK_STS_TRANS_BIGGER : std_logic_vector(31 downto 0) := x"00000020";
constant ORBIT_INTLK_STS_TRANS_BIGGER_LTC_OFFSET : integer := 6;
constant ORBIT_INTLK_STS_TRANS_BIGGER_LTC : std_logic_vector(31 downto 0) := x"00000040";
constant ORBIT_INTLK_STS_ANG_BIGGER_X_OFFSET : integer := 7;
constant ORBIT_INTLK_STS_ANG_BIGGER_X : std_logic_vector(31 downto 0) := x"00000080";
constant ORBIT_INTLK_STS_ANG_BIGGER_Y_OFFSET : integer := 8;
constant ORBIT_INTLK_STS_ANG_BIGGER_Y : std_logic_vector(31 downto 0) := x"00000100";
constant ORBIT_INTLK_STS_ANG_BIGGER_LTC_X_OFFSET : integer := 9;
constant ORBIT_INTLK_STS_ANG_BIGGER_LTC_X : std_logic_vector(31 downto 0) := x"00000200";
constant ORBIT_INTLK_STS_ANG_BIGGER_LTC_Y_OFFSET : integer := 10;
constant ORBIT_INTLK_STS_ANG_BIGGER_LTC_Y : std_logic_vector(31 downto 0) := x"00000400";
constant ORBIT_INTLK_STS_ANG_BIGGER_ANY_OFFSET : integer := 11;
constant ORBIT_INTLK_STS_ANG_BIGGER_ANY : std_logic_vector(31 downto 0) := x"00000800";
constant ORBIT_INTLK_STS_ANG_BIGGER_OFFSET : integer := 12;
constant ORBIT_INTLK_STS_ANG_BIGGER : std_logic_vector(31 downto 0) := x"00001000";
constant ORBIT_INTLK_STS_ANG_BIGGER_LTC_OFFSET : integer := 13;
constant ORBIT_INTLK_STS_ANG_BIGGER_LTC : std_logic_vector(31 downto 0) := x"00002000";
constant ORBIT_INTLK_STS_INTLK_OFFSET : integer := 14;
constant ORBIT_INTLK_STS_INTLK : std_logic_vector(31 downto 0) := x"00004000";
constant ORBIT_INTLK_STS_INTLK_LTC_OFFSET : integer := 15;
constant ORBIT_INTLK_STS_INTLK_LTC : std_logic_vector(31 downto 0) := x"00008000";
constant ADDR_ORBIT_INTLK_MIN_SUM : std_logic_vector(31 downto 0) := x"00000008";
constant ADDR_ORBIT_INTLK_TRANS_MAX_X : std_logic_vector(31 downto 0) := x"0000000C";
constant ADDR_ORBIT_INTLK_TRANS_MAX_Y : std_logic_vector(31 downto 0) := x"00000010";
constant ADDR_ORBIT_INTLK_ANG_MAX_X : std_logic_vector(31 downto 0) := x"00000014";
constant ADDR_ORBIT_INTLK_ANG_MAX_Y : std_logic_vector(31 downto 0) := x"00000018";
constant ADDR_ORBIT_INTLK_TRANS_MIN_X : std_logic_vector(31 downto 0) := x"0000001C";
constant ADDR_ORBIT_INTLK_TRANS_MIN_Y : std_logic_vector(31 downto 0) := x"00000020";
constant ADDR_ORBIT_INTLK_ANG_MIN_X : std_logic_vector(31 downto 0) := x"00000024";
constant ADDR_ORBIT_INTLK_ANG_MIN_Y : std_logic_vector(31 downto 0) := x"00000028";
constant ADDR_ORBIT_INTLK_TRANS_X_DIFF : std_logic_vector(31 downto 0) := x"0000002C";
constant ADDR_ORBIT_INTLK_TRANS_Y_DIFF : std_logic_vector(31 downto 0) := x"00000030";
constant ADDR_ORBIT_INTLK_ANG_X_DIFF : std_logic_vector(31 downto 0) := x"00000034";
constant ADDR_ORBIT_INTLK_ANG_Y_DIFF : std_logic_vector(31 downto 0) := x"00000038";
end package wb_orbit_intlk_regs_const_pkg;
172 changes: 172 additions & 0 deletions hdl/sim/sim_wishbone.vhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
----------------------------------------------------------------------------------
-- Copied from: --
-- https://ohwr.org/project/general-cores/blob/master/sim/vhdl/sim_wishbone.vhd --
----------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

use work.wishbone_pkg.all;

package sim_wishbone is
procedure init (signal wb_o: out t_wishbone_master_out);

-- Classic
procedure write32 (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : std_logic_vector (31 downto 0);
data : std_logic_vector (31 downto 0));

procedure read32 (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : std_logic_vector (31 downto 0);
data : out std_logic_vector (31 downto 0));

-- PL: pipelined versions.

procedure write32_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : std_logic_vector (31 downto 0);
data : std_logic_vector (31 downto 0));
procedure read32_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : std_logic_vector (31 downto 0);
data : out std_logic_vector (31 downto 0));
procedure write32_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : natural;
data : std_logic_vector (31 downto 0));
procedure read32_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : natural;
data : out std_logic_vector (31 downto 0));
end sim_wishbone;

package body sim_wishbone is
-- Generate a strobe pulse.
procedure start_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in) is
begin
wb_o.stb <= '1';
loop
wait until rising_edge(clk);
exit when wb_i.stall = '0';
end loop;
wb_o.stb <= '0';
end start_pl;

procedure wait_ack (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in) is
begin
loop
exit when wb_i.ack = '1';
wait until rising_edge(clk);
end loop;
wb_o.cyc <= '0';
wb_o.stb <= '0';
-- wb_o.adr <= (others => 'X');
-- this causes problems with cheby generated RAM interfaces
wb_o.dat <= (others => 'X');
end wait_ack;

procedure init (signal wb_o: out t_wishbone_master_out) is
begin
wb_o.stb <= '0';
wb_o.cyc <= '0';
wb_o.adr <= (others => '0');
end init;

procedure write32 (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : std_logic_vector (31 downto 0);
data : std_logic_vector (31 downto 0)) is
begin
wb_o.adr <= addr;
wb_o.dat <= data;
wb_o.sel <= "1111";
wb_o.we <= '1';
wb_o.cyc <= '1';
wb_o.stb <= '1';
wait until rising_edge(clk);

wait_ack (clk, wb_o, wb_i);
wait until rising_edge(clk);
end write32;

procedure read32 (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : std_logic_vector (31 downto 0);
data : out std_logic_vector (31 downto 0)) is
begin
wb_o.adr <= addr;
wb_o.we <= '0';
wb_o.cyc <= '1';
wb_o.stb <= '1';
wait until rising_edge(clk);

wait_ack (clk, wb_o, wb_i);
data := wb_i.dat;
wait until rising_edge(clk);
end read32;

procedure write32_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : std_logic_vector (31 downto 0);
data : std_logic_vector (31 downto 0)) is
begin
wb_o.adr <= addr;
wb_o.dat <= data;
wb_o.sel <= "1111";
wb_o.we <= '1';
wb_o.cyc <= '1';

start_pl (clk, wb_o, wb_i);
wait_ack (clk, wb_o, wb_i);
end write32_pl;

procedure read32_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : std_logic_vector (31 downto 0);
data : out std_logic_vector (31 downto 0)) is
begin
wb_o.adr <= addr;
wb_o.we <= '0';
wb_o.cyc <= '1';

start_pl (clk, wb_o, wb_i);
wait_ack (clk, wb_o, wb_i);
data := wb_i.dat;
end read32_pl;

procedure write32_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : natural;
data : std_logic_vector (31 downto 0)) is
begin
write32_pl (clk, wb_o, wb_i, std_logic_vector (to_unsigned(addr, 32)), data);
end write32_pl;

procedure read32_pl (signal clk : std_logic;
signal wb_o: out t_wishbone_master_out;
signal wb_i: in t_wishbone_master_in;
addr : natural;
data : out std_logic_vector (31 downto 0)) is
begin
read32_pl (clk, wb_o, wb_i, std_logic_vector (to_unsigned(addr, 32)), data);
end read32_pl;

end sim_wishbone;
32 changes: 7 additions & 25 deletions hdl/testbench/orbit_intlk/Manifest.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,14 @@
action = "simulation"
target = "xilinx"
syn_device = "xc7a200t"
sim_tool = "modelsim"
top_module = "wb_orbit_intlk_tb"
sim_top = "wb_orbit_intlk_tb"

modules = {
"local" : [
"../../modules/wb_orbit_intlk/",
"../../ip_cores/general-cores",
"../../ip_cores/infra-cores",
"../../ip_cores/dsp-cores",
"../../modules",
"../../ip_cores/general-cores",
"../../ip_cores/infra-cores",
"../../ip_cores/dsp-cores",
]
}

files = [
"wb_orbit_intlk_tb.v",
"clk_rst.v",
]

include_dirs = [
".",
"../../sim",
"../../sim/regs"
"../../ip_cores/general-cores/modules/wishbone/wb_lm32/src",
"../../ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic",
"../../ip_cores/general-cores/modules/wishbone/wb_spi_bidir",
"../../ip_cores/general-cores/modules/wishbone/wb_spi"
"xwb_orbit_intlk_tb.vhd",
"../../sim/sim_wishbone.vhd",
"../../sim/regs/wb_orbit_intlk_regs_const_pkg.vhd",
]

vlog_opt = "+incdir+../../sim/regs +incdir+../../sim +incdir+."
42 changes: 0 additions & 42 deletions hdl/testbench/orbit_intlk/clk_rst.v

This file was deleted.

24 changes: 0 additions & 24 deletions hdl/testbench/orbit_intlk/defines.v

This file was deleted.

4 changes: 4 additions & 0 deletions hdl/testbench/orbit_intlk/ghdl/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
*.o
*.cf
*.ghw
xwb_orbit_intlk_tb
12 changes: 12 additions & 0 deletions hdl/testbench/orbit_intlk/ghdl/Manifest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
action = "simulation"
sim_tool = "ghdl"
top_module = "xwb_orbit_intlk_tb"
target = "xilinx"
syn_device = "xc7a200t"
machine_pkg = "sirius_sr_250M"

modules = {"local" : ["../"]}

ghdl_opt = "--std=08 -frelaxed -fsynopsys"

sim_post_cmd = "ghdl -r --std=08 %s --wave=%s.ghw"%(top_module, top_module)
2 changes: 2 additions & 0 deletions hdl/testbench/orbit_intlk/nvc/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
work/
*.fst
13 changes: 13 additions & 0 deletions hdl/testbench/orbit_intlk/nvc/Manifest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
action = "simulation"
sim_tool = "nvc"
top_module = "xwb_orbit_intlk_tb"
target = "xilinx"
syn_device = "xc7a200t"
machine_pkg = "sirius_sr_250M"

modules = {"local" : ["../"]}

nvc_opt = "--std=2008"
nvc_elab_opt = "--no-collapse"

sim_post_cmd = "nvc -r --dump-arrays --exit-severity=error %s --wave=%s.fst --format=fst"%(top_module, top_module)
Loading
Loading