三人表决器(三种不同的描述方式).txt
上传用户:easylife05
上传日期:2013-03-21
资源大小:42k
文件大小:2k
源码类别:

VHDL/FPGA/Verilog

开发平台:

C/C++

  1. -- Three-input Majority Voter
  2. -- The entity declaration is followed by three alternative architectures which achieve the same functionality in different ways. 
  3. -- download from: www.pld.com.cn & www.fpga.com.cn
  4. ENTITY maj IS
  5.    PORT(a,b,c : IN BIT; m : OUT BIT);
  6. END maj;
  7. --Dataflow style architecture
  8. ARCHITECTURE concurrent OF maj IS
  9. BEGIN
  10.    --selected signal assignment statement (concurrent)
  11.     WITH a&b&c SELECT
  12.         m <= '1' WHEN "110"|"101"|"011"|"111",'0' WHEN OTHERS;
  13. END concurrent;
  14. --Structural style architecture
  15. ARCHITECTURE structure OF maj IS
  16.    --declare components used in architecture
  17.    COMPONENT and2 PORT(in1, in2 : IN BIT; out1 : OUT BIT); 
  18.    END COMPONENT;
  19.    COMPONENT or3 PORT(in1, in2, in3 : IN BIT; out1 : OUT BIT); 
  20.    END COMPONENT;
  21.    --declare local signals
  22.    SIGNAL w1, w2, w3 : BIT;
  23. BEGIN
  24.    --component instantiation statements. 
  25.    --ports of component are mapped to signals 
  26.    --within architecture by position.
  27.    gate1 : and2 PORT MAP (a, b, w1);
  28.    gate2 : and2 PORT MAP (b, c, w2);      
  29.    gate3 : and2 PORT MAP (a, c, w3);      
  30.    gate4 : or3 PORT MAP (w1, w2, w3, m);      
  31. END structure;
  32. --Behavioural style architecture using a look-up table
  33. ARCHITECTURE using_table OF maj IS
  34. BEGIN
  35.    PROCESS(a,b,c)
  36.       CONSTANT lookuptable : BIT_VECTOR(0 TO 7) := "00010111";
  37.       VARIABLE index : NATURAL;
  38.    BEGIN
  39.       index := 0; --index must be cleared each time process executes
  40.       IF a = '1' THEN index := index + 1; END IF;
  41.       IF b = '1' THEN index := index + 2; END IF;
  42.       IF c = '1' THEN index := index + 4; END IF;
  43.       m <= lookuptable(index);
  44.    END PROCESS;
  45. END using_table;