2016-09-13 2 views
0

Nexys4 FPGA에 스톱워치 프로그램을 작성하고 있습니다. 스톱워치를 시작, 중지 및 재설정 할 수 있지만 증가 기능을 구현하는 데 문제가 있습니다. 증가 기능은 버튼을 누르면 눌러지면 1 밀리 초 단위로 시계가 증가합니다. 따라서 7 세그먼트 디스플레이에 1 : 002가 표시되고 증가 버튼을 누르면 디스플레이에 1 : 003이 표시됩니다. 상태 2'b11가 증가이고 중심점이 상태 머신에서 오는버튼을 누를 때 4 비트 카운터를 1 비트 씩 증가시키는 방법

always @ (posedge (clk), posedge(rst)) 
begin 


if (rst == 1'b1)begin 
     Dig0 <= 4'b0000; 
     Dig1 <= 4'b0000; 
     Dig2 <= 4'b0000; 
     Dig3 <= 4'b0000; 
    end 

//increment if inc 
else if(state == 2'b11)// && Dig3 < 4'b1001)begin 
begin 
    Dig0 <= Dig0 + 4'b0001; 
    state <= 2'b00; 
end 


//only continue if Cen is 01 & not inc 
else if(Cen == 2'b01)begin 

    //add 1 to first digit up till 9 
    Dig0 <= Dig0 + 1'b1; 

    //reset if == 10  
     if(Dig0 > 4'b1001)begin 
      Dig0 <= 4'b0000; 

      //add 1 to second digit (when first resets) up till 9 
      Dig1 <= Dig1 + 1'b1; 
      end 
      //reset if == 10 
      if(Dig1 == 4'b1010)begin 
       Dig1 <= 4'b0000; 

       //add 1 to third digit (when second reset) up till 9 
       Dig2 <= Dig2 + 1'b1; 
       end 
       //reset if == 10 
       if(Dig2 == 4'b1010)begin 
        Dig2 <= 4'b0000; 

        //add 1 to fourth digit (when third reset) up till 9 
        Dig3 <= Dig3 + 1'b1; 
        end 
        //reset if == 10 
        if(Dig3 > 4'b1001)begin 
         Dig3 <= 4'b0000; 

        end   
    end 

2'b01 횟수이며, 2'b00 중지하고, 다음은 카운터 내 코드의 조각이다. 나는 그것을 단지 하나의 비트 증가시키는 방법을 이해할 수 없다. 증가 할 때마다 영원히 중요합니다. 어떤 아이디어?

덕분에 상태 기계 코드없이

+2

카운터 1 개를 가지고 숫자를 디스플레이에 표시하는 것이 더 쉬울까요? 또한 코드 들여 쓰기를 정렬하면 버그를 읽고 쉽게 파악할 수 있습니다. – Morgan

+0

모건이 말했듯이 들여 쓰기를 수정하십시오. – Moberg

답변

0

단지 내가 단지 문제에 대한 추측을 할 수있다. 추측을 따르기 위해 상태 머신 코드를 게시해야합니다.

그러나 카운터가 계속 증가 할 가능성이 가장 큰 이유는 상태가 2'b11 인 동안 Cen도 높음 (2'b01)이기 때문입니다.

Cycle 1) - state == 2'b11 , Cen == 2'b01 
      Dig0 +1 , state = 0 

Cycle 2) - state = 0 , Cen == 2'b01 
       goes to else clause and the counter continues to increment 
       as long as Cen is 2'b01 

해결해야 할 문제가 거의 없습니다.

1) 증분 섹션 (상태 = 2'b11)에서 Dig0을 증가 (9 번 이상) 할 때 다음 4 분의 1 자리까지 롤오버하게되므로 4 자리 숫자 (Dig0-3)를 모두 확인하고 증가시켜야합니다. 숫자 등.

2) 단일 항상 블록에서 상태 시스템 변수를 업데이트하는 것이 좋습니다. 그래서 문장 state = 2'b0을 상태 머신으로 옮기는 것이 더 좋습니다.

3) 또한 의견에서 이미 제안한 것처럼 하나의 카운터를 가지고 숫자를 해독 할 수 있습니다.

관련 문제