Verilog/기본모듈 및 이론

Day 5 - 책 이론 + FSM

onthejobtrain 2024. 6. 17. 22:58

이론

  1. 동기식: always @(posedge clk) if(reset) —> 좀 더 안정적임 그래서 고주파회로에서 많이 사용됨
  2. 비동기식: always @(posedge clk,negedge reset) if(reset) —> 상대적으로 덜 안정적이지만 많이 사용되고 있음

Blocking vs NonBlocking

  1. Blocking: 현재할당문의 실행이 완료된 후 다음 할당문이 실행되는 순차적 흐름을 가짐
  2. NonBlocking: 나열된 할당문들이 순차적 흐름에 대한 Blocking 없이 정해진 할당스케줄에 의해 값이 할당 (우변이 동시에 평가된 후 문장의 나열 순서 또는 지정된 지연값에 따른 할당 스케줄에 의해 좌변의 변수에 값이 갱신된다.)

 

join: process가 모두 끝나면 다음 코드 실행.

join_any: process 중 하나만 끝나도 다음 코드 실행.

join_none: process가 모두 실행 후 process의 끝나는 것과 상관없이 다음 코드 실행

 

생성문 : 많은 모듈 인스턴스를 위해 사용하는 문법이다.

 

function VS task

MUX 만들 때 case 문 말고 if else if 문 사용시에는 우선순위를 줄 수 있다.

다수의 always 블록에서 동일한 reg변수에 값을 할당하지 않는다. → race condition

FSM

무어 머신 :

출력이 플립플롭들의 "현재 상태"들만의 함수로 구성되는 상태 머신이다. 

 

밀리머신:

현재 상태뿐만 입력 변수가 무엇이냐에 따라 달라지는 상태 머신인데, 같은 상태일지라도 입력에 따라 달라지는 것을 의미한다. 

과제

여기서 counter_next = 0; 으로 넣어서 클리어를 구현했는데

그전에 counter_reg =0; 하니까 오

류가 많이 뜸 → 다른 always 문에서 같은 변수의 값을 조정하여서

upcounter.v
0.01MB

 

 

 

'Verilog > 기본모듈 및 이론' 카테고리의 다른 글

Day 7 - UART_Rx  (0) 2024.06.19
Day 6 - FSM, UART_Tx  (0) 2024.06.17
Day 4 - Sequential Logic  (1) 2024.06.17
Day3 - COUNTER CIRCUIT  (0) 2024.06.17
Day2 - FULL ADDER, FND  (0) 2024.06.17