2025-01-30 06:50:00 +03:00

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