避免循环展开以在verilog

时间:2017-11-23 12:26:09

标签: loops verilog execution sequential

我需要在verilog中按顺序执行一组代码 问题是我试图使用for loop / generate for循环进行循环。在for循环中,我坚信循环展开会发生,并且每件事都是并行发生的。能否请您建议如何实现for循环的顺序执行,以便我可以应用相同的概念来执行重复过程?或者是否有其他技术可用于实施顺序程序?我正在使用UART传输多字节数据的过程。

1 个答案:

答案 0 :(得分:0)

在硬件中实现顺序过程的常用技术是使用case语句构建状态机。

  integer state, next_state;
  parameter S0 = 0, S1 = 1, S2 = 2;
  always @(posedge clock) state <= next_state;
  always @(*)
     case(state)
       S0: begin
           // ... code for sequence 0
           next_state = S1;
           end
      S1: begin
           // ... code for sequence 1
           next_state = S2;
           end
      S2: begin
           // ... code for sequence 2
           next_state = S0;
           end
      endcase

但是对于数据传输,这是一种非常低效的硬件使用。将您的数据视为工厂装配线上的汽车。虽然汽车在制造过程中经历了一系列连续的阶段,但工厂的每个阶段都在不同的汽车上经历相同步骤的重复系列,每个阶段并行工作。这就是你应该如何将硬件描述为综合工具。刚刚开始出现一些工具,它们采用顺序描述并对其进行并行化,但这些工具目前还远未普及。