Hello artvvb. Thank you for code, but I can't even generate a bitstream yet. Attached is my block diagram (without the GPIO signals for controlling the OLED). Did I do a simple error here?
I keep getting weird errors even though I'm letting Vivado do the automated connecting. The messages are confusing and long (image below). All I want to is drive the PMOD OLED as a simple SPI port device. I managed to set the QSPI to Standard mode, Master, with FIFO enable (tried without FIFO too), but it still doesn't work.
I cannot find a simple SPI example anywhere at Digilent that works with Microblaze; please prove me wrong if I am. Based on recent experience, the Zynq is not a good example to follow trying to program the Microblaze; it's just too confusing and many of the signals don't compare. For example, the Zynq SPI port has a slave select (SS) input that requires a constant to be applied as an input. Does the Microblaze have this same weird requirement?
Is there a "document" (User Guide) that I can follow to set up the SPI port in Microblaze? I found this one (https://www.xilinx.com/support/documentation/ip_documentation/axi_quad_spi/v3_2/pg153-axi-quad-spi.pdf), but it's not helpful with the setup in Vivado.
I can't even get the Nexys 4 Vivado example for the OLED example to compile (found here: https://reference.digilentinc.com/reference/pmod/pmodoled/start?redirect=1); the program says that "IP" structures are out of date, or I'm not allowed to use it for some reason. I keep running into examples that don't compile and this is extremely frustrating to those of us trying to LEARN. And Vivado keeps changing, so the help files get confusing when they deviate from the actual Vivado environment.
Is there ANY OLED or "standard SPI" example (that isn't a flash memory example using QSPI) that actually works? I saw a link to some Github code written by some 3rd party, but the documentation is very poor and doesn't work without correcting all sorts of problems.
I'd be happy just to see a very simple SPI example using the Quad SPI. There are TOO many Zynq examples that are of no help with Microblaze. Any SPI device would be good, so long as it isn't a Zynq example.
This is my constraint file:
# Pmod Header JA
set_property -dict { PACKAGE_PIN G17 IOSTANDARD LVCMOS33 } [get_ports { OLED_DC }]; #OLED D/C IO_L5N_T0_D07_14 Sch=ja[1]
set_property -dict { PACKAGE_PIN G19 IOSTANDARD LVCMOS33 } [get_ports { OLED_RST }]; #OLED RST IO_L4N_T0_D05_14 Sch=ja[2]
set_property -dict { PACKAGE_PIN N18 IOSTANDARD LVCMOS33 } [get_ports { OLED_VBAT }]; #OLED VBAT IO_L9P_T1_DQS_14 Sch=ja[3]
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { OLED_VDDC }]; #OLED VDDC IO_L8P_T1_D11_14 Sch=ja[4]
set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 } [get_ports { OLED_CS[0] }]; #OLED CS IO_L5P_T0_D06_14 Sch=ja[7]
set_property -dict { PACKAGE_PIN H19 IOSTANDARD LVCMOS33 } [get_ports { OLED_MOSI }]; #OLED MOSI IO_L4P_T0_D04_14 Sch=ja[8]
set_property -dict { PACKAGE_PIN J19 IOSTANDARD LVCMOS33 } [get_ports { OLED_MISO }]; #OLED MISO IO_L6N_T0_D08_VREF_14 Sch=ja[9]
set_property -dict { PACKAGE_PIN K18 IOSTANDARD LVCMOS33 } [get_ports { OLED_SCK }]; #OLED SCK IO_L8N_T1_D12_14 Sch=ja[10]
This is my block diagram that doesn't generate a bitstream.
These are the error messages: