Encryption VHDL合成,无法使代码可合成

Encryption VHDL合成,无法使代码可合成,encryption,vhdl,Encryption,Vhdl,我有一些关于VHDL语言的代码,这段代码包含一些加密/解密操作。请帮助我使这段代码可以合成,因为Xilinx IDE告诉我 第82行:运算符必须具有常量模操作数。 这是我的密码。也许你希望我如何重构它 ieee库; 使用ieee.std_logic_1164.all; 使用ieee.STD_LOGIC_TEXTIO.all; 使用ieee.STD_LOGIC_UNSIGNED.all; 使用ieee.STD\u LOGIC\u SIGNED.all; 使用ieee.NUMERIC_STD.all

我有一些关于VHDL语言的代码,这段代码包含一些加密/解密操作。请帮助我使这段代码可以合成,因为Xilinx IDE告诉我

第82行:运算符必须具有常量模操作数。 这是我的密码。也许你希望我如何重构它

ieee库;
使用ieee.std_logic_1164.all;
使用ieee.STD_LOGIC_TEXTIO.all;
使用ieee.STD_LOGIC_UNSIGNED.all;
使用ieee.STD\u LOGIC\u SIGNED.all;
使用ieee.NUMERIC_STD.all;
使用ieee.NUMERIC_BIT.all;
使用ieee.std_logic_arith.all;
使用ieee.MATH_REAL.all;
使用ieee.MATH_COMPLEX.all;
实体公司
港口(
clk:标准逻辑中;
字:整数;
n:inout整数;
v1:输出整数;
v2:输出整数;
v3:输出整数;
v4:输出整数;
v5:输出整数;
v6:输出整数;
v7:输出整数;
v8:输出整数
);
年终薪酬;
comp-is的体系结构
----图上使用的信号声明----
信号g1:整数:=1;
信号g2:整数:=1;
信号g3:整数:=1;
信号k1:整数:=0;
信号k2:整数:=0;
信号k3:整数:=0;
信号m1:整数;
信号m2:整数;
信号m3:整数;
---信号n:整数;
信号p1:整数;
信号p1_g1:整数;
信号p2:整数;
信号p2_g2:整数;
信号p3:整数;
信号p3_g3:整数;
信号sqrt1:整数;
信号sqrt2:整数;
信号sqrt3:整数;
信号w:整数;
---信号字:整数;
开始
----进程----
读取:进程(clk)
开始
如果clk'事件和clk='1',则

n在VHDL/verilog MOD中,REM和除法运算符是不可合成的。只有当第二个操作数是2的幂时,才可以进行除法。
即使您希望使用循环遍历代码以找到剩余部分,您也需要在条件段中放入一个常量以合成代码

在VHDL/verilog MOD中,REM和除法运算符是不可合成的。只有当第二个操作数是2的幂时,才可以进行除法。
即使您希望使用循环遍历代码以找到剩余部分,您也需要在条件段中放入一个常量以合成代码

