// Verilog HDL for "PC", "pc" "functional"

module pc (clk,in,ctl,out) ;

input          clk ;     // Clock
input  [3:0]   in ;      // Input
input  [1:0]   ctl ;     // Control
output [3:0]   out ;     // Output
reg    [3:0]   pc_reg ;  // Register

assign out = pc_reg ;
always @(posedge clk)
   begin
      case (ctl)
         2'b00  :  pc_reg <= pc_reg ;
         2'b01  :  pc_reg <= in ;
         2'b10  :  pc_reg <= pc_reg + 4'b0001 ;
         2'b11  :  pc_reg <= 4'b0000 ;
      endcase
   end
endmodule