只需拥有这样的代码:
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个时钟周期内完成,这非常不实用。在行为模拟中,它工作得很好,但在后合成中,它搞砸了。我可以添加像延迟或类似等待(等待语句是不可合成的)来使它等待util变量在跳转到下一行之前得到它的值吗?
答案 0 :(得分:0)
在一个时钟周期内完成所有这些工作很简单。硬件速度极快,FPGA时钟频率相对于处理器而言并不高。
由于您使用的是变量,因此会立即使用中间结果。如果您想要更明确的延迟,可以使用信号。带有信号的上述代码将使用前一个上升沿的temp(3)
。
答案 1 :(得分:0)
对于综合你不能像等待一样延迟。合成中定义明确,可控的延迟只能通过流水线操作(时钟周期作为延迟单元)。