HDL
-
[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 ..
-
[Verilog][기초문법] task, function개발/Verilog 2022. 1. 9. 02:24
함수와 태스크를 이용해 반복적인 루틴작업을 모듈화 할 수 있다. 두개의 차이점을 표로 나타내면 다음과 같다 function task function ... endfunction 시뮬레이션 시간이 0이다. 딜레이, 타이밍 제어 등의 구문들은 사용할 수 없다. 하나의 값을 리턴한다 내부에서 function은 호출되지만, task는 호출할 수 없다. task ... endtask 시뮬레이션 시간은 0 될 수 있다. 딜레이, 타이밍 요소가 포함될 수 있다. 리턴값은 없지만, 여러개의 output 포트로 출력을 보낼 수 있다. 내부에 다른 task, function을 호출할 수 있다. 둘의 가장 큰 차이점은 바로 타이밍제어 요소가 포함되는지 여부이다. function은 @(), #(delay) 등의 문장을 넣을 ..
-
[Verilog][기초문법] generation 구문 사용법개발/Verilog 2022. 1. 8. 23:21
반복적 블록 생성을 위한 generation 사용법 generate - endgenerate 블록 안에 있는 모듈을 반복적으로 생성하게 만들어준다. 똑같은 설계요소를 반복적으로 생성해야 할 때 유용하다. 블록 안에 들어올 수 있는것은 다음과 같다. 1. 모듈 2. 프리머티브 3. UDP 4. continuous assign 5. initial , always 블록 또한 generate 블록 안에서 wire, reg, integer, time, event 등의 변수 선언도 가능하다. 다음 예제를 통해 generate 구문 사용법을 알아본다. 4bit ripple carry adder 설계 예제이다. module adder #(parameter N = 4) ( output [N-1:0] sum, output..
-
[Verilog][기초문법] 조건문, 분기문개발/Verilog 2022. 1. 8. 22:28
C 언어 처럼 if, case 구문 쓸 수 있다 다만 베릴로그에서 데이터는 x, z 값이 있기때문에 조건문을 작성할때 이것을 유의해야한다. 기본적으로 1 이 아닌 값은 모두 false로 판단한다. module tb(); reg a; initial begin a = 1'bx; $display("a is %b",a); if (a) $display("x is true"); else $display("a is false"); a = 1'bz; $display("a is %b",a); if (a) $display("z is true"); else $display("z is false"); end endmodule 위 코드를 실행하면 아래의 결과가 나온다. if 문을 쓰기에는 분기가 너무 많으면 case 구문을 쓴..
-
[Verilog][기초문법] 타이밍 제어카테고리 없음 2022. 1. 6. 21:32
3가지의 타이밍 제어방법이 있다 1 딜레이에 기반한 제어 2 event를 이용한 제어 3 level sensitive 제어 1. 딜레이 기반의 타이밍 제어는 다시 3가지가 있다 - 정규할당 지연 또는 관성지연 (regular delay control) 'timescale 1ns/1ps reg a, b; // 정규지연 initial begin a = 0; b = 1; #10 a = 1;// 10ns 후에 할당 #(a+b) a = b; // 2ns 후에 할당 #(1:3:5) a = 1; // min : typ : max end 명시된 딜레이 후에 a 값에 할당이 된다. 딜레이는 숫자, 변수 모두 사용이 가능하다. 프리머티브와 마찬가지로 min : typical : max 형식도 지원된다. 정규지연은 딜레이가..