blob: a453b3f6f70d8b4f475fd797f7007b36d474bab0 [file] [log] [blame] [edit]
module case1 (in1, in2, out2);
input [7:0] in1;
input [2:0] in2;
output out2;
always@(in1 or in2)
case (in2)
2'b000 : out2 = in1[0];
2'b001 : out2 = in1[1];
2'b010 : out2 = in1[2];
2'b011 : out2 = in1[3];
2'b100 : out2 = in1[4];
2'b101 : out2 = in1[5];
2'b110 : out2 = in1[6];
2'b111 : out2 = in1[7];
endcase
endmodule
module case2 (in1, sel, out2);
input [1:0] in1;
input [2:0] sel;
output [15:0] out2;
reg [7:0] select;
/* address decoder */
always@(sel)
case (sel)
3'b000 : select = 8'b00000001;
3'b001 : select = 8'b00000010;
3'b010 : select = 8'b00000100;
3'b011 : select = 8'b00001000;
3'b100 : select = 8'b00010000;
3'b101 : select = 8'b00100000;
3'b110 : select = 8'b01000000;
3'b111 : select = 8'b10000000;
endcase
assign out2[1:0] = in1 & select[0];
assign out2[3:2] = in1 & select[1];
assign out2[5:4] = in1 & select[2];
assign out2[7:6] = in1 & select[3];
assign out2[9:8] = in1 & select[4];
assign out2[11:10] = in1 & select[5];
assign out2[13:12] = in1 & select[6];
assign out2[15:14] = in1 & select[7];
endmodule
module pri_encooder (Op, Funct, Sel, B);
input [1:0] Op;
input [4:0] Funct;
output [1:0] Sel;
output B;
always@(Op or Funct)
casex ({Op, Funct})
{2'b01, 5'bx} : begin
Sel = 2'b11;
B = 1'b1;
end
{2'b11, 5'b00011} : begin
Sel = 2'b01;
B = 1'b1;
end
{2'b11, 5'b00001} : begin
Sel = 2'b10;
B = 1'b1;
end
default : begin
Sel = 2'bxx;
B = 1'bx;
end
endcase
endmodule