본문 바로가기
반응형

개발 Tools/Verilog HDL13

Verilog HDL 구문들 ( assign, always, case, initial, 반복문, time scale, self-cheacking test bench, @, 블록문 ) 조합 회로와 순차 회로를 구현하는 구문을 크게 2가지로 나눌 수 있다. assign과 always구문이다. assign - 조합회로 대부분의 경우 assign을 사용한다 - 조건 ? 참 : 거짓의 문장을 자주 사용한다 - 출력의 연결은 wire문으로 지정해줘야 한다. always 한 번만 실행되는 것이 아니라, 조건이 만족할 때마다 동작한다. 조건에는 에지와 레벨이 있다. - if , else, case 등등과 같은 구문은 always 구문 안에서만 사용해야 한다. - @ 는 ~~ 할 때라고 해석하면 된다. - sensitivity_list 신호가 변할 때, "..."를 하라는 의미다. 그래서 모든 입력에 대해서는 "*"를 적어준다. - 초기화 값을 정의하기에 좋다. - 반드시 reg로 출력을 정의해야 .. 2022. 2. 15.
Verilog HDL D 플립플롭 동작 ( non-blocking, blocking, 순차회로, 조합회로, 비동기 리셋, 비동기 셋 , D F/F ) 순차적 논리회로 플립플롭은 대부분 D로 사용한다. module d_ff (clk, d, q); input clk; input d; input q; reg q; always @(posedge clk) q 2022. 2. 15.
Verilog HDL 조합논리회로 종류 ( Not, or, 반가산기, 전가산기, 가산기, 디코더, 멀티플렉서 ) NOT module inverter (in, out); input in; output out; wire out; assign out = ~in; endmodule output out은 제일 오른쪽에 있는 out을 말하고, assgin out은 wire out을 말한다. OR // 방법 1 wire out; assgin out = in[2] | in[1] |in[0]; // 방법 2 wire out; assgin out = |in[2:0]; // 방법 3 wire out; assgin out = (in[2:0] != 3'b000); // 방법 4 wire out; assgin out = ~(in[2:0] == 3'b000); 방법 1. 기본적인 입력들을 or 연산자를 이용하여 출력을 구하는 방법 방법 2... 2022. 2. 15.
Verilog HDL module ( 모듈, 연결, 합성, 인스턴스, instance, 여러개, 탑모듈, named mapping, ordered mapping ) module 합성을 하기 전에 먼저 module이란 뭔지 알아야 한다. module이란, verilog에서 기본적인 블록 단위로 c언어의 함수와 비슷하다. 아래 그림처럼 도식화할 수 있다. module_name = module의 이름을 적어준다. port_list = 입출력을 말한다. 어떤 입출력이 들어가는지 쭉 적으면 된다. port 선언 = 뭐가 입력, 출력인지 정의한다. 파란색 박스 = 아래 사용할 변수를 선언한다. 빨간색 박스 = 실제로 동작할 코드를 작성한다. module 연결 아래 그림에서 stage 1과 stage 2 모듈을 만들고 top 모듈을 만들어보자. 즉, stage 1과 stage 2를 연결시켜보자. stage 1은 입력이 a, b, c, clk 출력이 ff1으로 이루어져 있다. 이.. 2022. 2. 15.
Verilog HDL DUT, Test Bench ( 8bit adder, 8비트 덧셈기, vivado ) DUT는 실제로 구현되어 사용할 회로이다. 그런데 우리가 짠 코드가 잘 동작하는지는 확인할 수 없다. 그래서 test bench라는 모듈을 이용하여 잘 작동하는지 확인해야 한다. 그렇다면 test bench에서 잘 작동할 수 있게 DUT를 잘 합성해야 한다. 그렇게 때문에 합성 가능한 구문으로 만들어야 한다. 대표적으로 assign, always 구문을 이용하여 설계해야 한다는 말이다. 느낌이 오지 않는다면 적절한 예시 일진 모르겠지만, 우리가 살았나 죽었나 확인할 땐, 보통 쿡쿡 찔러보고 움직이면, 살아있다고 판단하고 움직이지 않다면 죽었다고 판단한다. 이처럼 DUT가 잘 동작하는지 에러가 있는지를 확인해보기 위해, test bench에서 어떤 입력을 가해서 그에 따른 반응을 확인해야 한다. 가하는 입.. 2022. 2. 11.