`timescale 1ns / 1ps
// Half Adder 모듈
module half_adder(
input a, b,
output sum, carry
);
assign sum = a ^ b;
assign carry = a & b;
endmodule
// Half Adder의 동작을 기술하는 모듈
module halfadder_behaviors(
input a, b,
output reg s, c
);
always @(a, b) begin
case ({a, b})
2'b00: begin s = 0; c = 0; end
2'b01: begin s = 1; c = 0; end
2'b10: begin s = 1; c = 0; end
2'b11: begin s = 0; c = 1; end
endcase
end
endmodule
// Full Adder의 구조적 모델링
module fulladder_structural(
input a, b, cin,
output sum, carry
);
wire sum_0, carry_0, carry_1;
half_adder ha0 (.a(a), .b(b), .sum(sum_0), .carry(carry_0));
half_adder ha1 (.a(sum_0), .b(cin), .sum(sum), .carry(carry_1));
or (carry, carry_0, carry_1);
endmodule
// 4비트 더하는 구조적 모델링
module fadder_4bit_s(
input [3:0] a, b,
input cin,
output [3:0] sum,
output carry
);
wire [2:0] carry_in;
full_adder fa0 (.a(a[0]), .b(b[0]), .cin(cin), .sum(sum[0]), .carry(carry_in[0]));
full_adder fa1 (.a(a[1]), .b(b[1]), .cin(carry_in[0]), .sum(sum[1]), .carry(carry_in[1]));
full_adder fa2 (.a(a[2]), .b(b[2]), .cin(carry_in[1]), .sum(sum[2]), .carry(carry_in[2]));
full_adder fa3 (.a(a[3]), .b(b[3]), .cin(carry_in[2]), .sum(sum[3]), .carry(carry));
endmodule
// 4비트 더하는 데이터 모델링
module fadder_4bit(
input [3:0] a, b,
input cin,
output [3:0] sum,
output carry
);
wire [4:0] temp;
assign temp = a + b + cin;
assign sum = temp[3:0];
assign carry = temp[4];
endmodule
// 4비트 더하거나 빼는 구조적 모델링
module fadd_sub_4bit_s(
input [3:0] a, b,
input s, // add=0, sub=1
output [3:0] sum,
output carry
);
wire [2:0] carry_in;
full_adder fa0 (.a(a[0]), .b(b[0] ^ s), .cin(s), .sum(sum[0]), .carry(carry_in[0]));
full_adder fa1 (.a(a[1]), .b(b[1] ^ s), .cin(carry_in[0]), .sum(sum[1]), .carry(carry_in[1]));
full_adder fa2 (.a(a[2]), .b(b[2] ^ s), .cin(carry_in[1]), .sum(sum[2]), .carry(carry_in[2]));
full_adder fa3 (.a(a[3]), .b(b[3] ^ s), .cin(carry_in[2]), .sum(sum[3]), .carry(carry));
endmodule
// 4비트 더하거나 빼는 데이터 모델링 (조합회로)
module fadd_sub_4bit(
input [3:0] a, b,
input s, // add=0, sub=1
output [3:0] sum,
output carry
);
wire [4:0] temp;
assign temp = s ? a - b : a + b;
assign sum = temp[3:0];
assign carry = temp[4];
endmodule
// 4비트 비교 모듈
module comparator #(
parameter N = 4
)(
input [N-1:0] a, b,
output equal, greater, less
);
assign equal = (a == b) ? 1'b1 : 1'b0;
assign greater = (a > b) ? 1'b1 : 1'b0;
assign less = (a < b) ? 1'b1 : 1'b0;
endmodule
// 2-4 디코더 (case 문 사용)
module decoder_2_4_case(
input [1:0] a,
output reg [3:0] y
);
always @(a) begin
case(a)
2'b00: y = 4'b0001;
2'b01: y = 4'b0010;
2'b10: y = 4'b0100;
2'b11: y = 4'b1000;
endcase
end
endmodule
// 2-4 디코더 (if 문 사용)
module decoder_2_4_if(
input [1:0] a,
output reg [3:0] y
);
always @(a) begin
if (a == 2'b00) y = 4'b0001;
else if (a == 2'b01) y = 4'b0010;
else if (a == 2'b10) y = 4'b0100;
else y = 4'b1000;
end
endmodule
// 2-4 디코더 (data flow)
module decoder_2_4(
input [1:0] a,
output [3:0] y
);
assign y = (a == 2'b00) ? 4'b0001 : (a == 2'b01) ? 4'b0010 : (a == 2'b10) ? 4'b0100 : 4'b1000;
endmodule
// 2-4 디코더 (enable 기능 추가, data flow)
module decoder_2_4_en(
input [1:0] a,
input en,
output [3:0] y
);
assign y = (~en) ? 4'b0000 : (a == 2'b00) ? 4'b0001 : (a == 2'b01) ? 4'b0010 : (a == 2'b10) ? 4'b0100 : 4'b1000;
endmodule
// 2-4 디코더 (enable 기능 추가, case 문 사용)
module decoder_2_4_en_case(
input [1:0] a,
input en,
output reg [3:0] y
);
always @(a) begin
if (en) begin
case(a)
2'b00: y = 4'b0001;
2'b01: y = 4'b0010;
2'b10: y = 4'b0100;
2'b11: y = 4'b1000;
endcase
end
else y = 0;
end
endmodule
// 3-8 디코더 (enable 기능 없음)
module decoder_3_8_1(
input [2:0] a,
input en,
output reg [7:0] y
);
always @(a) begin
if (en) begin
case(a)
3'b000: y = 8'b0000_0001;
3'b001: y = 8'b0000_0010;
3'b010: y = 8'b0000_0100;
3'b011: y = 8'b0000_1000;
3'b100: y = 8'b0001_0000;
3'b101: y = 8'b0010_0000;
3'b110: y = 8'b0100_0000;
3'b111: y = 8'b1000_0000;
endcase
end
else y = 0;
end
endmodule
'VERILOG' 카테고리의 다른 글
Verilog - DSP FIR Lowpass Filter(2MHz + 30MHz sin PHASE) (0) | 2024.02.13 |
---|---|
Verilog HDL 문법2 (0) | 2024.02.02 |
순차논리회로 코드 모음 (0) | 2024.02.02 |
Verilog HDL 문법(구조적(Structural),dataflow,동작적(Behaviroal)모델링,조합논리회로,순차논리회로) (0) | 2024.02.02 |
Verilog - reg 와 wire 그리고 in, out, inout 입출력 (0) | 2024.02.01 |