Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --------------------------------------------------------------------------------
- -- 16-Bit-Register zur Steuerung der Auswahl des naechsten Registers
- -- bei der Ausfuehrung von STM/LDM-Instruktionen. Das Register wird
- -- mit der Bitmaske der Instruktion geladen. Ein Prioritaetsencoder
- -- (Modul ArmPriorityVectorFilter) bestimmt das Bit mit der hochsten
- -- Prioritaet. Zu diesem Bit wird eine 4-Bit-Registeradresse erzeugt und
- -- das Bit im Register geloescht. Bis zum Laden eines neuen Datums wird
- -- mit jedem Takt ein Bit geloescht bis das Register leer ist.
- --------------------------------------------------------------------------------
- -- Datum: ??.??.2013
- -- Version: ?.??
- --------------------------------------------------------------------------------
- library ieee;
- use ieee.std_logic_1164.all;
- entity ArmLdmStmNextAddress is
- port(
- SYS_RST : in std_logic;
- SYS_CLK : in std_logic;
- LNA_LOAD_REGLIST : in std_logic;
- LNA_HOLD_VALUE : in std_logic;
- LNA_REGLIST : in std_logic_vector(15 downto 0);
- LNA_ADDRESS : out std_logic_vector(3 downto 0);
- LNA_CURRENT_REGLIST_REG : out std_logic_vector(15 downto 0)
- );
- end entity ArmLdmStmNextAddress;
- architecture behave of ArmLdmStmNextAddress is
- signal intern_reg : std_logic_vector(15 downto 0); 111101111101011
- signal priotiry_bit : std_logic_vector(15 downto 0);
- variable priority_bit_int : integer;
- component ArmPriorityVectorFilter
- port(
- PVF_VECTOR_UNFILTERED : in std_logic_vector(15 downto 0);
- PVF_VECTOR_FILTERED : out std_logic_vector(15 downto 0)
- );
- end component ArmPriorityVectorFilter;
- begin
- CURRENT_REGLIST_FILTER : ArmPriorityVectorFilter
- port map(
- PVF_VECTOR_UNFILTERED => LNA_REGLIST,
- PVF_VECTOR_FILTERED => priotiry_bit, 0000100000000
- );
- process(SYS_CLK)
- begin
- if (rising_edge(SYS_CLK)) then
- if (SYS_RST = '1') then intern_reg <= others <= '0';
- end if;
- if (LNA_LOAD_REGLIST) then
- intern_reg <= LNA_REGLIST;
- else -- also wenn nicht geladen wird
- if (HOLD_VALUE = '0') then -- das bit mit dem hoeschsten prio auf 0 setzen; mit der naechsten steigenden flanke??
- priority_bit_int <= log2(to_integer(unsigned(priority_bit)));
- intern_reg(priority_bit_int) <= '0';
- end if;
- end if;
- LNA_ADDRESS <= to_unsigned(priority_bit_int);
- LNA_CURRENT_REGLIST_REG <= intern_reg;
- end if;
- end process;
- end architecture behave;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement