Vhdl 变量赋值和可综合代码

Vhdl 变量赋值和可综合代码,vhdl,fpga,synthesize,Vhdl,Fpga,Synthesize,只需编写如下代码: if(rising_edge(clk)) then temp(0):="001"; temp(1):="011"; temp(2):="101"; temp(3):="000"; temp(0):=temp(3)xor temp(5); end if 对于上面的例子,所有这些变量赋值都将在1个时钟周期内完成,这是非常不实际的。在行为模拟中,它工作得很好,但在后期合成中,它是一团糟的。我可以添加一个延迟或类似wait的东西(wait语句

只需编写如下代码:

if(rising_edge(clk)) then
    temp(0):="001";
    temp(1):="011";
    temp(2):="101";
    temp(3):="000";
    temp(0):=temp(3)xor temp(5);
end if

对于上面的例子,所有这些变量赋值都将在1个时钟周期内完成,这是非常不实际的。在行为模拟中,它工作得很好,但在后期合成中,它是一团糟的。我可以添加一个延迟或类似wait的东西(wait语句是不可合成的)来让它等待直到变量在跳到下一行之前得到它的值吗?

在一个时钟周期内完成所有这些事情很简单。硬件速度非常快,FPGA的时钟频率相对于处理器来说并没有那么高


由于您使用的是变量,因此会立即使用中间结果。如果想要更明确的延迟,可以使用信号。上述带有信号的代码将使用上一个上升沿的
temp(3)

对于合成,您不能进行等待等延迟。合成中定义明确、可控的延迟只能通过流水线实现(时钟周期作为延迟单位)。

你说的“混乱”是什么意思?结果是什么样的?在你发布的代码中,temp(5)来自哪里?