57 lines
1.7 KiB
Verilog
57 lines
1.7 KiB
Verilog
module bibp #(parameter N = 3) (
|
|
input [(N*2)+2:0] buyruk,
|
|
output reg [N:0] sonuc
|
|
);
|
|
integer i, a, b, c, count;
|
|
|
|
always @(buyruk) begin
|
|
case (buyruk[(N*2)+2:N*2])
|
|
default: sonuc = {(N+1){1'b0}};
|
|
|
|
3'b000: sonuc = buyruk[(N*2)-1:(N*2)-3] + buyruk[(N*2)-4:0];
|
|
3'b001: sonuc = buyruk[(N*2)-1:(N*2)-3] - buyruk[(N*2)-4:0];
|
|
3'b010: sonuc = buyruk[(N*2)-1:(N*2)-3] & buyruk[(N*2)-4:0];
|
|
3'b011: sonuc = buyruk[(N*2)-1:(N*2)-3] | buyruk[(N*2)-4:0];
|
|
|
|
3'b100: begin
|
|
for (i = 0; i <= (N*2)-2; i++)
|
|
if (buyruk[i] == buyruk[i+1])
|
|
sonuc = {(N+1){1'b1}};
|
|
else
|
|
sonuc = {(N+1){1'b0}};
|
|
end
|
|
3'b101: begin
|
|
sonuc = {(N+1){1'b0}};
|
|
for (a = 0; a < (N*2); a++) begin
|
|
if (buyruk[a] == 1)
|
|
sonuc = {(N+1){1'b1}};
|
|
end
|
|
end
|
|
|
|
3'b110: begin
|
|
count = 0;
|
|
for (b = 0; b < (N*2); b++) begin
|
|
if (buyruk[b] == 1)
|
|
count = count + 1;
|
|
end
|
|
if (count % 2 == 0)
|
|
sonuc = {(N+1){1'b1}};
|
|
else
|
|
sonuc = {(N+1){1'b0}};
|
|
end
|
|
|
|
3'b111: begin
|
|
count = 0;
|
|
for (c = 0; c < (N*2); c++) begin
|
|
if (buyruk[c] == 1)
|
|
count = count + 1;
|
|
end
|
|
if (count % 2 == 0)
|
|
sonuc = {(N+1){1'b0}};
|
|
else
|
|
sonuc = {(N+1){1'b1}};
|
|
end
|
|
endcase
|
|
end
|
|
endmodule
|