Hello, I am using SPARTAN-6 XC6SLX9 on the mojo board. https://embeddedmicro.com/products/mojo-v3.html The design i'm trying to implement is a simple upcounter which counts up whenever a switch is pressed. The switch is active low. However, the always block doesn't seem to execute. Can someone point out the mistake. The code i'm trying to run is: module mojo_top(input xps, // 50MHz clock input input clk, // Input from reset button (active low) input rst_n, // cclk input from AVR, high when AVR is ready input cclk, // Outputs to the 8 onboard LEDs output[7:0]led, // AVR SPI connections output spi_miso, input spi_ss, input spi_mosi, input spi_sck, // AVR ADC channel select output [3:0] spi_channel, // Serial connections input avr_tx, // AVR Tx => FPGA Rx output avr_rx, // AVR Rx => FPGA Tx input avr_rx_busy // AVR Rx buffer full ); wire rst = ~rst_n; // make reset active high // thsignals should be high-z when not used assign spi_miso = 1'bz; assign avr_rx = 1'bz; assign spi_channel = 4'bzzzz; reg [7:0] counts=0; assign led=counts; always@(negedge rst_n) begin counts=counts+1; end endmodule
In your code, which signal represents the switch that is being pressed. The only signal you are dealing with is the reset signal rst_n. Or do you want to count the number of resets? Please describe this more in detail otherwise nobody will be able to help you. Next question is if the switch signal is already debounced. If not you'd need a debouncing circuit as well otherwise it will count up a couple of times for each switch press. An FPGA has only clocked D-flip-flops. So it's mandatory to use clocked (synchronous) logic. In Synchronous logic some basic code not_including debouncing could look like this: module (rst, clk, keypressed, counter); input reset; input clk; input keypressed; output [7:0] counter; reg [7;0] counter; reg key_d1; reg key_d2; reg key_d3; always @(posedge clk or negedge rst) begin if (rst) begin counter <= 8'd0; // on reset clear all registers key_d1 <= 1'b0; key_d2 <= 1'b0; key_d3 <= 1'b0; else key_d1 <= keypressed; // sample input signal twice... key_d2 <= key_d1; // ... to avoid metastability key_d3 <= key_d2; // another delay for raising edge detection if (key_d2 & ~key_d3) begin // raising edge detection counter <= counter + 8'd1; end end end endmodule (I just typed the code in here - no guarantee that it is running as is...)
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.