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)来自哪里?