분류 전체보기
-
[SystemVerilog] 데이터 타입 3 enum개발/SystemVerilog 2022. 1. 15. 20:10
구조체, 열거형 데이터와 user type definition 타입에 대해 정리 이전글에서 데이터타입을 다루었다. reg, wire, int, logic, bit 등은 primitive 타입이라고 한다. 유저가 데이터 타입을 정의할 수 있는데, user defined 타입이라고 한다. c언어 처럼 typedef 키워드로 정의한다. c언와 똑같이 enum, struct, union 키워드가 있다. typedef bit [7:0] byte_t; byte_t a, b; byte_t [0:15] c; input byte_t d; function byte_t parity_check(); enum 타입 선언 enum {RED, GREEN, BLUE} color_e; // RED = 0, GREEN = 1, BLUE..
-
[SystemVerilog] 연산자개발/SystemVerilog 2022. 1. 13. 23:43
위에 표는 베릴로그 연산자 시스템베릴로그는 여기에 더해 C 언어에서 지원되는 assignment 연산을 추가했다. operator usage equivalent += a+=b a = a+b -= a-=b a = a-b *= a*=b a = a*b /= a/=b a = a/b %= a%=b a = a%b &= a&=b a = a&b |= a|=b a = a|b ^= a^=b a = a^b b b assignment 연산을 chain으로 구성하는 것도 가능하다. // chainning assignment operation a += (b += (c += d)); // equivalent c = c + d; b = b + c; a = a + b; // 삼항연산에서 사용 a = (sel)? (b+=c) : (b-..
-
[SystemVerilog] 절차적 할당 2개발/SystemVerilog 2022. 1. 11. 23:35
https://www.sutherland-hdl.com/papers/2005-SNUG-paper_SystemVerilog_unique_and_priority.pdf 참조 priority case, unique case 구문이 추가되었다. 그냥 case 구문을 사용하면 순차적으로 평가하여 제일 먼저 match되는 case item 문장이 실행된다. case (sel) 0 :a = 0; 0, 1, 2 :a = 1; 3 :a = 2; 4 :a = 3; endcase 만약 sel = 0 이라면 처음 item 실행된다. 즉, 우선순위 인코더로 작동한다. case item이 서로 중복되는것이 없다면, parallel 인코더로 작동할 것이다. priority case는 full case와 같다. priority ca..
-
[SystemVerilog] 절차적 할당 1개발/SystemVerilog 2022. 1. 11. 22:15
시스템베릴로그에서 procedural statement 기능이 강화됐다. 기존 베릴로그는 begin .. end / fork .. join / task .. endtask 같은 코드블럭을 지정하는 키워드 쌍에서 시작 부분에만 블록에 label을 지정할 수 있었다. 시스템베릴로그에서는 블록의 끝에도 label을 지정할 수 있다. // 베릴로그 문법 module test; initial begin : initial_block ... end endmodule // 시스템베릴로그 문법 module test; initial begin : initial_block ... end : initial_block endmodule // 시스템베릴로그 문법 module test; initial initial_block : ..
-
[SystemVerilog] 데이터 타입 2개발/SystemVerilog 2022. 1. 10. 23:33
logic 타입은 reg와 마찬가지로 0, 1, z, x 4가지의 상태를 저장할 수 있다. 시스템베릴로그는 추가적으로 0, 1 두가지만 저장할 수 있는 2 state variable 타입을 제공한다. 이러한 타입으로 선언하면 효율적으로 모델링을 할 수 있고, 시뮬레이션 속도가 향상된다. 또한 합성 가능하다. type sign description bit unsigned 1bit 변수, 벡터로 확장가능 byte signed 8bit 정수 shortint signed 16bit 정수 int signed 32bit 정수 longint signed 64bit 정수 위 타입들을 선언하면 초기값은 모두 0이다. 4 state variable은 초기화 하지 않는다면 기본적으로 x 값을 갖는다. 따라서 2 state ..
-
[SystemVerilog] 데이터 타입 1개발/SystemVerilog 2022. 1. 10. 22:37
시스템베릴로그에서 추가된 타입인 logic에 대해 알아본다 logic은 베릴로그의 reg / wire 타입을 대체하는 키워드이다. 베릴로그에서 reg 타입은 레지스터로 고정된 것이 아니라 컨텍스트에 따라서 register 또는 wire로 합성이 될 수 있다. 다음과 같이 코딩을 하면 wire 타입으로 합성된다. reg a, b; reg out; always @(a or b) begin out = a & b; end a, b, out 모두 reg 타입으로 선언되었지만, 툴에선 combinational logic 으로 추론한다. 이렇듯, 기존의 reg 타입은 코딩하기에 따라서 혼동을 일으키기 쉽다. logic clk; logic [3:0] bus; logic [31:0] mem [0:127]; // var ..
-
[SystemVerilog] 시스템베릴로그 개요개발/SystemVerilog 2022. 1. 10. 21:06
시스템베릴로그는 기존의 베릴로그를 확장하여 설계, 스펙, 검증을 통합된 언어로 할 수 있게 해준다. 기존 verilog 2001 문법에 비해서 추가된 것들이 상당히 많다. 거의 다른 언어라고 봐도 무방할 정도 (하지만 베릴로그 문법과 호환된다.) 시스템베릴로그에서 도입된 것들을 나열하면 다음과 같다. 데이터타입 추가 연산자 추가 스케쥴링 추가 task / function 문법 강화 객체지향 프로그래밍 contriant randomization 인터페이스 프로세스 통신 coverage assertion DPI ... 이외에도 더 많이 있다. 특히 검증과 관련해서 기능이 많이 강화되었다. 객체지향과 contraint random기능은 설계를 검증하기 위해 테스트벤치를 짤 때 매우 유용한 기법이다. 다음 글에..
-
[Verilog][기초문법] task, function개발/Verilog 2022. 1. 9. 02:24
함수와 태스크를 이용해 반복적인 루틴작업을 모듈화 할 수 있다. 두개의 차이점을 표로 나타내면 다음과 같다 function task function ... endfunction 시뮬레이션 시간이 0이다. 딜레이, 타이밍 제어 등의 구문들은 사용할 수 없다. 하나의 값을 리턴한다 내부에서 function은 호출되지만, task는 호출할 수 없다. task ... endtask 시뮬레이션 시간은 0 될 수 있다. 딜레이, 타이밍 요소가 포함될 수 있다. 리턴값은 없지만, 여러개의 output 포트로 출력을 보낼 수 있다. 내부에 다른 task, function을 호출할 수 있다. 둘의 가장 큰 차이점은 바로 타이밍제어 요소가 포함되는지 여부이다. function은 @(), #(delay) 등의 문장을 넣을 ..