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記述は、割愛させて頂きます。ご了承下さい。

【合成結果】