Presentation is loading. Please wait.

Presentation is loading. Please wait.

Return Stack Lab 8.

Similar presentations


Presentation on theme: "Return Stack Lab 8."— Presentation transcript:

1 Return Stack Lab 8

2 A 32 x 16 Stack Same as used in the Data Stack in Lab 7

3 A 32 x 16 Stack Module

4 The Return Stack

5 The WC16C WHYP Core

6 Return Stack and I/O Instructions
Code Name Function 0030 >R “To-R” Pop T and push it on return stack. 0031 R> “R-from” Pop return stack R and push it into T. 0032 “R-fetch” Copy R to T and push register stack 0033 R>DROP “R-from-drop” Pop return stack R and throw it away 0039 LD! “LD store” Store 8-bits of T into the 8-bit LD register

7 >R when tor => tload <= '1'; nload <= '1';
tsel <= "111"; nsel <= "01"; dpop <= '1'; rload <= '1'; rpush <= '1'; rinsel <= '1'; >R “To-R” Pop T and push it on return stack.

8 R> when rfrom => tload <= '1'; nload <= '1';
tsel <= "011"; dpush <= '1'; rsel <= '1'; rload <= '1'; rpop <= '1'; R> “R-from” Pop return stack R and push it into T.

9 R@ when rfetch => tload <= '1'; nload <= '1';
tsel <= "011"; dpush <= '1'; “R-fetch” Copy R to T and push register stack

10 R>DROP when rfromdrop => rsel <= '1';
rload <= '1'; rpop <= '1'; “R-from-drop” Pop return stack R and throw it away

11 Return Stack and I/O Instructions
Code Name Function 0030 >R “To-R” Pop T and push it on return stack. 0031 R> “R-from” Pop return stack R and push it into T. 0032 “R-fetch” Copy R to T and push register stack 0033 R>DROP “R-from-drop” Pop return stack R and throw it away 0039 LD! “LD store” Store 8-bits of T into the 8-bit LD register

12 LD! “LD store” Store 8-bits of T into the 8-bit LD register
and pop data stack when ldstore => ldload <= '1'; tload <= '1'; nload <= '1'; tsel <= "111"; nsel <= "01"; dpop <= '1'; LD!

13 Transfer Instructions
Code Name Function 0103 DRJNE Decrement R and jump if R is not zero 0104 CALL Call subroutine 0105 RET Subroutine return

14 FOR…NEXT Loop n FOR <WHYP statements> NEXT >R
drjne <WHYP statements> Decrement top of return stack and branch back to <WHYP statements> if not equal to zero. Therefore, <WHYP statements> are executed n times.

15 DRJNE Decrement R and jump if R is not zero
-- r1 <= '1' if R-1 is all zeros r1 := '0'; for i in width-1 downto 1 loop r1 := r1 or R(i); end loop; r1 := (not r1) and R(0); when drjne => rdec <= not r1; pload <= not r1; psel <= '0'; pinc <= r1; rsel <= r1; rload <= r1; rpop <= r1;

16 The Return Stack

17 CALL Call subroutine Jump to address M and
push address of next instruction (P + 1) on return stack when call => pload <= '1'; rload <= '1'; rpush <= '1';

18 RET Subroutine return Jump to address on top of the
return stack, and pop the return stack when ret => psel <= '1'; pload <= '1'; rsel <= '1'; rload <= '1'; rpop <= '1';

19

20 \ led8.whp HEX : 1ms_Delay ( -- ) 30D1 FOR NEXT ; : .5sec_Delay ( -- ) 1F4 FOR 1ms_Delay NEXT ; : MAIN ( -- ) BEGIN 8000 8 FOR DUP LD! DUP DIG! .5sec_Delay 2/ NEXT U2/ DROP AGAIN ;

21 ROM Listing constant rom: rom_array := ( JMP, --0 X"0010", --1
LIT, --2 X"30D1", --3 tor, --4 drjne, --5 X"0005", --6 RET, --7 LIT, --8 X"03E8", --9 tor, --a CALL, --b X"0002", --c drjne, --d X"000b", --e RET, --f LIT, X"8000", --11 LIT, X"0008", --13 tor, ROM Listing HEX : 1ms_Delay ( -- ) 30D1 FOR NEXT ; : .5sec_Delay ( -- ) 1F4 FOR 1ms_Delay NEXT ; : MAIN ( -- ) BEGIN 8000 8 FOR


Download ppt "Return Stack Lab 8."

Similar presentations


Ads by Google