Languages
XMODEL의 connector primitive를 사용하여 디지털 신호 'A'를 아날로그 신호 'B'로 변환하고 있습니다. 그런데, 'A' 신호에 담겨있는 로직 X 값들이 좀 문제가 되고 있습니다. 디지털 신호에 담겨 있는 로직 X 값들을 제 선택에 따라 0 또는 1로 바꾸는 방법이 있나요? 예를 들면, 어떤 경우에는 모든 로직 값들을 1로, 또 다른 경우에는 모든 로직 값들을 0으로 바꾸고 싶습니다.
말씀하신 기능을 제공하기 위해, 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 값을 갖게 되었습니다.
Please login or Register to submit your answer