经典双进程状态机(含test beach).txt
上传用户:easylife05
上传日期:2013-03-21
资源大小:42k
文件大小:3k
源码类别:

VHDL/FPGA/Verilog

开发平台:

C/C++

  1. -- Classic 2-Process State Machine and Test Bench
  2. -- MEALY TYPE STATE MACHINE EXAMPLE
  3. -- dowload from: www.fpga.com.cn & www.pld.com.cn
  4. library ieee;
  5. use ieee.std_logic_1164.all;
  6. ENTITY fsm IS
  7.     PORT(clock,x : IN BIT; z : OUT BIT);
  8. END fsm;
  9. -------------------------------------------------
  10. ARCHITECTURE behaviour OF fsm IS
  11. TYPE state_type IS (s0,s1,s2,s3);
  12. SIGNAL present_state,next_state : state_type;
  13. BEGIN
  14. --state register process
  15. state_reg:PROCESS
  16.           BEGIN
  17.             WAIT UNTIL clock'EVENT AND clock = '1';
  18.             present_state <= next_state;
  19.           END PROCESS;
  20. --combinational logic feedback process
  21.  fb_logic:PROCESS(present_state,x)
  22.           BEGIN
  23.             CASE present_state IS
  24.                 WHEN s0 =>
  25.                 IF x = '0' THEN z <= '0'; next_state <= s0;
  26.                 ELSE z <= '1'; next_state <= s2;
  27.                 END IF;
  28.                 WHEN s1 =>
  29.                 IF x = '0' THEN z <= '0'; next_state <= s0;
  30.                 ELSE z <= '0'; next_state <= s2;
  31.                 END IF;
  32.                 WHEN s2 =>
  33.                 IF x = '0' THEN z <= '1'; next_state <= s2;
  34.                 ELSE z <= '0'; next_state <= s3;
  35.                 END IF;
  36.                 WHEN s3 =>
  37.                 IF x = '0' THEN z <= '0'; next_state <= s3;
  38.                 ELSE z <= '1'; next_state <= s1;
  39.                 END IF;
  40.             END CASE;
  41.           END PROCESS;
  42. END behaviour;
  43. -----------------------------------------------------------
  44. --STIMULUS GENERATOR FOR FSM
  45. ENTITY fsm_stim IS
  46.     PORT (clock,x: OUT BIT; z: IN BIT);
  47. END fsm_stim;
  48. ARCHITECTURE behavioural OF fsm_stim IS
  49. BEGIN
  50. --clock pulses : __--__--__--__--__--__
  51. --x input      : _____------------_____
  52. --each '-' represents 5 ns.
  53.     clock <= '0' AFTER 0 ns,
  54.              '1' AFTER 10 ns, --clock 1
  55.              '0' AFTER 20 ns,
  56.              '1' AFTER 30 ns, --clock 2
  57.              '0' AFTER 40 ns,
  58.              '1' AFTER 50 ns, --clock 3
  59.              '0' AFTER 60 ns,
  60.              '1' AFTER 70 ns, --clock 4
  61.              '0' AFTER 80 ns,
  62.              '1' AFTER 90 ns, --clock 5
  63.              '0' AFTER 100 ns;
  64.     x <= '0' AFTER 0 ns,
  65.          '1' AFTER 25 ns,
  66.          '0' AFTER 85 ns;
  67. END behavioural;
  68. -----------------------------------------------
  69. ENTITY fsm_bench IS
  70. END fsm_bench;
  71. ARCHITECTURE structural OF fsm_bench IS
  72.     COMPONENT fsm_stim PORT (clock,x: OUT BIT; z: IN BIT); END COMPONENT;
  73.     COMPONENT fsm PORT (clock,x: IN BIT; z: OUT BIT); END COMPONENT;
  74.     SIGNAL clock,x,z: BIT;
  75. BEGIN
  76.     generator:fsm_stim PORT MAP(clock,x,z);
  77.     circuit:fsm PORT MAP(clock,x,z);
  78. END structural;