오늘은 맑음

module 사이의 데이터 전달 방법 본문

Digital logic

module 사이의 데이터 전달 방법

자전거 타는 구구 2019. 11. 30. 23:54
반응형

 verilog를 사용하여 module을 설계할 때 고려해야 할 점 중 하나가 각자 다른 모듈을 설계할 때 서로 데이터를 전달하는 방식에 있다. verilog는 software적인 개념인 모든 함수가 sequential하게 동작하는 것과는 다르게 모든 module이 clock이라는 매개체를 통해 동시에 동작하기 때문에 design할 때 고려해 주어야 할 것이 많다.

 특히 서로 다른 모듈에서 data를 전달할 때 쉽게 두 가지 방식으로 데이터를 전달할 수 있다.

 

1. 어떠한 동작을 수행한 후 데이터를 그냥 출력시킨다.

2. hand shake신호를 사용하여 동작이 종료되었음을 알림 ex) axi bus

 

 1번을 택하는 경우 내가 설계한 모듈의 데이터를 받는 모듈을 설계하는 다음 사람에게 정보를 알려줘야 한다. 몇 사이클만에 내 모듈의 동작이 종료되는지 알려주지 않으면 다음 모듈의 설계자는 정확한 데이터를 받아들일 수 없다.

 2번을 택하는 경우 어떠한 동작이 종료되었을 때 다음 모듈에게 데이터를 보낼 수 있다는 신호를 전달 후 데이터를 전달하는 방식이다. 이 경우 안전하게 정확한 데이터를 전달할 수 있다. 하지만 신호를 추가해주게 됨으로써 소스를 더 사용하게 된다.

 강사님께 들은건데 보통 1번을 택하며 이유는 귀찮아서...라는 답변을 들었다

 

추가) 2021-04-18

1번의 특성이 필요한 곳이 있고 2번의 특성이 필요한 곳이 있다.

1번의 경우 입력 데이터가 끊임없이 들어오는 경우를 예로 들 수 있다.

데이터가 처음부터 끝까지 끊임없이 들어오는 경우 출력되는 데이터도 한 번 나가기 시작하면 입력 데이터가 끊기기 전까지 계속 출력되기 때문에 hand shake 신호가 필요 없다.

예를 들면 Display 신호 등이 있다.

 

2번의 경우 데이터를 확실하게 받았음을 확인해야 하는 곳에서 주로 사용한다.

예를 들면 CDC가 있다.

 

반응형

'Digital logic' 카테고리의 다른 글

Metastability/Metastable state  (0) 2019.12.04
fpga와 asic설계시 유의사항  (0) 2019.12.01
verilog hdl 설계시 주의할 점(1)  (0) 2019.11.30
Timing analysis  (2) 2019.11.30
full adder/전가산기  (0) 2019.03.15
Comments