DE0-Nano FPGA Tilt Sensing

Program Download:

Verilog/Project Archive
DE0_NANO_G_Sensor.v
DE0_NANO_GSensor.zip

The Software
           Now, let's take a look at the verilog used to talk to both the breakout board and the accelerometer. There's two main parts to the Verilog for this project.
    -Gigantic IF Statement
    -Main Verilog Module

           So the verilog written for this project was pulled out of one of the examples given with the DE0-Nano demo board CD-ROM. This was a real time saver as they already wrote up the SPI engine to talk to the accelerometer. It was just a matter of modifying the returned G-Force data to output to the breakout board like I wanted it to. The if statement seen below parses the 1-G data returned for the 32 bits of the 32 LEDs on the breakout board.

Gigantic Multiple IF Statement

------------« Begin Code »------------
assign oLED = int2_count[23] ? (		
					(abs_select_high[3:1] == 3'h0) ? 32'h0003C000 :							
                    (abs_select_high[3:1] == 3'h1) ? (signed_bit?32'hF000:32'h000F0000) :
                    (abs_select_high[3:1] == 3'h2) ? (signed_bit?32'h3C00:32'h003C0000) :
                    (abs_select_high[3:1] == 3'h3) ? (signed_bit?32'h0F00:32'h00F00000) :
                    (abs_select_high[3:1] == 3'h4) ? (signed_bit?32'h03C0:32'h03C00000) :
                    (abs_select_high[3:1] == 3'h5) ? (signed_bit?32'h00F0:32'h0F000000) :
                    (abs_select_high[3:1] == 3'h6) ? (signed_bit?32'h003C:32'h3C000000) :
                                                     (signed_bit?32'h000F:32'hF0000000)):
                    (int2_count[20] ? 8'h0 : 8'hff); // Activity
------------« End Code »------------

           The main verilog file shows you how everything is tied together with 4 modules: a reset, a pll for the spi clock, spi engine and output led data parser.

Main Verilog Module

------------« Begin Code »------------
//	Reset
reset_delay	u_reset_delay	(	
            .iRSTN(KEY[0]),
            .iCLK(CLOCK_50),
            .oRST(dly_rst));

//  PLL            
spipll u_spipll	(
            .areset(dly_rst),
            .inclk0(CLOCK_50),
            .c0(spi_clk),      // 2MHz
            .c1(spi_clk_out)); // 2MHz phase shift 

//  Initial Setting and Data Read Back
spi_ee_config u_spi_ee_config (			
						.iRSTN(!dly_rst),															
						.iSPI_CLK(spi_clk),								
						.iSPI_CLK_OUT(spi_clk_out),								
						.iG_INT2(G_SENSOR_INT),            
						.oDATA_L(data_x[7:0]),
						.oDATA_H(data_x[15:8]),
						.SPI_SDIO(I2C_SDAT),
						.oSPI_CSN(G_SENSOR_CS_N),
						.oSPI_CLK(I2C_SCLK));
			
//	LED
led_driver u_led_driver	(	
						.iRSTN(!dly_rst),
						.iCLK(CLOCK_50),
						.iDIG(data_x[9:0]),
						.iG_INT2(G_SENSOR_INT),            
						.oLED(GPIO_0_D));	
------------« End Code »------------

           Download the full project archive above if you're curious to see all the verilog that goes with this project. Again it wasn't built by me, I just modified a small part of the code to make it talk to my breakout board.