Project - FND Controller

Shaaqq·2023년 10월 21일
0

프로젝트(반도체)

목록 보기
1/4
post-thumbnail

▋ 개요

프로젝트명 : FND 컨트롤러
분류 : 토이 프로젝트 (개인)
시작/제작 기간 : 23.08.20 (1일)
진행상태: 스펙 정의 - 기능 검증 - RTL 생성 - 시뮬레이션 진행중 - 합성 및 배선
사용 툴: Vivado, Xcelium, Genus, Innovus
사용 도구: FPGA


▋ 설명

▶ 개발 동기

Anode - Cathode 동시 지원 IC의 필요성

  • 기존의 컨트롤러는 Anode와 Cathode 중에서 하나만 지원합니다. 실제 FND를 구매하여 사용할 때 애노드인지 캐소드인지에 따라서 사용하는 IC가 호환이 안되는 경우도 발생했습니다. 애노드-캐소드 전환이 빠르게 되는 7447 / 4511 시리즈 같은 저스펙 IC가 필요하다 생각하여 진행하였습니다.

▶ 스펙

Anode / Cathode란?

  • FND LED는 애노드(Anode)와 캐소드(Cathode)의 2가지 타입 존재합니다.
  • 애노드는 VCC가 공통 단자로 묶여있습니다.
  • 캐소드는 GND가 공통 단자로 묶여있습니다.

▶ 핀 기능

1) DATA

  • 데이터를 입력 받습니다.

2) ENABLE

  • FND를 작동할지 선택합니다.

3) AC_SEL

  • 신호을 받아 Anode / Cathode 중에서 선택합니다.

4) COM, SEGMENT

  • DATA에 따른 FND를 출력합니다.

▶ 블록도


▋Code

  • FND_Controller.v
`timescale 1ns/1ps

module FND_Contoller (DATA, ENABLE, AC_SEL, COM, SEGMENT);
    
    input [3:0] DATA;
    input ENABLE;
    input AC_SEL;
    output reg COM;
    output reg [7:0] SEGMENT;

    parameter ANODE_MOD = 0;
    parameter CATHODE_MOD = 1;
    reg mode;

    always @(*) begin
        case (AC_SEL)
            1'b0: mode <= ANODE_MOD;
            1'b1: mode <= CATHODE_MOD;
            default: mode <= ANODE_MOD;
        endcase
    end

    always @(*) begin
        if(ENABLE) begin
            case (mode)
                ANODE_MOD: begin
                    COM <= 1'b1;
                    case (DATA)
                        4'd0: SEGMENT <= 8'b11000000; //0
                        4'd1: SEGMENT <= 8'b11111001; //1
                        4'd2: SEGMENT <= 8'b10100100; //2
                        4'd3: SEGMENT <= 8'b10110000; //3
                        4'd4: SEGMENT <= 8'b10011001; //4
                        4'd5: SEGMENT <= 8'b10010010; //5
                        4'd6: SEGMENT <= 8'b10000010; //6
                        4'd7: SEGMENT <= 8'b11111000; //7
                        4'd8: SEGMENT <= 8'b10000000; //8
                        4'd9: SEGMENT <= 8'b10010000; //9
                        default: SEGMENT <= 8'b10111111;
                    endcase
                end
                CATHODE_MOD: begin
                    COM <= 1'b0;
                    case (DATA)
                        4'd0: SEGMENT <= 8'b00111111; //0
                        4'd1: SEGMENT <= 8'b00000110; //1
                        4'd2: SEGMENT <= 8'b01011011; //2
                        4'd3: SEGMENT <= 8'b01001111; //3
                        4'd4: SEGMENT <= 8'b01100110; //4
                        4'd5: SEGMENT <= 8'b01101101; //5
                        4'd6: SEGMENT <= 8'b01111101; //6
                        4'd7: SEGMENT <= 8'b00000111; //7
                        4'd8: SEGMENT <= 8'b01111111; //8
                        4'd9: SEGMENT <= 8'b01101111; //9
                        default: SEGMENT <= 8'b10111111;
                    endcase
                end
            endcase 
        end
        else begin
            case (mode)
                ANODE_MOD: begin
                    COM <= 1'b1;
                    SEGMENT <= 8'b01111111;
                end
                CATHODE_MOD: begin
                    COM <= 1'b0;
                    SEGMENT <= 8'b10000000;
                end
            endcase
        end
    end       
endmodule
  • FND_Controller_tb.v
`timescale 1ns/1ps

module FND_Contoller_tb;
    
    reg [3:0] DATA;
    reg ENABLE, AC_SEL; 
    wire COM;
    wire [7:0] SEGMENT;

    FND_Contoller fnd1(DATA, ENABLE, AC_SEL, COM, SEGMENT);

    initial begin
        #10 DATA <= 4'b0110;
        #10 ENABLE <= 1'b1;
        #10 AC_SEL <= 1'b1;
        #10 DATA <= 4'b0011;
        #10 AC_SEL <= 1'b0;
        #10 ENABLE <= 1'b0;
        #10 DATA <= 4'b101;
        #10 ENABLE <= 1'b1;
        #10 $finish;
    end
endmodule

▋Test

▶ Simulation

  • Waveform
  • Block Diagram

▶ Synthesis

▶ PnR


▋결론

양방향 FND 사용 가능합니다.

  • 애노드, 캐소드 세그먼트 2개를 사용하여 동작 테스트 하였으며 자신의 세그먼트가 애노드인지 캐소드인지 연결을 통해 데이터시트를 안보고도 확인할 수 있었습니다. 또한 쉬운 구조로 내부 보완을 한다면 7447 시리즈를 대체할 수 있다고 생각합니다.

  • Youtube:
  • github:
profile
개인 공부 겸 포트폴리오 사이트

0개의 댓글

관련 채용 정보