LéptetésVHDL A léptetés műveletek (Shift Operators) n Áttekintés n Példák
LéptetésVHDL Áttekintés n 6 különböző léptetési művelet van a VHDL-93 szabványban: –sllLéptetés balra (shift left) (jobb oldali utolsó bit a ‘0’-t veszi fel) –srlLéptetés jobbra (shift right) (bal oldali első bit a ‘0’-t veszi fel) –rolÁtforgatás balra (roll over left) –rorÁtforgatás jobbra (roll over right) –slaLéptetés balra, megtartva a jobboldali végértéket (shift left, and keep value ‘right) –sraLéptetés jobbra, megtartva a baloldali végértéket (shift right, and keep value ‘left)
LéptetésVHDL Példa Architecture behv of ex is begin a <= “01101”; a <= “01101”; q1 <= a sll 1;-- q1 = “11010” q1 <= a sll 1;-- q1 = “11010” q2 <= a srl 3;-- q2 = “00001” q2 <= a srl 3;-- q2 = “00001” q3 <= a rol 2;-- q3 = “10101” q3 <= a rol 2;-- q3 = “10101” q4 <= a ror 1;-- q4 = “10110” q4 <= a ror 1;-- q4 = “10110” q5 <= a sla 2;-- q5 = “10111” q5 <= a sla 2;-- q5 = “10111” q6 <= a sra 1;-- q6 = “00110” q6 <= a sra 1;-- q6 = “00110” end;
LéptetésVHDL Léptetés művelet csomagbeli függvényekkel n Ha a szintézis eszköz nem támogatja a szabványbeli léptetés műveletet, akkor csomagban meghatározott függvénnyel lehet megvalósítani n Pl. az ieee.std_logic_unsigned csomagban a következő függvények találhatók: function shl (arg: std_logic_vector; count: std_logic_vector) return std_logic_vector; function shr (arg: std_logic_vector; count: std_logic_vector) return std_logic_vector; n Alkalmazási példa: q1 <= shl(data,”1”);-- Egyet léptet balra q2 <= shr(data,”101”);-- Ötöt léptet jobbra q3 <= shr(data, count);-- Count számút léptet jobbra
LéptetésVHDL Léptetés művelet elkerülése n Készíthető VHDL kód léptetési művelet alkalmazása nélkül is, pl.: Architecture rtl of ex is; signal data: std_logic_vector(7 downto 0); begin process(clk, resetn) process(clk, resetn) begin begin if resetn=‘0’ then q1 ‘1’); q2 ‘1’); if resetn=‘0’ then q1 ‘1’); q2 ‘1’); elsif clk’event and clk=‘1’ then elsif clk’event and clk=‘1’ then q1(6 downto 0)<=q1(7 downto 1);-- Egyet léptet jobbra q1(6 downto 0)<=q1(7 downto 1);-- Egyet léptet jobbra q1(7)<=d_in; q1(7)<=d_in; q2(7 downto 1)<=q2(6 downto 0);-- Egyet léptet balra q2(7 downto 1)<=q2(6 downto 0);-- Egyet léptet balra q2(0)<=d_in; q2(0)<=d_in; end if; end if; end process; end process;end;