在下面的代码中,我将cipher_temp2初始化为整数值1.但是当我模拟我的代码时,我看到cipher_temp2的值被初始化为0而不是。我无法弄清楚我哪里出错了。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ciphercalculation is
Port ( Msg_temp2 : in integer;
cipher : out integer);
end ciphercalculation;
architecture Behavioral of ciphercalculation is
CONSTANT e1: std_logic_vector(0 TO 2) := ('1', '0', '1');
CONSTANT Pk:integer:=377;
CONSTANT le:integer:=2;
Signal cipher_temp2:integer:=1;
begin
process(cipher_temp2,Msg_temp2)
begin
for i in 0 to le loop
if (e1(i)= '0') then
cipher_temp2<=((cipher_temp2*cipher_temp2) mod Pk);
else
cipher_temp2<=((cipher_temp2*cipher_temp2) mod Pk);
cipher_temp2<=((cipher_temp2*Msg_temp2)mod Pk);
end if;
end loop;
cipher<=cipher_temp2;
end process;
end Behavioral;
答案 0 :(得分:0)
首先,我想建议在端口映射上使用std_logic_vector
或std_logic
开始的一些事情。当你有不同的模块甚至必须连接Verilog / VHDL / SystemVerilog时,它会更容易。在接口上使用时钟也可以使运行更顺畅,并使调试更容易。
现在,您应该意识到模拟不是FPGA的真实模拟,但Xilinx工具会尽力而为。在FPGA中,有一个信号可以通过所有逻辑上电,GSR或全局置位/复位。该信号指示每个线/寄存器/叶/单元将如何初始化为。
使用由GSR设置的初始值时,您应始终注意的一个问题是GSR是一个异步事件,即不考虑时钟而发生。
一般来说,应该将值初始化为您在声明中指定的值,但是因为它是模拟(并使用vivado的引擎),它可能无法模拟您的想法。 如果您使用Xilinx进行综合,还要注意初始值不是综合标准的一部分,工具应该将值放在LUT中。然而,在您进行模拟的同时,这些工具将尝试表现为FPGA,但它只会模拟您提供的刺激。 这可能是你的问题,因为vivado模拟器比ISE好一点(虽然他们仍然使用相同的代号,vivado引擎有改进)。
为了解决这个问题,我建议你有一个简单的重置条件来决定你的初始值应该是多少。另请注意,Xilnix标准是保持〜5us
的重置。