title: short way to write VHDL priority encoder
body: <p>Could you tell me if there is a better way to write a priority encoder in VHDL than just using if-else statements? I mean, I have got this code and it works, but could it be written shorter? Switch is an std_logic_vector.</p>
  
  <p>Thanks for your help!</p>
  
  <pre><code>shifting : PROCESS(CLK_IN, new_length_ready, switch)
  
      VARIABLE highest_switch :      INTEGER RANGE 0 TO 15 := 15;
  
  BEGIN
  
      -- priority encoder, changes the length of the snake track 
      -- ( i.e., number of leds for the snake to move )
  
      IF switch(15) = '1' THEN
          highest_switch := 15;
      ELSIF switch(14) = '1' THEN
          highest_switch := 14;
      ELSIF switch(13) = '1' THEN
          highest_switch := 13;
      ELSIF switch(12) = '1' THEN
          highest_switch := 12;
      ELSIF switch(11) = '1' THEN
          highest_switch := 11;
      ELSIF switch(10) = '1' THEN
          highest_switch := 10;
      ELSIF switch(9) = '1' THEN
          highest_switch := 9;
      ELSIF switch(8) = '1' THEN
          highest_switch := 8;
      ELSIF switch(7) = '1' THEN
          highest_switch := 7;
      ELSIF switch(6) = '1' THEN
          highest_switch := 6;
      ELSIF switch(5) = '1' THEN
          highest_switch := 5;
      ELSIF switch(4) = '1' THEN
          highest_switch := 4;
      ELSIF switch(3) = '1' THEN
          highest_switch := 3;
      ELSIF switch(2) = '1' THEN
          highest_switch := 2;
      ELSIF switch(1) = '1' THEN
          highest_switch := 1;
      ELSIF switch(0) = '1' THEN
          highest_switch := 0;
      ELSE
          highest_switch := 15;
      END IF
  </code></pre>