7-SEGMENT 베릴로그 코드 해석좀 부탁드립니다.

7-SEGMENT 베릴로그 코드 해석좀 부탁드립니다.

작성일 2023.02.22댓글 1건
    게시물 수정 , 삭제는 로그인 필요

베릴로그 공부중인데 처음부터 막혔습니다.
아래의 코드가 어떻게 동작하는 것인지 알려주실 분 계실까요...

module seven_seg(
input clk,
input resetn,
input [31:0] data
intput reg[7:0] segout,
output reg [7:0] segcom,
output [7:0] led_out);

 wire [7:0] seg1;
 wire [7:0] seg2;
 wire [7:0] seg3;
 wire [7:0] seg4;
 wire [7:0] seg5;
 wire [7:0] seg6;
 wire [7:0] seg7;
 wire [7:0] seg8;

 reg[14:0] clk_cnt;
 reg[2:0] com_cnt;

 bin2seg bin2seg_1 (.bin_data(data[31:28]), .seg_data(seg1));
 bin2seg bin2seg_2 (.bin_data(data[27:24]), .seg_data(seg2));
 bin2seg bin2seg_3 (.bin_data(data[23:20]), .seg_data(seg3));
 bin2seg bin2seg_4 (.bin_data(data[19:16]), .seg_data(seg4));
 bin2seg bin2seg_5 (.bin_data(data[15:12]), .seg_data(seg5));
 bin2seg bin2seg_6 (.bin_data(data[11:8]), .seg_data(seg6));
 bin2seg bin2seg_7 (.bin_data(data[7:4]), .seg_data(seg7));
 bin2seg bin2seg_8 (.bin_data(data[3:0]), .seg_data(seg8));

assign led_out = data[7:0];

always @ (negedge resetn or posedge clk)
begin
    if (!resetn)
    begin
     clk_cnt <= 15'd0;
     com_cnt <= 3'd0;
 end
 begin
    if (clk_cnt == 15'd16384)
    begin
     clk_cnt <= 15'd0;
     if (com_cnt == 3'd7) com cnt <= 3'd0;
     else com_cnt <= com_cnt + 3'd1;
    end
    else
    begin
      clk_cnt <= clk_cnt + 15'd1;
    end
 end
end

always @ (com_cnt or seg1 or seg2 or seg3 or seg4 or seg5 or seg6 or seg7 or seg8)
begin
  case (com_cnt)
   3'd0: begin
     segcom = 8'b10000000;
     segout = ~seg1; end
   3'd1: begin
     segcom = 8'b01000000;
     segout = ~seg2; end
   3'd2: begin
     segcom = 8'b00100000;
     segout = ~seg3; end
   3'd3: begin
     segcom = 8'b00010000;
     segout = ~seg4; end
   3'd4: begin
     segcom = 8'b00001000;
     segout = ~seg5; end
   3'd5: begin
     segcom = 8'b00000100;
     segout = ~seg6; end
   3'd6: begin
     segcom = 8'b00000010;
     segout = ~seg7; end
   3'd7: begin
     segcom = 8'b00000001;
     segout = ~seg8; end
  endcase
 end

endmodule


#베릴로그 7-segment

profile_image 익명 작성일 -

안녕하세요. 도와드리겠습니다.

7-SEGMENT 베릴로그 코드는 7개의 획으로 숫자나 문자를 표시하는 디지털 시스템을 설명하는 하드웨어 설명 언어(HDL)입니다¹². 베릴로그 코드는 다음과 같은 구성 요소로 이루어져 있습니다:

- module: 디지털 시스템의 기본 단위로 입력과 출력을 가집니다.

- input: 모듈에 들어오는 신호를 정의합니다.

- output: 모듈에서 나가는 신호를 정의합니다.

- wire: 신호를 연결하는 선을 정의합니다.

- reg: 신호를 저장하는 변수를 정의합니다.

- assign: wire에 값을 할당하는 문장입니다.

- always: 특정 조건이 만족될 때마다 실행되는 문장입니다.

- case: 다중 분기문으로 com_cnt 값에 따라 segcom과 segout 값을 결정합니다.

코드가 어떻게 동작하는지는 아래 정의할게용

- data[31:0] 입력 신호는 8개의 4비트 신호로 나누어져서 bin2seg 모듈에 들어갑니다. bin2seg 모듈은 4비트 이진수를 7비트 세그먼트 데이터로 변환합니다¹.

- seg1 ~ seg8 출력 신호는 각각 7개의 획을 가진 세그먼트에 연결됩니다. 세그먼트는 LED로 구성되어 있으며 불을 켜고 끄는 것으로 숫자나 문자를 표현할 수 있습니다²³.

- clk 입력 신호는 시계 주파수를 의미하며 resetn 입력 신호는 리셋을 의미합니다. 리셋이 되면 clk_cnt와 com_cnt 변수가 0으로 초기화됩니다.

- clk_cnt 변수는 clk 신호의 개수를 세고 com_cnt 변수는 세그먼트의 번호를 결정합니다. clk_cnt가 16384가 되면 com_cnt가 1씩 증가하고 최대값인 7이 되면 다시 0으로 돌아갑니다.

- com_cnt 값에 따라 case 문이 실행되며 segcom과 segout 값이 결정됩니다. segcom은 세그먼트의 공통 애노드나 공통 캐소드를 선택하는 신호입니다. segout은 세그먼트의 각 획에 전압을 인가하는 신호입니다.

- led_out 출력 신호는 data[7:0] 입력 신호와 같습니다.

출처: 2023. 2. 22.(1) [verilog] Chapter2. Seven Segment(세븐 세그먼트)와 Modelsim의 사용법 .... https://m.blog.naver.com/PostView.naver?blogId=rlakk11&logNo=220357833826 액세스한 날짜 2023. 2. 22..

(2) [아두이노 모듈] 7Segment (7세그먼트) 1편 - 원리와 구성. https://m.blog.naver.com/jamduino/220932416728 액세스한 날짜 2023. 2. 22..

(3) 7-segment (FND:Flexible Numeric Display). http://kocw.xcache.kinxcdn.com/KOCW/document/2019/bufs/choijinho0218/4.pdf 액세스한 날짜 2023. 2. 22..

베릴로그 코드 해석좀

부탁드립니다ㅠㅠ module kr( input clock,reset, output [7:0] A ); reg [20:0] count; reg [7:0] temp; reg [3:0] c; reg dir; initial dir=1'b1; parameter a=8'b00000001;...