Skip to content

naelolaiz/learning_fpga

Repository files navigation

learning_fpga

Project containing tests for learning FPGA/VHDL.

Hardware

used board

Software

links

Demos:

Testing VGA driver

New version of vga demo

Driving 4 multiplexed 7 segment digits with alphanumeric characters, with scroll

What it looks like RTL view

Log:

  • Learn VHDL (in progress)

    • hello world: blinking led (+keyboard) : https://github.com/naelolaiz/learning_fpga/tree/main/blink_led
    • driver for 7 segments display
      • basic handling and mux for 4 digits on a simple counter: https://github.com/naelolaiz/learning_fpga/tree/main/7segments/counter
      • extended handling with alphanumeric chars, strings and scrolling: https://github.com/naelolaiz/learning_fpga/tree/main/7segments/text
      • (in progress) simple clock application using entities for compositions: https://github.com/naelolaiz/learning_fpga/tree/main/7segments/clock
        • create reusable entity for digits and connect instances in cascade.
        • create reusable entity for a timer. Use it as clock for the first digit.
        • create reusable entity for a time counter (instatiating a timer inside). Use it for handling the CableSelect on the multiplexed digits.
        • allow two view modes HHMM/MMSS. Change it with a button.
          • use a debouncer for the button (this is the only code that is not mine. It is copied from https://nandland.com/project-4-debounce-a-switch/). I copied it because I knew that it was there, and I was focused on other functionalities. TODO: create my own version.
        • allow setting the time by increasing the numbers with a second button.
          • the speed should be fast, and should depend on the current view mode.
        • allow setting the time by decreasing the numbers with a third button. Update digit entity accordingly.
        • TODO:
          • make the middle dot on the second display to blink. At different intervals depending on the view mode (0.5 sec to change state -period 1hz- for HHMM, 0.25 ? sec to change state in MMSS)
          • add alarm
          • milliseconds view
          • improve set time interface (dynamic speed for increasing/decreasing time)
          • cleanup
          • simplify code to remove redundant timers
  • create a CI github action to compile a vhdl file with ghdl : https://github.com/naelolaiz/learning_fpga/blob/main/.github/workflows/ci.yml

    • TODO: make other vhdl files compatible. At least " Clock" (they don't currently compile because of missing configurations and probably different standards used?)
  • create a CI github infrastructure allowing:

  • TODO:

    • create a simple game with the buttons and the 7 segments display (snake / space invaders)
      • learn how to generate random numbers with the FPGA
    • create a vga text driver
      • adapt 7 segment created entities to use VGA as display (clock, game, ...)
    • create an i2s driver
      • create / find a FFT implementation to
        • create a spectral analyzer (i2s, fft, vga)
        • (+IFFT, +DSP algorithms) create an FX/DSP module
          • (+bluetooth/BLE driver) extend module with wireless audio
  • Learn Verilog (TODO)

more links

About

Testing Cyclone IV dev board.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published