Kraklog

Day20. 7-segment 본문

[Harman] 하만 반도체 설계/VerilogHDL

Day20. 7-segment

Krakens 2023. 7. 28. 08:28
728x90

프로그램 : Quaturs Prime lite edition 18.1

사용문법 : Verilog 2001

보드 : DE1-SOC

 

module seven_segment_cntrl (
  input   [2:0]    inp   ,
  output  reg      seg_a ,
  output  reg      seg_b ,
  output  reg      seg_c ,
  output  reg      seg_d ,
  output  reg      seg_e ,
  output  reg      seg_f ,
  output  reg      seg_g  
);

always @(*) begin
  case (inp)  //if displayed to segment, add '~' in front of 7'000_0000 for invert it.  
    3'b000 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = 7'b111_1110;
    3'b001 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = 7'b011_0000;
    3'b010 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = 7'b110_1101;
    3'b011 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = 7'b111_1001;
    default: {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = 7'b100_1111; 
  endcase
end

  
endmodule

module tb_seven_segment_cntrl ();
reg   [2:0]   inp   ;   
wire          seg_a ; 
wire          seg_b ; 
wire          seg_c ; 
wire          seg_d ; 
wire          seg_e ; 
wire          seg_f ; 
wire          seg_g ; 

seven_segment_cntrl uSeven_segment_cntrl(
  .inp    (inp  ),
  .seg_a  (seg_a),
  .seg_b  (seg_b),
  .seg_c  (seg_c),
  .seg_d  (seg_d),
  .seg_e  (seg_e),
  .seg_f  (seg_f),
  .seg_g  (seg_g)
);


initial begin
  inp = 3'd0;
  forever
  #50 inp = inp + 1;
end
endmodule

 

처음 7-segment를 다룰 떄 BCD 컨트롤러 라고 선언을 해줬는데, 왜 BCD인지 몰랐었다. (링크)

Segment는 캐소드, 애노드 방식에 따라 데이터 값을 다르게 주어야 하는데, 처음 사진과 같이 코드를 짜주면 원하는 숫자를 제외한 LED에 빛이 들어온다. 따라서 데이터 값을 반전해줄 필요가 있었다.

728x90

'[Harman] 하만 반도체 설계 > VerilogHDL' 카테고리의 다른 글

Day22. mult control, multiplexer 8x8  (0) 2023.07.28
Day21. 4bit 7-segment, 16bit register, 2bit Counter  (0) 2023.07.28
Day19. Function Counter  (0) 2023.07.28
Day18. my_rotate  (0) 2023.07.28
Day17. Mux4, Shifter  (0) 2023.07.25