repo2/eclaireXL_ITX/gpio_debug.vhd
599 | markw | -- (c) 2017 mark watson
|
|
-- I am happy for anyone to use this for non-commercial use.
|
|||
-- If my vhdl files are used commercially or otherwise sold,
|
|||
-- please contact me for explicit permission at scrameta (gmail).
|
|||
-- This applies for source and binary form and derived works.
|
|||
---------------------------------------------------------------------------
|
|||
LIBRARY ieee;
|
|||
USE ieee.std_logic_1164.all;
|
|||
use ieee.numeric_std.all;
|
|||
LIBRARY work;
|
|||
ENTITY gpio_debug IS
|
|||
PORT
|
|||
(
|
|||
CLK : IN STD_LOGIC;
|
|||
RESET_N : IN STD_LOGIC;
|
|||
PBI_DEBUG : IN STD_LOGIC_VECTOR(31 downto 0);
|
|||
PBI_DEBUG_READY : IN STD_LOGIC;
|
|||
DATA_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
CLK_OUT : OUT STD_LOGIC
|
|||
);
|
|||
END gpio_debug;
|
|||
ARCHITECTURE vhdl OF gpio_debug IS
|
|||
signal cycle_reg : std_logic_vector(4 downto 0);
|
|||
signal cycle_next : std_logic_vector(4 downto 0);
|
|||
signal pbi_debug_reg : std_logic_vector(31 downto 0);
|
|||
signal pbi_debug_next : std_logic_vector(31 downto 0);
|
|||
600 | markw | signal data_out_reg : std_logic_vector(7 downto 0);
|
|
signal data_out_next : std_logic_vector(7 downto 0);
|
|||
599 | markw | ||
signal clk_out_reg : std_logic;
|
|||
signal clk_out_next : std_logic;
|
|||
BEGIN
|
|||
process(clk,reset_n)
|
|||
begin
|
|||
if (reset_n='0') then
|
|||
pbi_debug_reg <= (others=>'0');
|
|||
cycle_reg <= (others=>'0');
|
|||
data_out_reg <= (others=>'0');
|
|||
clk_out_reg <= '0';
|
|||
600 | markw | elsif (clk'event and clk='1') then
|
|
599 | markw | pbi_debug_reg <= pbi_debug_next;
|
|
cycle_reg <= cycle_next;
|
|||
data_out_reg <= data_out_next;
|
|||
clk_out_reg <= clk_out_next;
|
|||
end if;
|
|||
end process;
|
|||
process(cycle_reg,pbi_debug_ready,pbi_debug,pbi_debug_reg,data_out_reg,clk_out_reg)
|
|||
begin
|
|||
600 | markw | pbi_debug_next <= pbi_debug_reg;
|
|
599 | markw | cycle_next <= std_logic_vector(unsigned(cycle_reg)+1);
|
|
data_out_next <= data_out_reg;
|
|||
clk_out_next <= clk_out_reg;
|
|||
600 | markw | if (pbi_debug_ready='1') then
|
|
599 | markw | cycle_next <= (others=>'0');
|
|
pbi_debug_next <= pbi_debug;
|
|||
end if;
|
|||
case cycle_reg is
|
|||
600 | markw | when "0"&x"0" =>
|
|
599 | markw | data_out_next <= pbi_debug_reg(7 downto 0);
|
|
600 | markw | when "0"&x"4" =>
|
|
clk_out_next <= not(clk_out_reg);
|
|||
when "0"&x"8" =>
|
|||
599 | markw | data_out_next <= pbi_debug_reg(15 downto 8);
|
|
600 | markw | when "0"&x"c" =>
|
|
clk_out_next <= not(clk_out_reg);
|
|||
when "1"&x"0" =>
|
|||
599 | markw | data_out_next <= pbi_debug_reg(23 downto 16);
|
|
600 | markw | when "1"&x"4" =>
|
|
clk_out_next <= not(clk_out_reg);
|
|||
when "1"&x"8" =>
|
|||
599 | markw | data_out_next <= pbi_debug_reg(31 downto 24);
|
|
600 | markw | when "1"&x"c" =>
|
|
clk_out_next <= not(clk_out_reg);
|
|||
when others =>
|
|||
599 | markw | end case;
|
|
end process;
|
|||
data_out <= data_out_reg;
|
|||
clk_out <= clk_out_reg;
|
|||
END vhdl;
|