Monthly Archives: December 2008

Synchronizer 시뮬레이션 문제

디지털 로직하는 사람들한테 타이밍 관련된 문제에서 가장 골치 아픈 것이 metastable 문제이라고 말씀 드렸었습니다. 사실, metastable을 피하는 방법은 예전에 한번 posting한 적이 있는데요.

요즘 IT-SoC의 온라인 강의를 듣다 보니 관련 내용이 있어서 간단한 팁을 하나 올립니다.

Metastable을 피하는 가장 머리가 편한 방법은 2개의 F/F을 직렬로 사용하는 2-flop 방법입니다. 저렴한 방법으로는 하나의 F/F을 사용하는 1-flop 방식도 있습니다만, 1-flop 방식은 첫 번째 F/F이 공교롭게 meta level에 걸리는 경우 뒷부분의 회로가 영향을 받아서 망가질 수 있는 단점이 있지요.

여하튼, 비동기적인 방법(stoppable clock과 같은 방식)을 사용하지 않는 경우에는 F/F을 부가하는 것이 가장 간단한 방법이라는 것이죠.

그런데, 1-flop이던 2-flop이던 F/F을 이용하여 동기화기(synchronizer)를 만들고 이 회로에 대한 타이밍 시뮬레이션 할 때, 동기화기로 사용한 F/F이 setup/hold timing을 만족하지 못하는 경우 F/F의 출력이 unknown으로 되어 전체 시뮬레이션이 망가지는 경우가 있다는 점이지요.

이 부분에 대하여 요즘 듣고 있는 강좌에서는 해당 Synchronizer를 instance할 때 특별한 이름(synchronizer)을 주고 이 부분에 대한 SDF를 조작해 주는 방법을 이야기했는데요.. 사실 좀 귀찮죠.. SDF 뽑은 다음에 조작하려면 손으로 하던지(설마요..^^;), scripting을 해야 하는데 말이죠.

쉬운 방법은 system_task를 사용하는 겁니다.

VerilogXL이나 NCverilog에서는 다음과 같은 명령이 있습니다. (Modelsim은 안써봐서 모르겠습니다.)

$disable_warnings(“timing”, hierarchy_path);

 

잠시 구글링 해보니 Modelsim에서는 다음과 같이 하면 되는 군요.

tcheck –off hierarchy_path

 

실제적으로 사용할 때는 synchronizer에 대하여 timing체크를 안하도록 하는 명령을 disable_path같은 곳에 주욱 나열하고 필요한 경우에 include해서 사용하는 거죠. 사실 이 disable path list는 false_path 잡을 때도 사용이 되겠지요.

`ifdef TIMING_SIM

`include “disable_path.v”

`endif

 

상당히 간단한 TIP입니다만, 모르면 고생하는 그런 내용이죠. ^^;

EDA Designline 선정 2008년 인기 설계 article들과 babyworm 선정 개인사

EDA design line에서 선정한 2008년 가장 인기 있었던 설계 관련 article들

 

읽어 본 Article 이 3개 밖에 없는 걸 보니 올해는 놀았군요. 그나마 기사의 내용이 제대로 기억나는 건 한편에 불과해요. 참 수고 많았어요. 여러 가지 잡일과 구현에 집중한 한 해를 보낸 2008년.

2008년은 개인적으로 상당히 많은 일이 있었습니다. (그래서, 글의 범주가 개인적인.. 으로 되었습니다. ^^;)

개인적으로는 한 아이의 아빠가 되었고, 짧은 용인 생활을 마치고 수원으로 이사를 했습니다. 아이와 안사람에게 좀 더 신경 써 주지 못하는 점은 항상 마음이 아픕니다.

업무에서는 이루고자 했던 목표를 거의 충실하게 수행되었습니다. 중요하게 생각하는 국책 과제의 첫 해를 기술적/심리적으로 의미 있게 수행하였고, 프로세서나 몇몇 엔진과 MPSoC 플랫폼에 있어서도 어느 정도 도전할 수 있는 수준에 올라왔습니다.

아쉬움도 많이 남습니다.

피로에 쪄들었고, 간단한 문제를 간과하였으며, 부지런하지 못하여 불명확한 지시를 내리고, 부정확한 결과에 “화”를 많이 내기도 했습니다. 나의 생각과 다른 이의 생각이 같지 아니한데, 한 해 동안 무언가에 쫓기듯 하게 허겁지겁 달려와서 옆을 잘 보지 못했습니다. 결과에 비하여 실질적인 반전을 노릴 만한 계기를 이루지도 못했습니다.

정치력이 부족한 것인지 모르겠습니다만, 충분히 경쟁력 있는 기술을 만들고, 이를 바탕으로 회사 전체의 분위기의 반전을 노리려고 했으나, 아직은 발판만 마련한 상태에서 상태에서 정치적 타격을 입었다는 점은 아깝습니다. 한 두 발자국 정도 남았는데 말이죠.

쉽게 생각해서 이런 일을 두 번째로 겪고 나니 ‘일상다반사’로 치부하고 그냥 툭툭 털고 일어나기에는 좀 아프군요. 가끔은 내가 한 선택에 후회를 할 때가 있는데, 연말이니 이런 생각이 드는 것이겠지요.

남은 2008년까지는 고민하겠습니다. 2009년에는 어떤 일이 생길지 기대가 됩니다만, 꽉 조여져 있는 나사를 반쯤 풀어놓을까 생각합니다. 성격상 가능할지 모르겠습니다만..

박사 과정 때 저의 은사님께서 ‘생활과 공부를 잘 합치는 것이 박사과정에서 배워야 할 일’이라고 말씀하셨는데, 배움이 부족해서 아직은 균형을 못 잡고 뒤뚱거린 것 같습니다. 괜한 조바심으로 힘들게 한 것 같아 회사 후배들한테도 미안하고요. ^^;

가끔은 느슨하게 흘러가도록 하는 것이 더 원활하게 진행될 수 있을 것이라 생각합니다. 정신건강을 위해서라도요.. ^^;