变量赋值和可综合代码

时间:2013-03-25 18:40:53

标签: 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个时钟周期内完成,这非常不实用。在行为模拟中,它工作得很好,但在后合成中,它搞砸了。我可以添加像延迟或类似等待(等待语句是不可合成的)来使它等待util变量在跳转到下一行之前得到它的值吗?

2 个答案:

答案 0 :(得分:0)

在一个时钟周期内完成所有这些工作很简单。硬件速度极快,FPGA时钟频率相对于处理器而言并不高。

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

答案 1 :(得分:0)

对于综合你不能像等待一样延迟。合成中定义明确,可控的延迟只能通过流水线操作(时钟周期作为延迟单元)。