분류 전체보기
-
[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 형식도 지원된다. 정규지연은 딜레이가..
-
[Verilog][기초문법] 게이트 딜레이카테고리 없음 2022. 1. 5. 22:24
베릴로그의 프리머티브 게이트들은 파라미터 설정을 통해서 3가지의 딜레이를 모델링 할 수 있다 3가지는 각각 상승, 하강, 턴오프 딜레이 값이다. y 상승 딜레이는 0, x, z 값에서 1로 변할때 걸리는 시간, 하강 딜레이는 1, x, z 값에서 0로 변할때 걸리는 시간, 턴오프 딜레이는 0, 1, x 값에서 z로 변할때 걸리는 시간이다. #(상승, 하강, 턴오프) name(out, in1, in2, ... ); 형식으로 선언할 수 있다. // #() 안에 수를 적어서 딜레이를 설정함 // 하나만 적으면 상승 하강 턴오프 모두 같은 값이다. and #(10) a1(*); // 두개를 적으면 각각 상승 하강 딜레이다. 턴오프 딜레이는 상승, 하강값 중 작은 값이다 and #(10, 15) a2(*); //..
-
[Verilog][기초문법] 인스턴스 배열카테고리 없음 2022. 1. 5. 22:02
인스턴스 배열은 반복적으로 모듈을 인스턴스화 할 때 유용한 문법이다 wire [3:0] a, b, c; // and 게이트 인스턴스 배열 and and_gate [3:0] (a, b, c); // 위는 아래와 같이 풀어쓸 수 있다 and and_gate0 (a[0], b[0], c[0]); and and_gate1 (a[1], b[1], c[1]); and and_gate2 (a[2], b[2], c[2]); and and_gate3 (a[3], b[3], c[3]); 4개의 and 게이트를 인스턴스했다. (a = b&c) 인스턴스 배열을 선언할 땐 신호들끼리 벡터의 길이가 같아야한다.
-
[Verilog][기초문법] 모듈, 포트개발/Verilog 2022. 1. 5. 21:09
모듈 포트와 연결 모듈의 포트는 기본적으로 3가지 타입으로 정의한다 input 입력, reg 선언 불가능 output 출력, reg 선언가능 inout 입출력, reg 선언 불가능 포트 선언은 2가지 방법이 있다. 포트에 이름을 적고 모듈 내부에 입출력 방향을 정의하는 방법 module test(sum, cout, a, b, cin); output [1:0] sum; output cout; input a, b; input cin; ... endmodule C style, 포트에 이름과 입출력 방향을 동시에 정의하는 방법 module test( output sum, output cout, input a, input b, input cin ); ... endmodule 외부의 신호를 모듈과 연결하는 방법에는..
-
[Verilog][기초문법] 데이터 형개발/Verilog 2022. 1. 3. 23:27
베릴로그는 디지털회로를 설계하기 위한 언어로서 회로의 상태를 표현하기 위해 4가지의 값을 지원한다. 논리값 의미 0 논리적 0, 거짓 1 논리적 1, 참 x 알 수 없는 논리값 z 하이 임피던스, 플로팅 x 는 unknown 또는 don`t care 로 취급할 수 있다. 또한 신호강도를 모델링하기 위한 키워드들을 지원한다. 실제로 쓰이는건 못봤다. 아마 트랜지스터 레벨에서 모델링을 할 때 쓰이는것 같다. 신호강도 형태 supply driving strong driving pull driving large storage weak driving medium storage small storage highz high impedance 아래에서 위로 갈 수록 신호강도가 세지며 서로 다른 강도를 갖는 신호가 충돌..