`define R0 4'd0 `define R1 4'd1 `define R2 4'd2 `define R3 4'd3 `define R4 4'd4 `define R5 4'd5 `define R6 4'd6 `define R7 4'd7 `define R8 4'd8 `define R9 4'd9 `define R10 4'd10 `define R11 4'd11 `define R12 4'd12 `define R13 4'd13 `define R14 4'd14 `define R15 4'd15 module regs(bus_a, bus_b, bus_a_sel, bus_b_sel, e_a_in, e_b_in, e_a_out, e_b_out); inout[31:0] bus_a, bus_b; input [3:0] bus_a_sel, bus_b_sel; input e_a_in, e_b_in, e_a_out, e_b_out; reg [31:0] r[0:15]; // Izlaz na magistrale je kontrolisan pomocu e_a_out i e_b_out signala // Kada su ovi signali na nuli, odgovarajuce magistrale ne primaju // signal iz ovog kola assign bus_a = e_a_out ? r[bus_a_sel] : 32'hzzzzzzzz; assign bus_b = e_b_out ? r[bus_b_sel] : 32'hzzzzzzzz; // proces za upis vrednosti sa A magistrale // (radi samo kada je e_a_in ukljucen) always @(e_a_in or bus_a_sel or bus_a) if(e_a_in) r[bus_a_sel] <= bus_a; // proces za upis vrednosti sa B magistrale // (radi samo kada je a_b_in ukljucen) always @(e_b_in or bus_b_sel or bus_b) if(e_b_in) r[bus_b_sel] <= bus_b; endmodule // regs