본문 바로가기
[Nexys4 DDR]

[Nexys4 DDR 프로젝트] Multi 7-Segment 구현

by choice1219 2019. 3. 10.

안녕하세요. VeriLog입니다. 


이번 시간에는 Nexys4DDR에 있는 7-segment 사용법에 대해서 배워보려고 합니다. 



지난 시간에 Behavioral Modeling 방법을 사용해 7-Segment Decoder를 만들어 보았습니다. 


하지만, 한가지 문제가 있었습니다. 바로, 임의의 숫자를 표시하면, 그 숫자가 모든 7-segment에 표시가 된다는 문제점 이었습니다. 


이는 모든 Cathode가 이어져 있기 때문입니다. 


이 문제점을 해결하기 위해서는, Anode를 켰다가 껐다가를 반복하면서 원하는 숫자를 표시해야합니다.



예를 들어 4개의 7-Segment에서 0123이라는 숫자를 표시하고 싶다면,


1. Anode[3] On, Others Off

2. Cathode —> 0표시

3. Anode[2] On, Others Off

4. Cathode —> 1표시

5. Anode[1] On, Others Off

6. Cathode —> 2표시

7. Anode[0] On, Others Off

8. Cathode —> 3표시

9. 1번부터 다시 반복


위의 과정을 사람의 눈보다 빠른 속도로 반복해야합니다. 


위의 과정을 Verilog로 구현하기 위해서는 Clock과 Count 방법을 사용해야합니다. 


Nexys4DDR은 100MHz의 내부 Clock을 가지고 있습니다. 이번 시간에는 내장 Clock을 이용해서 7-segment decoder를 설계해보겠습니다. 


먼저, 코드를 보시겠습니다.


1. Port Declaration



입출력 포트를 선언해주고, 7-Segment의 Anode와 Cathode를 reg 타입으로 변환해주는 부분입니다.


저희는 나중 Test를 위해서 4-bit 입력 [3:0] A, [3:0] B를 Switch에 할당할 예정이므로, input에 선언해주었습니다. 


clock은 Nexys4 DDR의 내부 클럭인 100MHz 클럭을 사용할 것입니다. 



2. 7-Segment Anode / Cathode Control



clock의 Falling Edge마다 카운트를 해서 카운트 값 200 마다 On이 되는 Anode를 설정해주는 부분입니다. 


뒤에 나오는 코드를 보시면 digit에 따라 켜지는 Anode가 달라집니다. 


또한, data는 7-segment에 표시할 data 값을 의미합니다. 



3. Anode / Cathode Decoding


마지막 부분은 Anode와 Cathode의 값을 Decoding 하는 부분입니다. 


data에 들어오는 4-bit 인풋 값에 따라, cathode의 켜지는 부분을 설정해줍니다.


또한, digit의 값에 따라, 켜지는 Anode를 설정해줍니다. 



4. Constraint 설정


Input

- clock      ->     100MHz

- [3:0] A    ->     SW3~0

- [3:0] B    ->     SW7~4


Output

- CA ~ CDP    ->    CA ~ CDP

- AN0~AN3    ->    AN0~AN3



위와 같이 설정을 하시면, A의 결과 값은 AN1번, B의 결과 값은 AN0 번에 표시가 되는 것을 확인하실 수 있습니다. 


코드는 아래 첨부 되어 있습니다.  질문이 있으시면 댓글로 남겨주세요. 


7-segment_verilog.zip