velilog BCD adder 질문있습니다!!

velilog BCD adder 질문있습니다!!

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

한 자리 10진수(BCD) 2개를 입력하면 십진수 덧셈연산을 하는 BCD adder를 설계하려고 합니다. Carry-in은 고려하지 않고, 계산 결과는 FND에 표시되며, 자리올림(Carry-out)은 LED1에 표시되게끔 하려고 합니다.

module p3_BCDadder(
input [3:0] A, B,
output Cout,
output [0:6] seg_data,
);

wire [4:0] sum_b;  
assign invalid = A > 9 || B > 9;
assign sum_b = A + B ;
assign Cout = (sum_b > 9) ? 1 : 0;
assign S = sum_b[3:0] + ((Cout==1)? 6 : 0); 
assign seg_data = dec(bcd_in);
function [0:6] dec([3:0]sum_b);
begin
    case(sum_b)
       4'd0: dec = 7'b1111_110;
       4'd1: dec = 7'b0110_000;
       4'd2: dec = 7'b1101_101;
       4'd3: dec = 7'b1111_001;
       4'd4: dec = 7'b0110_011;
       4'd5: dec = 7'b1011_011;
       4'd6: dec = 7'b1011_111;
       4'd7: dec = 7'b1110_010;
       4'd8: dec = 7'b1111_111;
       4'd9: dec = 7'b1111_011;        
       default: dec = 7'b0000_000;
    endcase
end
endfunction

endmodule

제 짧은지식으로 한번 코드를 짜봤는데, 오류가 많이 뜹니다.. 어떻게 수정을 해야 할까요..?



profile_image 익명 작성일 -

제공해주신 코드에서 몇 가지 오류를 발견했습니다. 다음은 수정이 필요한 부분입니다:

  1. invalid 신호 정의: invalid 신호가 사용되지만, 해당 부분이 모듈에서 정의되어 있지 않습니다.

  2. 따라서 assign invalid = A > 9 || B > 9;를 추가해야 합니다.

  3. S 출력 신호 정의: S는 세그먼트 디스플레이에 표시될 값으로, 현재 코드에서는 정의되어 있지 않습니다. 따라서 assign S = sum_b[3:0] + ((Cout==1)? 6 : 0);를 수정하여 올바른 값으로 할당해야 합니다.

  4. seg_data 출력 신호 정의: 현재 코드에서는 dec(bcd_in)과 같이 정의되어 있는데,

  5. 이 부분을 수정하여 올바른 값을 할당해야 합니다.

  6. 함수 내부 변수명 오류: 함수 내부에 있는 변수명인 [3:0]sum_b가 중복되고 있으며,

  7. 이 부분을 [3:0] input_sum_b로 수정하거나 다른 이름으로 변경해야 합니다.

아래는 수정된 코드 예시입니다:

verilog

module p3_BCDadder

( input [3:0] A, B,

output Cout, output [0:6] seg_data );

wire [4:0] sum_b;

assign invalid = A > 9 || B > 9;

assign sum_b = A + B;

assign Cout = (sum_b > 9) ? 1 : 0;

assign S = sum_b[3:0];

assign seg_data = dec(S);

function [6:0] dec;

input [3:0] bcd_in;

begin case(bcd_in)

4'd0 : dec = 7'b111_1110; // 숫자 "0"에 대한 세그먼트 표현

// 나머지 숫자들에 대한 세그먼트 표현 추가

// ... default : dec = 7'b000_000; // 기본적으로 "000000"으로 설정 (오류 처리 등)

endcase

end

endfunction

endmodule

위의 예시 코드에서 주석 처리된 부분은 숫자 "1"부터 "9"까지에 대한 세그먼트 표현을

추가하는 것입니다.

필요한 경우 해당 부분을 완성하여 각 숫자에 맞는 세그먼트 표현을 할당하면 됩니다.

추가로, 모듈 내부에 사용된 "_"(언더스코어) 기호도 "_"(언더스코어) 대신 "-"(대시) 기호로

변경할 수도 있습니다.