Kraklog

Day21. 4bit 7-segment, 16bit register, 2bit Counter 본문

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

Day21. 4bit 7-segment, 16bit register, 2bit Counter

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

프로그램 : Quaturs Prime lite edition 18.1

사용문법 : Verilog 2001

보드 : DE1-SOC

 

 

Day19. 3bit 7-Segment 이전글 (링크)

module seven_segment_cntrl (
  input   [3: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.  
    4'd1 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b011_0000; //7'h30;
    4'd2 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b110_1101; //7'h6D;
    4'd3 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b111_1001; //7'h79;
    4'd4 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b011_0011; //7'h33;
    4'd5 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b101_1011; //7'h5B;
    4'd6 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b101_1111; //7'h5F;
    4'd7 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b111_0010; //7'h72;
    4'd8 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b111_1111; //7'h7F;
    4'd9 :  {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b111_1011; //7'h7B;
    4'd10 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b111_0111; //7'h77;
    4'd11 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b001_1111; //7'h1F;
    4'd12 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b100_1110; //7'h4E;
    4'd13 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b011_1101; //7'h3D;
    4'd14 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b100_1111; //7'h4F;
    4'd15 : {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b100_0111; //7'h47;
    default: {seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_g} = ~7'b111_1110; //7'h7E;
  endcase
end

  
endmodule

 

16bit register

module reg16 (
  input               clk     ,
  input               sclr_n  ,
  input               clk_ena ,
  input       [15:0]  datain  ,
  output  reg [15:0]  reg_out  
);

always @(posedge clk) begin
  if (clk_ena) begin
    if(!sclr_n)
    reg_out = 16'd0;
    else 
    reg_out = datain;
  end  
end
  
endmodule

module tb_reg16 ();
  reg   clk     ;
  reg   sclr_n  ;
  reg   clk_ena ;
  reg  [15:0] datain  ;
  wire [15:0] reg_out ;
  
  reg16 uReg16(
    .clk     (clk    ),
    .sclr_n  (sclr_n ),
    .clk_ena (clk_ena),
    .datain  (datain ),
    .reg_out (reg_out)
  );

  initial begin
    clk = 0;
    forever 
    clk = #20 ~clk;
  end

  initial begin
    clk_ena = 1'b0;
    sclr_n = 1'b0;
    datain = 16'h1F1F;
    #40 ; clk_ena = 1'b1;
    #40 ; sclr_n = 1'b1;
    #40 ; datain = 16'h4567; clk_ena = 1'b0;
    #40 ; clk_ena = 1'b1;
    #40 ; sclr_n = 1'b0;
  end

endmodule

module counter (
  input              clk       ,
  input              aclr_n    ,
  output  reg [1:0]  count_out  
);
  always @(posedge clk, negedge aclr_n) begin
    if(!aclr_n)
      count_out = 2'b00;
    else
      count_out = count_out + 1 ;
  end
endmodule

module tb_counter ();
  reg         clk       ;      
  reg         aclr_n    ;
  wire [1:0]  count_out ;

  counter uCounter (
    .clk       (clk      ),
    .aclr_n    (aclr_n   ),
    .count_out (count_out)
  );

  initial begin
    clk = 0;
    forever clk = #20 ~clk;
  end

  initial begin
    aclr_n = 1'b0;
    #40 aclr_n = 1'b1;
  end
endmodule

 

728x90

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

Day23. Simple UART TX,7-seg button&clock  (0) 2023.07.28
Day22. mult control, multiplexer 8x8  (0) 2023.07.28
Day20. 7-segment  (0) 2023.07.28
Day19. Function Counter  (0) 2023.07.28
Day18. my_rotate  (0) 2023.07.28