본문 바로가기
반응형

개발 Tools92

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.
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.