信号无法在VHDL中初始化为整数值

时间:2017-01-16 17:19:56

标签: vhdl fpga

在下面的代码中,我将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;

1 个答案:

答案 0 :(得分:0)

首先,我想建议在端口映射上使用std_logic_vectorstd_logic开始的一些事情。当你有不同的模块甚至必须连接Verilog / VHDL / SystemVerilog时,它会更容易。在接口上使用时钟也可以使运行更顺畅,并使调试更容易。

现在,您应该意识到模拟不是FPGA的真实模拟,但Xilinx工具会尽力而为。在FPGA中,有一个信号可以通过所有逻辑上电,GSR或全局置位/复位。该信号指示每个线/寄存器/叶/单元将如何初始化为。

使用由GSR设置的初始值时,您应始终注意的一个问题是GSR是一个异步事件,即不考虑时钟而发生。

一般来说,应该将值初始化为您在声明中指定的值,但是因为它是模拟(并使用vivado的引擎),它可能无法模拟您的想法。 如果您使用Xilinx进行综合,还要注意初始值不是综合标准的一部分,工具应该将值放在LUT中。然而,在您进行模拟的同时,这些工具将尝试表现为FPGA,但它只会模拟您提供的刺激。 这可能是你的问题,因为vivado模拟器比ISE好一点(虽然他们仍然使用相同的代号,vivado引擎有改进)。

为了解决这个问题,我建议你有一个简单的重置条件来决定你的初始值应该是多少。另请注意,Xilnix标准是保持〜5us的重置。