티스토리 뷰

 

지난 시간에는 Modelsim을 이용하여 간단한 Verilog code를 작성해보고 simulation까지 진행했었다.

간단한 combinational logic을 설계하였기에, timing diagram을 그릴 필요까지는 없었다.

그러나, 실제 우리가 다뤄야 할 회로들은 대부분 sequential logic과 combinational logic이 복잡하게 얽혀져 있다.

실제로 timing을 면밀히 고려하지 않아, 설계 의도대로 회로가 동작하지 않고 문제를 일으키는 경우가 종종 있다.

 

clock 신호에 동기화되어 cycle마다 신호들이 어떻게 변화해야 하는지

어떤 timing에 low에서 high로 값이 천이하고

혹은 변화하지 않고 특정 시간까지 값을 유지해야 하는지 등등

꼼꼼하게 timing diagram으로 정리해 두지 않으면,

반드시 문제를 일으키기 마련이다.

 

timing diagram을 그리지 않고 디지털 순차 회로를 만든다는 것을 어떤 것과 비교할 수 있을까?

마치 순서도(flowchart)를 그리지 않고, 알고리즘을 짜는 것과 비슷하다고 할까?

아니면 설계도 없이 복잡한 기계를 만들려고 시도하는 것과 유사하다고도 볼 수 있겠다.

 

여기서 나는 손쉽게 timing diagram을 그릴 수 있는 tool을 소개하고자 한다.

이에 앞서 간단히 고전적인 방법으로 그리는 연습을 먼저 해보자.

 

그럼, 어떻게 그리면 되느냐?

바로 엑셀(MS Excel)을 사용하는 것이다.

 

실제로 일본에서 오신 엔지니어분들은 엑셀을 사용해서 timing diagram을 아주 기똥차게 완성해낸다.

모든 일본분들이 그런 것은 아니겠지만

내가 겪어본 분들은 대부분 꼼꼼하게 설계 전에 엑셀 작업부터 시작하고는 했다.

혀를 내두를 정도로 방대하고 오래 걸리는 작업이지만,

엑셀로 timing diagram을 완성하기만하면 RTL 설계는 엄청난 속도로 끝내시는 것을 자주 목격했다.

 

쉬운 길을 걸어가기 전에 정공법을 먼저 익혀두자.


 



거창하게 엑셀로 만드는 timing diagram이라고 부제를 잡아 봤지만,

사실 그렇게 어려운 일도, 복잡한 것도 아니다.


먼저 각 셀의 width를 적절히 조절하고

clock을 그려주는 것부터 시작하면 된다.


전체 셀에 적용하기 위해

Ctrl + a를 눌러서 모든 셀을 선택한다.


Alt+o+c+w 단축키를 사용하면

셀의 너비를 결정할 수 있다.

적절히 조절하자.

여기서는 3으로 값을 줘서 너비를 조정하였다.




Clock을 그리는 것은 어떻게 보면 단순 노가다 작업이 필요하다.

엑셀의 테두리 선 그리기를 사용하여 아래 그림과 같이 신호를 그리고 복사/붙여넣기를 하는 방식으로 완성한다.





이제 신호를 추가해주면 되는데,

이 예제에서는 간단히 Hsync와 Vsync에 맞춰서 4개의 data channel로 clock과 동기화된

data가 들어온다고 가정하겠다.


그러면 아래와 같이 timing diagram이 그려진다.



Horizontal 방향으로 24의 size를 갖고 vertical 방향으로 16의 size를 갖는 data stream이 들어온다고 생각하자.

clock과 동기화된 Hsync와 Vsync에 맞춰서 data는 뒷단으로 흐를 것이다.

H line당 data가 24개씩 출력되고 있음을 상단의 timing diagram을 통해 확인 가능하다.

또한, Hsync가 도합 16 line 출력되면 Vsync가 low로 내려갈 것으로 예상할 수 있다.


본 예제에서는 몇몇 신호들만 기술하였음에도 작성에 드는 시간 및 노력이 절대로 적지 않았다.

실제 프로젝트에서 그려야 할 timing diagram의 신호들은 최소 수십 개기 때문에

항상 엑셀을 사용해서 작업해야 한다면, 정말 고역일 수밖에 없다.


이러한 수고를 덜어주기 위한 고마운 tool인

WaveDrom을 소개한다.





상단의 그림은 WaveDrom 홈페이지에 접속하면 가장 먼저 만나볼 수 있는 메인 화면이다.

어디서든 timing diagram을 쉽게 그릴 수 있다는 설명이 인상 깊다.


사실 이번 블로그 콘텐츠를 기획하게 된 것도

저번 Modelsim 포스팅과 무관하지 않다.

[Digital 회로 설계] ModelSim으로 간단히 simulation 해보기(1/2)

[Digital 회로 설계] ModelSim으로 간단히 simulation 해보기(2/2)



수상한 책임님의 비밀 2편!!


일사천리로 설계를 완성하시던 책임님의 비기 중의 하나가 바로 오늘 소개하는 WaveDrom이다.

몇 달 전, 급하게 line memory를 사용하여 5x5 kernel을 구현할 일이 있었는데,

골똘히 엑셀을 한땀한땀 장인정신을 발휘하며 그리고 있는 나에게 책임님이 스윽 다가오셨다.


"어제 잠이 안와서, 간단히 타이밍 다이어그램 하나 그려서 메일로 보내놨어."


"네??"


서둘러 메일함을 클릭해보니,

그럴싸한 timing diagram 파일이 하나 전송되어 있는 것이었다.


엑셀도 아닌 것이

그림판으로 그린 것도 아닌 듯했다.

