verilog/labs/lab6/bibp.v
2024-07-14 04:03:23 +03:00

35 lines
1.3 KiB
Verilog

module bibp #(parameter UZUNLUK = 8)(
input [UZUNLUK + 2:0] buyruk,
/* output reg [(UZUNLUK/2) - 1:0] v1,
output reg [(UZUNLUK/2) - 1:0] v2, */
output reg [(UZUNLUK/2):0] sonuc
);
/* localparam halfUZUNLUK = UZUNLUK / 2;
localparam v1 = buyruk[UZUNLUK - 1 : halfUZUNLUK];
localparam v2 = buyruk[halfUZUNLUK - 1 : 0];
*/
/*assign v1 = buyruk[UZUNLUK - 1 : UZUNLUK/2];
assign v2 = buyruk[UZUNLUK/2 : 0];*/
// wire [(UZUNLUK/2) - 1:0] v1,v2;
// !!! LOCALPARAM IVERILOG DA PROBLEMLI OLDUGU ICIN KULLANILMIYOR !!!
always@(*) begin
$display("%d", buyruk[UZUNLUK - 1 : UZUNLUK/2]);
$display("%d", buyruk[(UZUNLUK/2) - 1 : 0]);
$display("%d", buyruk[UZUNLUK - 1 : UZUNLUK/2] - buyruk[(UZUNLUK/2) - 1 : 0]);
case(buyruk[UZUNLUK+2:UZUNLUK])
3'b000: sonuc = buyruk[(UZUNLUK - 1) : UZUNLUK/2] + buyruk[(UZUNLUK/2) - 1 : 0];
3'b001: sonuc = buyruk[(UZUNLUK - 1) : UZUNLUK/2] - buyruk[(UZUNLUK/2) - 1 : 0]; // SUBTRACTION ?????? CHECK!!!
3'b010: sonuc = {1'b0, buyruk[UZUNLUK - 1 : UZUNLUK/2] & buyruk[(UZUNLUK/2) - 1 : 0]};
3'b011: sonuc = {1'b0, buyruk[UZUNLUK - 1 : UZUNLUK/2] | buyruk[(UZUNLUK/2) - 1 : 0]};
3'b100: sonuc = {1'b0, buyruk[UZUNLUK - 1 : UZUNLUK/2] ^ buyruk[(UZUNLUK/2) - 1 : 0]};
default: sonuc = -1;
endcase
$display("%b", sonuc);
end
endmodule