// slider.v -- Interface to Windows slider application // Ed Doering // 07/25/2000 // // Accepts information from parallel port (need more description) // /* Sliders U? ( // Inputs: ); */ //------------------------------------------------------------------------------- module Sliders ( // Interface to Windows slider application // Inputs: I$Clock // Master clock (must be approximately 12MHz) , I$Reset // Master reset, active high , I$ParallelPort // Lower six bits of PC parallel port // Outputs: `ifdef UseSliderA , O$SliderA // Slider value A `endif `ifdef UseSliderB , O$SliderB // Slider value B `endif `ifdef UseSliderC , O$SliderB // Slider value C `endif ); // Port mode declarations: input I$Clock; input I$Reset; input [5:0] I$ParallelPort; `ifdef UseSliderA output [`SliderBitsA - 1 : 0] O$SliderA; `endif `ifdef UseSliderB output [`SliderBitsB - 1 : 0] O$SliderB; `endif `ifdef UseSliderC output [`SliderBitsC - 1 : 0] O$SliderC; `endif // Constant parameter declarations parameter p$ShiftRegisterBits = 16; `ifdef UseSliderA parameter p$SliderAddressA = `SliderAddressA; parameter p$SliderBitsA = `SliderBitsA; `endif `ifdef UseSliderB parameter p$SliderAddressB = `SliderAddressB; parameter p$SliderBitsB = `SliderBitsB; `endif `ifdef UseSliderC parameter p$SliderAddressC = `SliderAddressC; parameter p$SliderBitsC = `SliderBitsC `endif // Registered variable declarations: reg [p$ShiftRegisterBits-1:0] r$ShiftRegister; reg [7:0] r$ParallelPort; `ifdef UseSliderA reg [`SliderBitsA - 1 : 0] O$SliderA; `endif `ifdef UseSliderB reg [`SliderBitsB - 1 : 0] O$SliderB; `endif `ifdef UseSliderC reg [`SliderBitsC - 1 : 0] O$SliderC; `endif // Wire variable declarations: wire w$MD2PadToBuffer; wire w$MD2; wire w$MD0PadToBuffer; wire w$MD0; wire w$SerialClock; wire w$LatchData; // // Make 8-bit register for parallel port, and synchronize to rising edge of master clock // // Instantiate pads and buffer for mode pins (M2 is bit 7 of parallel port, M0 is bit 6) MD2 Mode2_Pad (.I(w$MD2PadToBuffer)); IBUF Mode2_Buffer (.I(w$MD2PadToBuffer), .O(w$MD2)); MD0 Mode0_Pad (.I(w$MD0PadToBuffer)); IBUF Mode0_Buffer (.I(w$MD0PadToBuffer), .O(w$MD0)); // Combine mode pins with lower parallel port pins into eight bit register always @ (posedge I$Clock or posedge I$Reset) if (I$Reset == 1) r$ParallelPort <= 0; else r$ParallelPort <= {w$MD2, w$MD0, I$ParallelPort}; // Make simple variable names for signals that will be used as clocking signals below // (synthesis tool does not like to see a bus bit like 'r$ParallelPort[5]' in the // sensitivity list) assign w$SerialClock = r$ParallelPort[5]; assign w$LatchData = r$ParallelPort[7]; // // Shift register: // // NOTE: The current version of the Windows sliders application uses the parallel port pins // as follows: // // 4:0 Address of slider register // 5 Serial clock // 6 Serial data // 7 Latch enable // always @ (posedge w$SerialClock or posedge I$Reset) if (I$Reset == 1) r$ShiftRegister <= 0; else r$ShiftRegister <= {r$ShiftRegister[p$ShiftRegisterBits-2:0],r$ParallelPort[6]}; // // Output registers // always @ (posedge w$LatchData or posedge I$Reset) if (I$Reset == 1) begin `ifdef UseSliderA O$SliderA <= 0; `endif `ifdef UseSliderB O$SliderB <= 0; `endif `ifdef UseSliderC O$SliderC <= 0; `endif end else casex (I$ParallelPort[4:0]) `ifdef UseSliderA p$SliderAddressA : O$SliderA <= r$ShiftRegister[p$SliderBitsA - 1 : 0]; `endif `ifdef UseSliderB p$SliderAddressB : O$SliderB <= r$ShiftRegister[p$SliderBitsB - 1 : 0]; `endif `ifdef UseSliderC p$SliderAddressC : O$SliderC <= r$ShiftRegister[p$SliderBitsC - 1 : 0]; `endif endcase // // End of description! // endmodule