SystemVerilog
-
2's complement 비교하기SystemVerilog 2024. 9. 13. 19:21
2의 보수 방식의 장점을 요약하면 다음과 같습니다 :- MSB가 0이면 양수, 1이면 음수임을 확신할 수 있음.- 음수를 더하는 방식으로 뺼셈 수행 가능- 음수의 비교연산에서 발생하는 모순 해결 (음수끼리 만)- 0이 단 한 가지 방식으로 표현 가능- 덧셈 및 뺄셈에서 캐리의 발생시 캐리를 처리하는 회로를 구성할 필요가 없음. ==================================================그럼 4비트 이진수를 예로 들어 설명해 드릴게요.숫자 5를 4비트 이진수로 표현하면:5 = 0101숫자 -3을 2의 보수로 표현하는 과정:3을 4비트 이진수로 표현하면:3 = 0011이 숫자의 1의 보수를 취하면:0011 → 1100이 1의 보수에 1을 더하면 2의 보수가 됩니다:1100 + ..
-
systemverilog 인자의 갯수를 variable 하게 넣는 방법.SystemVerilog 2023. 12. 14. 08:21
write(addr,wcnt,wdata0,wdata1,wdata2); 처럼 write 할때, 주소와 wcnt 를 뒤에 따라오는 wdata0,w,data1 등의 갯수만큼 넣어 준다. 단, 아래처럼 최대로 wcnt 할 수 있는 갯수의 데이타를 초기값을 할당한 상태로 지정해 준다. task write(input addr, input [7:0] wcnt, input [31:0] wdata0 = 0 , wdata1 = 0, wdata2 = 0, wdata3 = 0, ..., wdata255 = 0); logic [8*256-1:0] wdata_all; wdata_all = {wdata255, .... , wdata1, wdata0 }; // 일단, 데이터들을 모두 모으고, 8bit 씩 write 하는 task를 ..
-
assert와 propertySystemVerilog 2023. 8. 8. 23:13
systemverilog에서는 검증을 위해 프로그래밍적 요소가 많이 추가 되었는데, 대표적인것이 assert와 property 입니다. assert는 우리가 프로그래밍 할 때 사용하는 assert와 동일 합니다. assert(data_1 == data_2) // data_1과 data_2가 같지 않다면 에러를 발생시킨다 위의 코드를 실제로 돌리면 어떻게 나오는지 코드를 아래와 같이 작성했습니다. initial begin assert(data == data_t) else $fatal("Stop"); fork data_gen(data); data_gen_t(data_t); join end always #(`Clock_period/2) clk = !clk; task automatic data_gen_t(ref..
-
pass by referenceSystemVerilog 2023. 8. 8. 22:42
기존에 포스팅한 것과 같이 automatic이라는 keyword와 같이 사용해야 하는 방식을 정리합니다. 우선 아래와 같은 code가 있다고 하면 initial begin clk = 1'b0; fork data_gen(data); data_read(data); join end always #(`Clock_period/2) clk = !clk; task data_gen(output logic [2:0] wdata); #100 data = 3'd1; #100 data = 3'd2; #100 data = 3'd3; #100 data = 3'd4; #100; endtask task data_read(logic [2:0] rdata); for(integer i =0;i
-
비트를 enum 으로 형변환 해서, 보기 편하게SystemVerilog 2023. 7. 24. 17:51
typedef enum logic [2:0] { RED = 3, GREEN = 5, BLUE = 7 } Color; logic [2:0] data = 7; // 기본 데이터 타입 변수를 선언하고 초기화 Color myColor; $cast(myColor, data); // 기본 데이터 타입을 Enum 상수로 형변환 $display("Integer value as enum: %0s", myColor.name); logic [2:0] data = 7; // 기본 데이터 타입 변수를 선언하고 초기화 Color myColor; myColor = Color'(data); // 기본 데이터 타입을 Enum 상수로 형변환 $display("Integer value as enum: %0s", myColor.name);..