Re/Coder

知識蓄積備忘録/State-of-the-Ars

【VHDL】バレル・シフト回路とrange-based loop

バレル・シフト回路

以下に,バレル・シフト回路のVHDLソースコードを表示する.

-- Barrel Shifter

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.all;

entity BShifterNbit is
    generic (N : integer := 3);
    port (
        A : in std_logic_vector((2**N) - 1 downto 0);
        S : in std_logic_vector(N - 1 downto 0);
        Z : out std_logic_vector((2**N) - 1 downto 0)
    );
end BShifterNbit;

architecture RTL of BShifterNbit is
begin
    process(A, S)
    variable sc : integer;
    begin
        sc := to_integer(unsigned(S));
        --Debugsc := conv_integer(S);
        for I in A'range loop
        --Debug--for I in 0 to 7 Loop
            if (I + sc <= A'left) then
                Z(I + sc) <= A(I);
            else
                Z(I + sc - A'left - 1) <= A(I);
            end if;
        end loop;
    end process;
end RTL;

[引用]range-based loop

for i in a'range loop

 ...;

end loop;

aの配列またはバスの範囲がある限りiを増加させながらループを繰り返す。

processの中で利用する。

参考文献

  1. VHDL Tips

【VHDL】パリティ回路とセンシティビティリスト

パリティ回路

以下に,パリティ回路のVHDLソースコードを表示する.

-- Even Parity Circuit

library IEEE;
use IEEE.std_logic_1164.all;

entity ParityNbit is
    generic (N : integer := 4);
    port (
        A : in std_logic_vector(N - 1 downto 0);
        P : out std_logic
    );
end ParityNbit;

architecture RTL of ParityNbit is
    begin
        process(A)
        variable tmp : std_logic;
        begin
            -- even parity -> tmp := '0'
            -- odd parity -> tmp := '1'
            tmp := '0';
            for I in 0 to N - 1 loop
                tmp := tmp xor A(I);
            end loop;
            P <= tmp;
        end process;
end RTL;

今回のパリティ回路ではXORを使って,パリティビットを決定する.

手計算を行えば,理屈はわかると思うが, 偶数パリティの時,

tmp := '0';

奇数パリティの時,

tmp := '1';

とすればよい.

センシティビティリスト

センシティビティリストは,process文の機能で,

process(A)
begin
--<順次処理文>
end process;

という風に使用する.

この機能は,信号名をカンマで区切って並べたリストで,

ここに記述された信号に変化があると以下の式が活性化されて実行される.

参考文献

  1. process文

Survey 2016/04/08

プログラミングのスキルの向上だけを書くブログではなく,

色々なスキル,学習記録を書くブログだったことを思い出し,

今回は,アルゴリズムの勉強とかではなく,

Surveyの記録を公開しようかなと思います.

英語の論文読める力を付けたいですね.