2017-11-23 26 views
0

Verilog에서 코드 집합을 순차적으로 실행해야합니다. 문제는 for 루프/for 루프를 사용하여 반복을 시도하는 것입니다. for 루프에서 나는 루프 언 롤링이 일어나고 모든 것이 병렬로 일어난다는 것을 강력히 믿는다. 반복적 인 프로세스를 수행하는 데 동일한 개념을 적용 할 수 있도록 for 루프의 순차 실행을 구현하는 방법을 제안 해 주시겠습니까? 또는 순차적 절차를 구현하기 위해 사용할 수있는 다른 기술이 있습니까? UART를 사용하여 여러 바이트의 데이터를 전송하는 프로세스를 사용하고 있습니다.Verilog에서 순차적 데이터 전송을 실행하기위한 루프 언롤 피하기

+0

verilog는 동시 언어입니다. 순차적으로 실행되는 유일한 것은 ** ** always 블록입니다. 'always' 블록은 스스로 실행됩니다. 생성 블록의 내부와 동일합니다. 잘못된 언어를 선택했습니다. Verilog에서는 * 순차 작업을 수행하기 위해 모든 것을 flops와 동기화해야합니다. – Serge

+0

이것에 대해서는 잘 모르겠지만 설명에 따르면, 소프트웨어가 아닌 하드웨어에 대해 말하는 것이 아닙니다. 그것이 사실이라면 Verilog가 이상적인 언어가 아닐 수도 있습니다. –

답변

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 

그러나 데이터 전송의 경우 이는 매우 비효율적 인 하드웨어 사용입니다. 데이터를 공장 조립 라인에서 자동차로 생각하십시오. 자동차가 제조 과정에서 순차적 인 일련의 단계를 거치지 만 공장의 각 단계는 각 단계가 병렬로 작동하면서 서로 다른 자동차에 대해 동일한 단계의 반복적 인 시리즈를 진행합니다. 이것이 하드웨어를 합성 도구로 설명하는 방법입니다. 순차적 설명을 취하여 병렬화하는 몇 가지 도구가 등장하기 시작했지만 지금은 일반적인 기능과는 거리가 멀습니다.