Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

バスを繋ぐ&演算子@VHDL

VHDLFPGAでバスを繋ぐには"&演算子"をつかいます

実際のところ

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Switches_LEDs is
  Port ( switches : in STD_LOGIC_VECTOR(1 downto 0);
  LEDs : out STD_LOGIC_VECTOR(1 downto 0));
end Switches_LEDs;

begin
  LEDs <= switches;
end Behavioral;

switches(0)が'1'、switches(1)が'0'のとき、これらは同じ意味です。

LEDs(0) <= switches(0);
LEDs(1) <= switches(1);
LEDs <= switches(0) & switches(1);
LEDs <= "10";

ビット数をあわせるときにもつかう

ビット数を明確に増やす場合にも使います。
たとえば、4bitのものを5bitに増やすときとか。
ただ、どこかの莫迦のように型推論なんて芸当をHDLに期待しないようにしてください*1

signal regB : STD_LOGIC_VECTOR(3 downto 0) := (others => '0');
signal temp : STD_LOGIC_VECTOR(4 downto 0); 
//中略

signal temp <= ('0' & regB) + ('0' & '1100');
// => 0B01100

*1:今後コンパイラが進化したらできるかもしれませんけどね