Below is the Verilog code used in the configuration for the INTERNAL module: module INTERNAL (N, S1, S2, Clock, F, A, Data_in, DriveRead, Q, X, Data_out, S800Delay, S800Width, SecondaryDelay, SecondaryWidth, S800TimingDelay, CoincTimingWidth, SecondaryTimingDelay, Bypasses, S800Factor, SecondaryFactor, TriggerBox, ADCGate, QDCGate, TDCStart, Coincidence, Inspect1, Inspect2, Inspect3, Inspect4, Register, ClearModule, ClearRegister, Go, TimeStamp, Select, SyncEnable ) ; input N ; input S1 ; input S2 ; input Clock ; input [4:0] F ; input [3:0] A ; input [23:0] Data_in ; output Q ; output X ; output DriveRead; output [23:0] Data_out ; output [7:0] S800Delay; output [7:0] S800Width ; output [7:0] SecondaryDelay; output [7:0] SecondaryWidth ; output [7:0] S800TimingDelay; output [7:0] CoincTimingWidth ; output [7:0] SecondaryTimingDelay ; output [4:0] Bypasses ; output [9:0] S800Factor ; output [9:0] SecondaryFactor ; output [4:0] TriggerBox ; output [7:0] ADCGate ; output [7:0] QDCGate ; output [7:0] TDCStart ; output [7:0] Coincidence ; output [4:0] Inspect1 ; output [4:0] Inspect2 ; output [4:0] Inspect3 ; output [4:0] Inspect4 ; input [4:0] Register; output ClearModule; output ClearRegister; output Go; input [63:0] TimeStamp; output [1:0] Select; output SyncEnable; // add your declarations here reg X; reg Q; reg DriveRead ; reg ClearModule; reg ClearRegister; reg Go; reg [1:0] Select; reg SyncEnable; reg [23:0] Data_out ; reg [7:0] S800Delay; reg [7:0] S800Width ; reg [7:0] SecondaryDelay; reg [7:0] SecondaryWidth ; reg [7:0] S800TimingDelay; reg [7:0] CoincTimingWidth ; reg [7:0] SecondaryTimingDelay ; reg [4:0] Bypasses ; reg [9:0] S800Factor ; reg [9:0] SecondaryFactor ; reg [4:0] TriggerBox ; reg [7:0] ADCGate ; reg [7:0] QDCGate ; reg [7:0] TDCStart ; reg [7:0] Coincidence ; reg [4:0] Inspect1 ; reg [4:0] Inspect2 ; reg [4:0] Inspect3 ; reg [4:0] Inspect4 ; // add your code here always @(posedge Clock) begin if (N) begin case (F) 5'd0: begin case (A) 4'd0: Data_out <= {16'd0, S800Delay}; 4'd1: Data_out <= {16'd0, S800Width}; 4'd2: Data_out <= {16'd0, SecondaryDelay}; 4'd3: Data_out <= {16'd0, SecondaryWidth}; 4'd4: Data_out <= {16'd0, S800TimingDelay}; 4'd5: Data_out <= {16'd0, CoincTimingWidth}; 4'd6: Data_out <= {16'd0, SecondaryTimingDelay}; 4'd7: Data_out <= {19'd0, Bypasses}; 4'd8: Data_out <= {14'd0, S800Factor}; 4'd9: Data_out <= {14'd0, SecondaryFactor}; 4'd10: Data_out <= {19'd0, TriggerBox}; 4'd11: Data_out <= {23'd0, Go}; 4'd12: Data_out <= {22'd0, Select}; 4'd13: Data_out <= {23'd0, SyncEnable}; 4'd14: Data_out <= 24'd5800; 4'd15: Data_out <= 24'd2367; default: Data_out <= 24'd0; endcase //A end // F=0 5'd1: begin case (A) 4'd0: Data_out <= {19'd0, Inspect1}; 4'd1: Data_out <= {19'd0, Inspect2}; 4'd2: Data_out <= {19'd0, Inspect3}; 4'd3: Data_out <= {19'd0, Inspect4}; default: Data_out <= 24'd0; endcase //A end // F=1 5'd2: begin case (A) 4'd0: Data_out <= {16'd0, ADCGate}; 4'd1: Data_out <= {16'd0, QDCGate}; 4'd2: Data_out <= {16'd0, TDCStart}; 4'd3: Data_out <= {16'd0, Coincidence}; default: Data_out <= 24'd0; endcase //A end // F=2 5'd3: begin case (A) 4'd0: Data_out <= {19'd0, Register}; 4'd1: Data_out <= {8'd0, TimeStamp[15:0]}; 4'd2: Data_out <= {8'd0, TimeStamp[31:16]}; 4'd3: Data_out <= {8'd0, TimeStamp[47:32]}; 4'd4: Data_out <= {8'd0, TimeStamp[63:48]}; default: Data_out <= 24'd0; endcase //A end // F=3 5'd9: begin end // F=9 5'd16: begin if (S1) begin case (A) 4'd0: S800Delay <= Data_in[7:0]; 4'd1: S800Width <= Data_in[7:0]; 4'd2: SecondaryDelay <= Data_in[7:0]; 4'd3: SecondaryWidth <= Data_in[7:0]; 4'd4: S800TimingDelay <= Data_in[7:0]; 4'd5: CoincTimingWidth <= Data_in[7:0]; 4'd6: SecondaryTimingDelay <= Data_in[7:0]; 4'd7: Bypasses <= Data_in[4:0]; 4'd8: S800Factor <= Data_in[9:0]; 4'd9: SecondaryFactor <= Data_in[9:0]; 4'd10: TriggerBox <= Data_in[4:0]; 4'd11: Go <= Data_in[0:0]; 4'd12: Select <= Data_in[1:0]; 4'd13: SyncEnable <= Data_in[0:0]; endcase //A end // S1=1 end // F=16 5'd17: begin if (S1) begin case (A) 4'd0: Inspect1 <= Data_in[4:0]; 4'd1: Inspect2 <= Data_in[4:0]; 4'd2: Inspect3 <= Data_in[4:0]; 4'd3: Inspect4 <= Data_in[4:0]; endcase //A end // S1=1 end // F=17 5'd18: begin if (S1) begin case (A) 4'd0: ADCGate <= Data_in[7:0]; 4'd1: QDCGate <= Data_in[7:0]; 4'd2: TDCStart <= Data_in[7:0]; 4'd3: Coincidence <= Data_in[7:0]; endcase //A end // S1=1 end // F=18 endcase // F end //N=1 end // always Clock always @(N or S1 or F or A) begin if (N) begin case (F) 5'd0: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b1; ClearModule = 1'b0; ClearRegister = 1'b0; end // F=0 5'd1: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b1; ClearModule = 1'b0; ClearRegister = 1'b0; end // F=1 5'd2: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b1; ClearModule = 1'b0; ClearRegister = 1'b0; end // F=2 5'd3: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b1; ClearModule = 1'b0; ClearRegister = 1'b0; end // F=3 5'd9: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b0; ClearModule = 1'b1; ClearRegister = 1'b0; end // F=9 5'd10: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b0; ClearModule = 1'b0; ClearRegister = 1'b1; end // F=9 5'd16: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b0; ClearModule = 1'b0; ClearRegister = 1'b0; end // F=16 5'd17: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b0; ClearModule = 1'b0; ClearRegister = 1'b0; end // F=17 5'd18: begin X = 1'b1; Q = 1'b1; DriveRead = 1'b0; ClearModule = 1'b0; ClearRegister = 1'b0; end // F=18 default: begin DriveRead = 1'b0; ClearModule = 1'b0; ClearRegister = 1'b0; X = 1'b0; Q = 1'b0; end // default F endcase // F end // if (N) else begin DriveRead = 1'b0; ClearModule = 1'b0; ClearRegister = 1'b0; X = 1'b0; Q = 1'b0; end // if (!N) end // always N or S1 or A or F endmodule