signal state_bits : std_logic_vector(3 downto 0);
signal sed_edge : std_logic;
+ signal sed_edge_last : std_logic;
signal sed_clock_last : std_logic;
signal sed_clock : std_logic;
signal sed_clock_q : std_logic;
signal sed_done_q : std_logic;
signal sed_error_q : std_logic;
+ signal sed_error_qq : std_logic;
signal sed_inprogress_q : std_logic;
+ signal sed_start_q : std_logic;
+ signal sed_enable_q : std_logic;
signal control_i : std_logic_vector(31 downto 0) := (others => '0');
signal status_i : std_logic_vector(31 downto 0);
+ signal status2_i : std_logic_vector(31 downto 0);
+
signal run_counter : unsigned(7 downto 0) := (others => '0');
signal error_counter : unsigned(7 downto 0) := (others => '0');
+ signal edge_counter : unsigned(7 downto 0) := (others => '0');
signal timer : unsigned(5 downto 0);
begin
sed_clock_last <= sed_clock_q when rising_edge(CLK);
sed_edge <= sed_clock_q and not sed_clock_last when rising_edge(CLK);
+sed_edge_last <= sed_edge when rising_edge(CLK);
sed_clock_q <= sed_clock when rising_edge(CLK);
sed_done_q <= sed_done when rising_edge(CLK);
sed_inprogress_q <= sed_inprogress when rising_edge(CLK);
sed_error_q <= sed_error when rising_edge(CLK);
-
+sed_error_qq <= sed_error_q when rising_edge(CLK);
---------------------------------------------------------------------------
-- Status / Control Register for internal data bus
case BUS_RX.addr(1 downto 0) is
when "00" => BUS_TX.data <= control_i;
when "01" => BUS_TX.data <= status_i;
+ when "10" => BUS_TX.data <= status2_i;
when others => BUS_TX.ack <= '0'; BUS_TX.unknown <= '1';
end case;
end if;
when INIT_2 =>
sed_enable <= '1';
sed_start <= '0';
- if timer = 0 then
+ if sed_edge = '1' then
state <= INIT_3;
end if;
when INIT_3 =>
state <= IDLE;
end if;
+ if(sed_error_q = '1' and sed_error_qq = '0') then
+ edge_counter <= edge_counter + 1;
+ end if;
+
+ if sed_edge_last = '1' then
+ sed_start_q <= sed_start;
+ end if;
+ if sed_edge_last = '1' or sed_enable_q = '0' then
+ sed_enable_q <= sed_enable;
+ end if;
end process;
---------------------------------------------------------------------------
status_i(15 downto 11) <= (others => '0');
status_i(23 downto 16) <= std_logic_vector(run_counter);
status_i(31 downto 24) <= std_logic_vector(error_counter);
-
+
+status2_i(31 downto 8) <= (others => '0');
+status2_i(7 downto 0) <= std_logic_vector(edge_counter);
+
ERROR_OUT <= sed_error;
DEBUG <= status_i when rising_edge(CLK);
DEV_DENSITY => "150K"
)
port map(
- SEDENABLE => sed_enable,
- SEDSTART => sed_start,
+ SEDENABLE => sed_enable_q,
+ SEDSTART => sed_start_q,
SEDFRCERR => '0',
SEDERR => sed_error,
SEDDONE => sed_done,