符号ビットを頭に詰める話

続けてVHDLの話。
例えば符号付き4bitの値を符号付き8bitに広げる場合、

signal data : std_logic_vector(3 downto 0);
signal data2 : std_logic_vector(7 downto 0);

process(....)
variable tmp : std_logic_vector(7 downto 0);
begin
   tmp := data(3) & data(3) & data(3) & data(3) & data;   # 変数代入
   data2 <= tmp * tmp;  # 信号代入
   -- (省略)
end process;

というのが、一案、詰めるビットが多い場合はこうも書けるなぁ。と。

process(...)
variable tmp : std_logic_vector(7 downto 0);
begin
   if data(3) = '1' then
      tmp := X"F" & data;
   else
      tmp := X"0" & data;
   end if;

   data2 <= tmp * tmp;
   -- (省略)
end process;

見た目のわかりやすさもあるから、どちらがよいだろう。
詰める符号ビットの数が多い場合は下の書き方だろうなぁ。上の書き方だと見たまんま。というのもあるが。


奥が深い。