mod演算器(組み合わせ回路)(パッケージ含む)
掲載ページ:194、リスト番号:8.2
【VHDL記述】
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
package MODULO_PACK is
constant CL : integer := 7; -- 文字コード長(Bits)
constant BS : integer := 1; -- ブロックサイズ(文字数)
constant BL : integer := CL * BS; -- 1ブロックのビット長(Bits) (= CL * BS)
constant KL : integer := 7; -- 公開鍵のビット長(Bits)
constant ML : integer := 7; -- 法のビット長(Bits)
end MODULO_PACK;
library IEEE, WORK;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use WORK.MODULO_PACK.all;
entity MODULO is
port( D : in std_logic_vector(2*BL-1 downto 0); -- 被除数
S : in std_logic_vector(ML-1 downto 0); -- 除数
R : out std_logic_vector(ML-1 downto 0)); -- 剰余
end MODULO;
architecture BEHAVIOR of MODULO is
begin
process (D, S)
variable TMP_D : std_logic_vector(D'length+S'length-1 downto 0);
variable TMP_S : std_logic_vector(S'length downto 0);
constant ZV_MD : std_logic_vector(S'range) := (others => '0');
begin
TMP_D := ZV_MD & D;
TMP_S := '0' & S;
for I in D'range loop
if (TMP_D(S'length+I downto I) >= TMP_S) then
TMP_D(S'length+I downto I) := TMP_D(S'length+I downto I) - TMP_S;
else
null;
end if;
end loop;
R <= TMP_D(S'range);
end process;
end BEHAVIOR;
【Verilog-HDL記述】
※ この回路のVerilog-HDL記述は、割愛させて頂きます。ご了承下さい。
【合成結果】