Languages

CommunityCategory: XMODEL디지털 입력신호의 X와 Z 값을 0 또는 1 값으로 바꾸는 방법

XMODEL

디지털 입력신호의 X와 Z 값을 0 또는 1 값으로 바꾸는 방법

SA Support Team Staff 2024-09-02

XMODEL의 connector primitive를 사용하여 디지털 신호 'A'를 아날로그 신호 'B'로 변환하고 있습니다. 그런데, 'A' 신호에 담겨있는 로직 X 값들이 좀 문제가 되고 있습니다. 디지털 신호에 담겨 있는 로직 X 값들을 제 선택에 따라 0 또는 1로 바꾸는 방법이 있나요? 예를 들면, 어떤 경우에는 모든 로직 값들을 1로, 또 다른 경우에는 모든 로직 값들을 0으로 바꾸고 싶습니다.

1 Answers
SA Support Team Staff 2024-09-02

말씀하신 기능을 제공하기 위해, XMODEL 2024.09 Release부터 아래에 나열한 primitive들에 'valueX''valueZ'라는 새로운 파라메터들을 도입하였습니다.

  • xbit_to_xreal
  • xbit_to_real
  • bit_to_xreal
  • bit_to_real
  • xbit_to_xreal_var
  • xbit_to_real_var
  • bit_to_xreal_var
  • bit_to_real_var
  • bit_to_xbit
  • xbit_to_bit
  • buf_xbit
  • inv_xbit
  • transition
  • switch

'valueX''valueZ' 파라메터는 각각 입력신호에 담긴 로직 X값과 로직 Z값의 매핑된 값을 정의해서, 그 값들이 로직 0이나 1과 같은 다른 값으로 인식될 수 있게 해줍니다. 예를 들어, 'valueX' 파라메터의 값을 1로 설정하면, 그 primitive는 입력신호의 모든 로직 X 값들을 1로 인식하게 됩니다. 또, 'valueZ' 파라메터의 값을 0으로 설정하면, 입력신호의 모든 로직 Z 값들을 0으로 인식하게 됩니다. 따라서, 이 파라메터들을 적절히 사용하면, 로직 X 또는 Z 값들을 0 또는 1 값으로 원하는대로 변환할 수 있습니다.

아래는 이 'valueX''valueZ' 파라메터의 용법을 보여주는 간단한 예제입니다. 이 테스트벤치는 'bit_to_xbit' primitive를 사용해 reg 타입의 신호 'in'을 xbit 타입의 신호 'out_D'로 변환하고 있고, 또한 'bit_to_xreal' primitive를 사용해 같은 신호 'in'을 xreal 타입의 신호 'out_A'로 변환하고 있습니다. 입력신호 'in'에는 로직 X값과 로직 Z값이 간간히 섞여 있습니다.

TB_conn.sv:

module TB_conn;
    reg in;
    xbit out_D;
    xreal out_A;

    bit_to_xbit     CONN1 (.in(in), .out(out_D));
    bit_to_xreal    #(.level0(0.0), .level1(1.2), .rise_time(1e-9), .fall_time(1e-9))
                    CONN2 (.in(in), .out(out_A));

    initial begin
        in = 1'b0;
        #(8ns) in = 1'b1;
        #(8ns) in = 1'b0;
        #(8ns) in = 1'b1;
        #(8ns) in = 1'b0;
        #(8ns) in = 1'bx;
        #(8ns) in = 1'b1;
        #(8ns) in = 1'bx;
        #(8ns) in = 1'b0;
        #(8ns) in = 1'bz;
        #(8ns) in = 1'b1;
        #(8ns) in = 1'bz;
        #(8ns) in = 1'b0;
    end

    initial begin
        $xmodel_dumpfile("xmodel.jez");
        $xmodel_dumpvars();
    end
endmodule

아래는 이 테스트벤치를 사용해 시뮬레이션 파형 결과를 보여줍니다. 'valueX''valueZ' 파라메터가 정의되지 않은 경우, 'bit_to_xbit' primitive는 입력신호 'in'의 로직 X와 Z 값들을 출력신호 'out_D'에 그대로 전달합니다. 그리고, 'bit_to_xreal' primitive는 입력신호의 로직 X와 Z 값들을 무시하고 출력 신호 'out_A'를 직전의 값으로 그대로 유지합니다. 다시 말해, 입력신호 값이 로직 X 또는 Z일때의 'bit_to_xreal' primitive의 출력신호 값은 그 직전 출력신호 값이 무엇이었느냐에 따라 달라지게 됩니다.

자, 이제 이들 primitive에 'valueX''valueZ' 파라메터를 정의해주면 어떻게 결과가 달라지는지 살펴봅시다. 아래의 수정내용은 'bit_to_xbit' primitive의 'valueX' 파라메터 값을 1로 설정하고, 'bit_to_xreal' primitive의 'valueZ' 값을 0으로 설정합니다. 즉, 앞의 설명에 따르면, 이제 'bit_to_xbit' primitive는 입력신호의 로직 X값을 1으로, 'bit_to_xreal' primitive는 입력신호의 로직 Z값을 0으로 받아들이게 됩니다.

    bit_to_xbit     #(.valueX(1)) CONN1 (.in(in), .out(out_D));
    bit_to_xreal    #(.level0(0.0), .level1(1.2), .rise_time(1e-9), .fall_time(1e-9),
                      .valueZ(0))
                    CONN2 (.in(in), .out(out_A));

아래의 시뮬레이션 파형 결과는 실제로 primitive들이 이 설명대로 동작함을 확인해줍니다. 즉, 'out_D' 신호는 입력이 로직 X 값을 가질때 X 대신 1 값을 갖게 되었고, 'out_A' 신호는 입력이 로직 Z 값을 가질때 로직 0에 해당하는 출력 레벨인 0.0 값을 갖게 되었습니다.