首先删除大多数库使用子句!保持
std\u logic\u 1164
numeric\u std
。然后,任何时候你有形式为
w MOD p1的代码p1
常量(不是
信号
(而且,
n
是输出而不是输入输出)ISE或Vivado?在ISE下的XST参考,XST语言支持部分,VHDL运算符表mod“如果右操作数是2的常量幂,则支持”.UG901,VHDL支持VHDL构造,支持状态表mod也是如此。首先删除大多数库使用子句!保持
std\u logic\u 1164
numeric\u std
。然后,任何时候只要代码形式为
w mod p1;
synthesis只有在
p1
常量时才会接受它(不是
信号
(而且,
n
是输出而不是输入输出)ISE或Vivado?在ISE下XST参考,XST语言支持部分,VHDL运算符表mod“如果右操作数为2的恒定幂,则支持”.UG901,VHDL支持VHDL构造,支持状态表mod也这么说。这是不真实的。当除数为常数时,这些运算符在某些工具中是可合成的;不一定是2的幂。您可能并不总是喜欢结果,但那是另一回事。这是不真实的。当除数为常数时,这些运算符在某些工具中是可合成的是一个常数;不一定是2的幂。你可能并不总是喜欢这个结果,但那是另一回事。
library ieee;
    use ieee.std_logic_1164.all;
    use ieee.STD_LOGIC_TEXTIO.all;
    use ieee.STD_LOGIC_UNSIGNED.all;
    use ieee.STD_LOGIC_SIGNED.all;
    use ieee.NUMERIC_STD.all;
    use ieee.NUMERIC_BIT.all;
    use ieee.std_logic_arith.all;
    use ieee.MATH_REAL.all;
    use ieee.MATH_COMPLEX.all;

entity comp is
  port(
   clk : in STD_LOGIC;
     word : in INTEGER;
     n : inout INTEGER;
   v1 : out INTEGER;
   v2 : out INTEGER;
   v3 : out INTEGER;
   v4 : out INTEGER;
   v5 : out INTEGER;
   v6 : out INTEGER;
   v7 : out INTEGER;
   v8 : out INTEGER
  );
end comp;

architecture arch of comp is

---- Signal declarations used on the diagram ----

signal g1 : INTEGER := 1;
signal g2 : INTEGER := 1;
signal g3 : INTEGER := 1;
signal k1 : INTEGER := 0;
signal k2 : INTEGER := 0;
signal k3 : INTEGER := 0;
signal m1 : INTEGER;
signal m2 : INTEGER;
signal m3 : INTEGER;
---signal n : INTEGER;
signal p1 : INTEGER;
signal p1_g1 : INTEGER;
signal p2 : INTEGER;
signal p2_g2 : INTEGER;
signal p3 : INTEGER;
signal p3_g3 : INTEGER;
signal sqrt1 : INTEGER;
signal sqrt2 : INTEGER;
signal sqrt3 : INTEGER;
signal w : INTEGER;
---signal word : INTEGER;   

begin

---- Processes ----

read : process (clk)
                   begin
                     if clk'event and clk = '1' then
                        n <= p1 * p2 * p3;
                        w <= word * word MOD n;

                        sqrt1 <= w MOD p1;
                        sqrt2 <= w MOD p2;
                        sqrt3 <= w MOD p3;

                        if k1*k1 MOD p1 /= sqrt1 then
                            k1 <= k1 + 1;
                        else 
                            g1 <= k1; 
                            end if;

                        if k2*k2 MOD p2 /= sqrt2 then
                            k2 <= k2 + 1;
                        else 
                            g2 <= k2; 
                        end if;

                        if k3*k3 MOD p3 /= sqrt3 then
                            k3 <= k3 + 1;
                        else 
                             g3 <= k3;
                        end if;

                        p1_g1 <= p1 - g1;
                        p2_g2 <= p2 - g2;
                        p3_g3 <= p3 - g3;
                        m1 <= n / p1;
                        m2 <= n / p2;
                        m3 <= n / p3;
                        v1 <= (-m1 * g1 + m2 * g2 + m3 * g3) MOD n;
                        v2 <= (-m1 * g1 + m2 * g2 + m3 * p3_g3) MOD n;
                        v3 <= (-m1 * g1 + m2 * p2_g2 + m3 * g3) MOD n;
                        v4 <= (-m1 * g1 + m2 * p2_g2 + m3 * p3_g3) MOD n;
                        v5 <= (-m1 * p1_g1 + m2 * g2 + m3 * g3) MOD n;
                        v6 <= (-m1 * p1_g1 + m2 * g2 + m3 * p3_g3) MOD n;
                        v7 <= (-m1 * p1_g1 + m2 * p2_g2 + m3 * g3) MOD n;
                        v8 <= (-m1 * p1_g1 + m2 * p2_g2 + m3 * p3_g3) MOD n;
                     end if;
                   end process;        
end arch;