본문 바로가기
반응형

개발 Tools/Verilog HDL13

Quartus || 사용법 ( 쿼터스, 파일 생성, 기존 프로젝트 open, verilog HDL) 기본 파일 생성하는 순서 1. 처음 실행시키면 기본 화면이 뜬다. 2. 여기서 File을 선택해서 New Project Wizard를 선택한다. 3. 아래와 같은 그림일 뜨는데 Next를 누른다. 4. 프로젝트명을 적어주는데 이때 top-level 이름과 동일하게 적어줘야한다. 근데 자동으로 동일하게 적힌다. 5. 아래 두 화면은 아무것도 안 누르고 Next를 누른다. 6. Simulation의 Format은 내가 사용할 언어를 지정한다. 본인은 Verliog HDL을 선택했다. 7. Finish를 누르면 내가 적어준 프로젝트가 생성된다. 9. 다음으로 내 test_1 프로젝트에서 또 File을 눌러서 이번엔 New를 누른다. 10. 그러면 아래와 같은 창이 뜨는데 이때 어떤 파일을 만들건지 물어보는데 .. 2022. 5. 25.
Verilog HDL NOR Gate ( Nor 게이트, 4비트 2입력 NOR ) NOR Gate는 OR 게이트에 NOT 게이트를 이어 붙인 것이다. OR연산은 하나라도 1이면 출력이 1이다. 이런 게이트 앞에 NOT이 있으니 NOR 게이트는 하나라도 1이라면 출력은 0이다. 즉, 모두 0일 때만 출력이 1이다. module NOR (a, b, y); input [3:0] a, b; output [3:0] y; wire [3:0]y; assign y[3:0] = ~(a[3:0] | b[3:0]); endmodule DUT 코드는 간단하다. 그냥 OR연산을 하고 ~을 붙여주면 된다. 테스트 벤치는 어떻게 되는지 보자, 8비트를 다 집어넣어서 확인해 볼 예정이다. module tb_NOR; reg [3:0] a, b; wire [3:0] y; NOR u0(.a(a), .b(b), .y(y.. 2022. 2. 17.
Verilog HDL RCA ( Ripple carry adder, 리플 케리 가산기, 파형, 16bit ) RCA (Ripple carry adder) 먼저 부호 있는 수(signed)와 없는 수(unsigned)의 구분이 필요하다. 부호가 있는 수의 덧셈에서 carry는 다 버린다. 왜냐면 carry가 있든 없든 원하는 결괏값이 똑같기 때문이다. 하지만 오버플로우가 발생하기도 하는데, 이유는 결괏값이 표현 범위를 벗어나기 때문이다. 예를 들어 8bit라면, 2의 8승으로 0~ 255까지 표현 가능하지만 부호가 있기 때문에 -127 ~ 127까지다. 이 범위의 수에서 결괏값이 벗어나면 오버플로우가 발생했다고 한다. 이때는 프로그램이 오류를 나타내고 종료한다. 어떤 오류냐 하면 양수 + 양수 = 음수 음수 + 음수 = 양수와 같은 오류가 발생한다. 부호가 없는 이진수도 오버플로우가 발생한다. 8bit를 예로 들.. 2022. 2. 16.
Verilog HDL Multiplexor (멀티플렉서, mux, 예제) 여러 개의 신호 중에 하나를 선택하여 출력으로 내보낸다. sel 신호는 4개의 입력 중에 하나를 선택하여 보낸다. 아래 예시의 경우 sel [1:0] == 2'b01 이면 y = b가 된다. verilog로 구현해보자, 회로만 보고 코드를 짜는 연습을 하면 좋은 거 같다. module mux(a, b, c, d, sel, y); input [15:0] a, b, c, d; input [1:0]sel; output [15:0]y; reg [15:0]y; always @(*) case(sel) 2'b00 : y = a; 2'b01 : y = b; 2'b10 : y = c; 2'b11 : y = d; endcase endmodule 입력은 a, b, c, d, sel이고 출력은 y값으로 정해져 있다. alwa.. 2022. 2. 16.
Vreilog HDL decoder (디코더) (코드, 예제) 4비트의 신호를 받아서 16비트로 디코딩하는 진리표 module decoder_4to16( input [3:0] a, output wire [15:0] y ); // input [3:0] a; // output [15:0] y; // wire [15:0] y; genvar i; generate for (i = 0; i < 16; i = i+ 1) begin : dec assign y[i] = a == i; end endgenerate /* 위의genvari; 부터endgenerate까지의문장은다음문장들을대체하는문법임 assign y[0] = a == 4'b0000; assign y[1] = a == 4'b0001; assign y[2] = a == 4'b0010; assign y[3] = a == 4'b.. 2022. 2. 15.