정말 결과물이 그럴싸! 했기 때문이다.


책임님은 아이디어가 떠오르시면 WaveDrom으로 timing diagram부터 그리신다고 했다.

그러면 대략 이게 가능할 지 안될 지 깜냥이 나온다나


직접 사용해보니, 정말 쉽고 편했다.

UI도 단순하고, 결과물은 깔끔하다.

이미지 형태로 출력도 해주고, 현재 setting을 저장해주기도 한다.

단점을 그리 찾을 수 없는 오픈 소스 프로그램이랄까.


자, 칭찬은 여기까지로 하고

어떻게 받고 설치하면 되는지부터 살펴보자.





먼저 WaveDrom을 다운로드 받기 위해 아래 링크로 접속한다.

WaveDrom 홈페이지로 이동


아래 download editor를 클릭하면, 다음과 같은 화면을 마주하게 된다.

본인의 운영체제 종류 및 bit(32/64)에 맞게 선택한 후 다운로드를 하자.



다운 받은 압축 파일을 풀면 아래와 같은 파일들을 확인할 수 있다.

본 프로그램은 따로 설치 과정 없이, 무설치로 실행이 가능하기 때문에 바로 실행시키면 된다.

(끝이다. 정말 너무 쉽지 않은가?)



더블 클릭을 해서 실행을 하면, editor 창이 다음과 같이 팝업된다.




다소 생소할 수 있는 첫인상에 너무 당황하지 말고

다음 chapter에서 직관적이고 손쉬운 사용법을 익혀보도록 하자.





가장 먼저 기본적인 구조에 대해서 살펴보면,

WaveDrom은 Json(JavaScript Object Notation)이라는 이름-값 쌍을 갖는 표준형 포맷으로 되어있다.

각signal은 배열 안에 객체로서 존재한다.

signal은 이름과 값으로 이루어져 있으며, 

{name: 'OOO', wave: '1....0.....1'}과 같은 형태를 갖는다.

여기에서 name 이후에 작은 따옴표로 적힌 부분이 신호명을 나타내며,

wave 이후에 작은 따옴표로 쌓인 부분이 timing diagram 형태로 변환되는 부분이다.

wave의 . 하나는 이전 state를 그대로 반복해서 1 주기만큼 추가해주는 명령어이다.


만약 {name:'test_data', wave ' 1...0...1...0...1'}으로 기술한다면, 다음과 같은 timing diagram을 얻게 된다.




 

앞서 살펴봤던 Excel을 이용한 timing diagram 작성과 비교해봤을 때,

들어가는 노력과 시간을 고려해보면 정말이지 혁신적인 방법이 아닐까 싶다.


자, 이제 앞서 작성했었던 24x16 size를 갖는 4 ch data stream과 Hsync, Vsync의 timing diagram을

WaveDrom을 사용하여 작성해보도록 하자.


▼ source code

1

2

3

4

5

6

7

8

9

{signal: [

  {name'clock', wave: 'Pp................'},

  {name'Hsync', wave: '01.....0.1.....0.1',phase:0.5},

  {name'Vsync', wave: '01................', phase:0.5},

  {name'Data_ch0', wave: 'x555555xx555555xx5', data: "0 4 8 12 16 20 24 28 32 36 40 44",phase:0.5},

  {name'Data_ch1', wave: 'x444444xx444444xx4', data: "1 5 9 13 17 21 25 29 33 37 41 45",phase:0.5},

  {name'Data_ch2', wave: 'x333333xx333333xx3', data: "2 6 10 14 18 22 26 30 34 38 42 46",phase:0.5},

  {name'Data_ch3', wave: 'x======xx======xx=', data: "3 7 11 15 19 23 27 31 35 39 43 47",phase:0.5},

]}

Colored by Color Scripter

cs



사용된 명령어를 살펴보면 

P : positive edge의 clock 생성. 화살표 기호로 표시

p : positive edge의 clock 생성.

phase : 값이 선언된 만큼 신호를 shift 한다.

= : 흰색 data packet

3 : 노란색 data packet

4 : 붉은색 data packet

5 : 파란색 data packet 

data : packet에 이름 지정


이외에도 다양한 옵션을 지원한다.

자세한 내용이 더 알고 싶으면, 아래 링크를 클릭하라.

WaveDrom 가이드 링크


결과는 아래와 같다.

아주 깔끔하다.




상단의 그림 파일은 WaveDrom에서 export 메뉴를 사용하여 저장한 것이다.

다음과 같은 다양한 메뉴를 지원하므로, 참고하길 바란다.

우측 하단 세 줄 모양을 클릭하면 서브 메뉴창이 열린다.




여기서 설명하고 있는 정도만 알고 있어도, 기본적인 timing diagram을 그리는 것은 전혀 문제가 없다.

지금까지 프리웨어이지만 나름 고급스러운 결과물을 얻을 수 있는 WaveDrom tool에 대해 살펴보았다.




 

 

인생은 타이밍일까?

그 때는 맞고 지금은 틀리다라는 말이 있듯이

상황에 따라, 혹은 환경에 따라서

그 타이밍이 맞을 수도 아닐 수도 있는 것이 우리들의 인생이다.


하지만 이 것은 확실하다.

디지털은 타이밍이다.

어떤 때는 이렇게 또 다른 때는 저렇게 결과가 나와서는 절대 안된다.

언제나 clock에 동기화되서 의도한대로 출력을 내보내줘야만 하는게 디지털 회로의 목적이다.


또한, 항상 타이밍을 잘 고려하여

신뢰성 있는 결과를 만들어 내는 회로를 설계하는 것이

디지털 회로 설계자의 숙명이다. 


- Fin.

댓글
공지사항