본문 바로가기
Digital Logic/FPGA

[FPGA/Digital 회로 설계] 'WaveDrom'으로 Timing diagram 쉽게 그리기

by 고뭉나무 2021. 5. 31.

FPGA/Digital 회로 설계를 할 때, Timing diagram을 참 많이 그립니다.

모든 신호가 clk를 기반으로 이루어지죠.

 

그래서 이번 시간에는 Timing diagram을 쉽게 구현할 수 있는 프로그램 'WaveDrom'에 대해 소개하겠습니다.

 

WaveDrom

https://wavedrom.com/

 

프로그램 결과 - Timing diagram

백문이 불여일견, 어떤 Timing diagram이 나오는 지 먼저 보겠습니다.

WaveDrom의 Timing diagram

기본 clock은 물론 edge 표시도 되며, 0과 1의 표시, 색상 입히기, 중간생략, x 값 표시 등이 가능하다.

왠만한 timing 표시가 다 가능하여 아주 좋다 :)

 

프로그램 실행 방법

프로그램을 실행하는 방법은 2가지가 있다.

1) 웹사이트로 접속하여 사용 (위의 사이트에서 'Editor' 클릭)

2) exe 파일 다운받아서 사용

 

2)번의 방법은 아래와 같다.

https://github.com/wavedrom/wavedrom.github.io/releases

 

github에서 사용자 PC 환경에 맞는 파일을 다운 받고

아래 exe 파일 실행을 한다.

 

코딩 방법

아래 예시를 통해 이해하면 금방 이해할 수 있다. (원체 코드가 쉽게 구현되어 있다!)

 

Timing diagram

WaveDrom의 Timing diagram

Source code

{signal: [
  {name: 'clk', wave: 'p.........P.......'},
  {name: 'rst', wave: '1.01......|.......'},
  {name: 'i_run', wave: '0...10....|.......'},
  {name: 'i_num_cnt', wave: 'x...50....|.......', data:["100"]},
  {name: 'o_idle', wave: '1....0....|...1...'},
  {name: 'o_running', wave: 'x..0.1....|..0....'},
  {name: 'o_done', wave: 'x..0......|..10...'},
  {name: 'c_state', wave: '6....9....|..76...', data:['IDLE', 'RUN', 'DONE', 'IDLE']},
  {name: 'is_done', wave: 'x..0......|.10...'},
  {name: 'count', wave: 'x..3..3333|333....', data:['0','1','2','3','4','98','99','0']},
]}
  • 기본 Positive clock: p, 기본 Negative clock: n (여기에 edge 추가는 대문자)
  • 한 주기는 clk 하나(점선)
  • 이전 상태를 유지하려면 '.' , 원하는 주기 만큼 갯수 사용
  • signal ON: '1', signal OFF: '0'
  • 중간 생략: '|'
  • X 상태(빗금): 'x'
  • 데이터 상태: '숫자(2~9)', 숫자 값에 따라 상태의 색깔이 다르며 뒤에 data: 를 통해 안에 내용 채움

WaveDrom_데이터 상태

{signal: [
  {name: 'i_num_cnt', wave: 'x...2....0....|.......', data:["100"]},
  {name: 'i_num_cnt', wave: 'x...3....0....|.......', data:["100"]},
  {name: 'i_num_cnt', wave: 'x...4....0....|.......', data:["100"]},
  {name: 'i_num_cnt', wave: 'x...5....0....|.......', data:["100"]},
  {name: 'i_num_cnt', wave: 'x...6....0....|.......', data:["100"]},
  {name: 'i_num_cnt', wave: 'x...7....0....|.......', data:["100"]},
  {name: 'i_num_cnt', wave: 'x...8....0....|.......', data:["100"]},
  {name: 'i_num_cnt', wave: 'x...9....0....|.......', data:["100"]},
]}

 

이상 WaveDrom 소개 끄읏~!

반응형

댓글