Saturday, February 25, 2012


I got my first order in from BatchPCB, and I have to say that I am very pleased with the quality. The price is hard to beat, and as long as you don't need your board ASAP then I highly recommend them. I don't know if they were trying to sucker me in to doing more business from them, but they gave me two copies of my Logic Level Shifter board that I designed for the price of one. And I have to say that my design worked out great, each board has 12 logic level shifter circuits that are breadboard compatible, and you can break them away or leave a row of them connected and they will fit perfectly on a breadboard. I have a lot of chips that work on different TTL logic levels that I need to communicate with a 5V or 3.3V microcontroller or FPGA, so these little circuits are very useful for me.

Saturday, February 4, 2012

Dropbox Special Forum Build

For those that haven't heard, Dropbox is a great utility for synchronizing data between multiple computers and portable devices while giving you basic version control, file hosting, and collaborative group folders capabilities. It's my cloud storage of choice for it's ease of use, cross-platform capabilities, and streamlined interface that blends right into your OS.

Anyways I came across an article that pointed me to this forum post: Dropbox forum

Essentially, it says that if you are willing to partake in an experiment you can get up to 5GB of storage free as opposed to the standard 2GB free.

Friday, January 27, 2012

FPGA to 74HC595 Shift Register Module in Verilog

I have had this 74HC595 IC sitting around for quite some time. And earlier this week I decided it was time for me to actually start using it...or at least start learning how I could use it. This chip is a Serial-In Parallel-Out 8-bit shift register that can be used in a variety of ways and it can be cascaded with more of these ICs to create a larger shift register if needed. My plan is to use this newly developed module to act as a low pin count interface between the FPGA and my 16x2 Character LCD module. This will allow me to utilize 4-wires to control the 8-bit parallel interface on the LCD (not including the LCD control lines). This reduced the FPGA pin utilization from 11 pins down to 7 pins...not to shabby. Anyways for those that are interested, the code is linked below. Please note: this module is very much application specific and that it does not enable all practical uses of the 74HC595 IC. For instance, the SRCLR signal is not used and is permanently tied to VCC so that it never clears the register; this of course, may not suit your needs, however the code is heavily commented and adaptation of the code should be fairly simple.

The functional operation of the module can be seen in this timing diagram simulation:

The yellow markers are showing the beginning and end of one complete 8-bit shift operation. This simulation is using a 50ns clock period which is slightly slower than the 24MHz clock that my actual FPGA is using. This simulation shows that it takes about 89 clocks to process a request. 89 clocks at 24MHz is about 3.7us.

Signal Descriptions:

  • RDY: A bit that indicates that the FPGA_2_ShiftReg is idle and is ready to process a request
  • RCLK: A signal sent to the shift register which instructs the output registers to read from the shift register taps
  • SRCLK: A signal sent to the shift register which instructs the 8-bit shift register to shift the register bits and read from the serial input and push it into the LSB.
  • OE: A signal sent to the shift register which sets the output in either Hi-Z (output disabled) or Lo-Z (output enabled). This is an active low signal.
  • SER_OUT: The Serial signal sent to the shift register.
  • CLK: The FPGA's local oscillator which drives the rest of the logic.
  • BYTE_IN: An 8-bit value that is fed into the FPGA_2_ShiftReg module
  • PB: A signal created for simulation purposes to instruct the module to read the 8-bit value from BYTE_IN. Every time this pushbutton is pressed the FPGA_2_ShiftReg module is activated and instructed to read the BYTE_IN. Also the driving module (the module that instantiates and uses the FPGA_2_ShiftReg module) increments the BYTE_IN value by one.