Encryption VHDL合成,无法使代码可合成
我有一些关于VHDL语言的代码,这段代码包含一些加密/解密操作。请帮助我使这段代码可以合成,因为Xilinx IDE告诉我 第82行:运算符必须具有常量模操作数。 这是我的密码。也许你希望我如何重构它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
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;