Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 1.73 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4.  
  5. ENTITY fsm_C IS
  6.         PORT (
  7.                 key: in integer range 0 to 255;
  8.                 clk: in std_logic;
  9.                 number: out integer range -1000000000 to 1000000000;
  10.                 memPos: out integer range 0 to 31;
  11.                 ff_write, ff_calc: out std_logic
  12.         );
  13. END fsm_C;
  14.  
  15. ARCHITECTURE fsm_C of fsm_C IS
  16.     signal state: integer range 0 to 7 := 0;
  17.     signal memory: integer range 0 to 31 := 0;
  18.     signal last_key: integer range 0 to 255 := 0;
  19.     signal neg: std_logic := '0';
  20.     signal n, degree: integer range -1000000000 to 1000000000 := 0;
  21.    
  22. BEGIN
  23.  
  24. PROCESS (clk, key)
  25. BEGIN
  26.     IF (clk'event AND clk = '1') THEN
  27.         CASE state IS
  28.             WHEN 0 =>
  29.                 IF (last_key /= key) THEN
  30.                     IF (key = 45) THEN
  31.                         state <= 1;
  32.                     ELSIF (key >= 48 AND key <= 57) THEN
  33.                         state <= 2;
  34.                     ELSIF (key = 10) THEN
  35.                         IF (neg = '0') THEN
  36.                             state <= 3;
  37.                         ELSE
  38.                             state <= 4;
  39.                         END IF;
  40.                     END IF;
  41.                     last_key <= key;
  42.                 END IF;
  43.                
  44.             WHEN 1 =>
  45.                 neg <= '1';
  46.                 state <= 0;
  47.            
  48.             WHEN 2 =>
  49.                 n <= (n * 10) + key - 48;
  50.                 state <= 0;
  51.            
  52.             WHEN 3 =>
  53.                 ff_write <= '1';
  54.                 state <= 5;
  55.                
  56.             WHEN 4 =>
  57.                 n <= (-1) * n;
  58.                 state <= 3;
  59.                
  60.             WHEN 5 =>
  61.                 IF (memory = 0) THEN
  62.                     degree <= n;
  63.                 END IF;
  64.                 ff_write <= '0';
  65.                 neg <= '0';
  66.                 n <= 0;
  67.                 memory <= memory + 1;
  68.                 IF (memory <= degree) THEN
  69.                     state <= 0;
  70.                 ELSE
  71.                     state <= 6;
  72.                 END IF;
  73.            
  74.             WHEN 6 =>
  75.                 ff_calc <= '1';
  76.                 state <= 7;
  77.            
  78.             WHEN 7 =>
  79.                 memory <= 0;
  80.                 ff_calc <= '0';
  81.         END CASE;
  82.     END IF;
  83.  
  84.     memPos <= memory;
  85.     number <= n;
  86. END PROCESS;
  87.  
  88.        
  89. END fsm_C;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement