Advertisement
Guest User

CU

a guest
Jul 12th, 2019
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module CU(
  2.     input CLK_IN_CU,
  3.     input RST_IN_CU,
  4.    
  5.     input [7:0]DATA_IN_CU,              // Data input from the External Data Bus
  6.     input [7:0]FLAGS_IN_CU,             // FLAGS input from the ALU
  7.     output [18:0]CONTROL_OUT_CU         // Control Signal output
  8.     );
  9.    
  10.     reg [7:0]INST;
  11.     reg [26:0]CONTROL_CU;
  12.     reg [3:0]STATE;
  13.     reg FLAG_CHECKED;
  14.    
  15.     wire [3:0]INT_STATE_CU;
  16.     wire [3:0]INT_CONTROL_CU;
  17.     wire NEG_CLK_IN_CU;
  18.    
  19.     initial
  20.     begin
  21.         INST = 0;
  22.         STATE = 'hF;
  23.         CONTROL_CU = 0;
  24.         FLAG_CHECKED = 0;
  25.     end
  26.    
  27.     assign {CONTROL_OUT_CU[18:0], INT_CONTROL_CU[3:0], INT_STATE_CU[3:0]} = CONTROL_CU;
  28.     assign NEG_CLK_IN_CU = ~CLK_IN_CU;                                      // what the fuck, why does this work
  29.    
  30.     always @(posedge CLK_IN_CU, posedge NEG_CLK_IN_CU, posedge RST_IN_CU)   // Instruction decoding/executing
  31.     begin
  32.         if (RST_IN_CU == 1)                                                 // Reset
  33.         begin
  34.             INST <= 0;
  35.             STATE <= 'hF;
  36.             CONTROL_CU <= 0;
  37.             FLAG_CHECKED <= 0;
  38.         end
  39.         else
  40.         begin
  41.             if (CLK_IN_CU == 1)                                             // Check if the clock is at it's rising or falling edge
  42.             begin                                                           // this begins on the rising edge
  43.                 if (INT_CONTROL_CU[3] == 1)
  44.                     INST <= DATA_IN_CU;
  45.                 if (FLAG_CHECKED == 0)
  46.                 begin
  47.                     case (INT_CONTROL_CU[2:0])
  48.                         'h3 : FLAG_CHECKED = FLAGS_IN_CU[0];
  49.                         'h4 : FLAG_CHECKED = FLAGS_IN_CU[1];
  50.                         'h5 : FLAG_CHECKED = FLAGS_IN_CU[2];
  51.                         'h6 : FLAG_CHECKED = FLAGS_IN_CU[3];
  52.                         'h7 : FLAG_CHECKED = FLAGS_IN_CU[4];
  53.                         default : ;
  54.                     endcase
  55.                 end
  56.             end
  57.             else
  58.             begin                                                           // this begins on the falling edge
  59.                 if (STATE == 'hF)
  60.                     CONTROL_CU <= 'h0800280;
  61.                 else
  62.                 begin
  63.                         case (INST)
  64.                         'h00 :                                              // NOP
  65.                             begin
  66.                                 case (STATE)
  67.                                     'h0 : CONTROL_CU <= 'h005800F;
  68.                                 endcase
  69.                             end
  70.                     endcase
  71.                 end
  72.                 STATE <= INT_STATE_CU;
  73.             end
  74.         end
  75.     end
  76. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement