[WORKFLOW RELEASE] Vidor sample projects are opensource!

Peripherals project have _lite.qsys files in repository.

It's first building qsys netlist that is used as component in top verilog where your building fail.

I think I had some discussion before and posted some buildscript fixed for lite version

Figured it out, thanks.

Had to open the projects/MKRVIDOR4000_peripherals_lite_sys project, open Settings, Files and click Add All (then remove non Lite version qsys file).

Re-ran build_all.sh and Arduino project now compiles successfully!

Hi,

what about video performance? As I read Cyclone 10 LP is pretty slow device. Spec sheet says 640 Mbps in LVDS mode while MIPI is up to 1Gbps pre lane.

Are HDMI max resolution and fps known?

Best regards, Sergei

Sorry for linking Xilinx appnote
https://www.xilinx.com/support/documentation/application_notes/xapp495_S6TMDS_Video_Interface.pdf

There you can find different display resolution vs needed bandwith in TMDS.

With 650 Mbps you can have XGA (1024x768@60fps 24b)

thank you, Limba. I am OK with Xilinx :slight_smile:

Hi.

Apparently, the port of Adafruit GFX for VidorBistream needs some adjustments.
The code for filling the primitives will mostly use writeVLine() function, while SDRAM would much prefer the horizontal lines.

VStrakh:
Hi.

Apparently, the port of Adafruit GFX for VidorBistream needs some adjustments.
The code for filling the primitives will mostly use writeVLine() function, while SDRAM would much prefer the horizontal lines.

Also that's pretty slow if you have lite version NIOS II e. Recommend to use HW acceleration for H lines and BMP copy

What's the rules on using 'update_fw.sh' script?

I always get error from 'quartus_cdb' and 'quartus_asm', telling that I should run 'quartus_map' first with the top-level entity. Is it about the paths to database?
When I explicitly enter the /build subdir in the project, those steps are performed ok when done manually.
But then the entire 'update_fw.sh' won't run from within /build subdir.
Adding 'build/' path in front of $PROJECT_NAME in 'update_fw.sh' seemingly achieves the desired effect.

I think you have to call build_all.sh in project folder. you have to add scripts folder to path env variable.

Limba:
I think you have to call build_all.sh in project folder. you have to add scripts folder to path env variable.

Well, the whole idea of 'update_fw.sh' is to update the data to be put in on-chip ram, without recompiling the entire fpga project.
Maybe it's not used by the devs at all, or wasn't adapted to the flow/environment that was published on github...

you have compiled project at least one time?

Yes, of course. There would be nothing to update if 'build_all.sh' run wasn't successfully completed at least once :slight_smile:

Hello I am arduino/VHDL user, and I wanted more powerful camera for my project with parallel data connection, it can be used as bridge between my fpga and camera with standard 1080p, 480p in highspeed .

for this purpose i need to connect ov4689 camerachip with MIPI interface, is it possible to use this and how about source code in vhdl ? source code in vhdl which is MIPI to parallel data and HDMI output (to check whther it works or not )

can you provide all source codes free ?

Were you planning to use mipi_rx_st ip in another device than vidor?
Maybe study that that ip how mipi receiver is done and create your own ip. IP is done with System Verilog.

If you have C/C++/C# experience then System Verilog syntax is not that hard.

MIPI_RX_ST
Input: MIPI RX and MIPI CLK.
Ouput: Avalon steam master

Edit:
It also seems to do Bayer to RGB filtering. There's more info in wikipedia and it's commented in code.

Not sure if this is the place to do it but I can't seem to build the MKRVIDOR4000_template_mbox project

First of all the output looks completely different from when I try to compile MKRVIDOR4000_template_bare (which seems to work)

As far as I can figure out the issue seems to be this bit

2019.06.12.11:59:41 Info: Adding qspi [arduino_generic_quad_spi_controller2 18.1]
2019.06.12.11:59:41 Warning: qspi: Component type arduino_generic_quad_spi_controller2 is not in the library

I also included the whole output in the case that is needed.

$ I:/Downloads/VidorBitstream/TOOLS/scripts/build_all.sh
2019.06.12.12:10:48 Info: Saving generation log to I:/Downloads/VidorBitstream/projects/MKRVIDOR4000_template_mbox/build/MKRVIDOR4000_template_mbox_lite_sys/MKRVIDOR4000_template_mbox_lite_sys_generation.rpt
2019.06.12.12:10:48 Info: Starting: <b>Create HDL design files for synthesis</b>
2019.06.12.12:10:48 Info: qsys-generate I:\Downloads\VidorBitstream\projects\MKRVIDOR4000_template_mbox\build\MKRVIDOR4000_template_mbox_lite_sys.qsys --synthesis=VERILOG --output-directory=I:\Downloads\VidorBitstream\projects\MKRVIDOR4000_template_mbox\build\MKRVIDOR4000_template_mbox_lite_sys\synthesis --family="Cyclone 10 LP" --part=10CL016YU256C8G
2019.06.12.12:10:48 Info: Loading build/MKRVIDOR4000_template_mbox_lite_sys.qsys
2019.06.12.12:10:48 Info: Reading input file
2019.06.12.12:10:48 Info: Adding JTAG_BRIDGE_0 [JTAG_BRIDGE 1.0]
2019.06.12.12:10:48 Info: Parameterizing module JTAG_BRIDGE_0
2019.06.12.12:10:48 Info: Adding clk [clock_source 18.1]
2019.06.12.12:10:48 Info: Parameterizing module clk
2019.06.12.12:10:48 Info: Adding flash_clk [clock_source 18.1]
2019.06.12.12:10:48 Info: Parameterizing module flash_clk
2019.06.12.12:10:48 Info: Adding flash_spi [tiny_spi 1.0]
2019.06.12.12:10:48 Info: Parameterizing module flash_spi
2019.06.12.12:10:48 Info: Adding mb [MAILBOX 1.0]
2019.06.12.12:10:48 Info: Parameterizing module mb
2019.06.12.12:10:48 Info: Adding nina_spi [tiny_spi 1.0]
2019.06.12.12:10:48 Info: Parameterizing module nina_spi
2019.06.12.12:10:48 Info: Adding nios2_gen2_0 [altera_nios2_gen2 18.1]
2019.06.12.12:10:48 Info: Parameterizing module nios2_gen2_0
2019.06.12.12:10:48 Info: Adding onchip_memory2_0 [altera_avalon_onchip_memory2 18.1]
2019.06.12.12:10:48 Info: Parameterizing module onchip_memory2_0
2019.06.12.12:10:48 Info: Adding pex_pio [PIO 1.0]
2019.06.12.12:10:48 Info: Parameterizing module pex_pio
2019.06.12.12:10:48 Info: Adding qspi [arduino_generic_quad_spi_controller2 18.1]
2019.06.12.12:10:48 Warning: qspi: Component type <b>arduino_generic_quad_spi_controller2</b> is not in the library
2019.06.12.12:10:48 Info: Parameterizing module qspi
2019.06.12.12:10:48 Info: Adding sam_pio [PIO 1.0]
2019.06.12.12:10:48 Info: Parameterizing module sam_pio
2019.06.12.12:10:48 Info: Adding sam_pwm [PWM 1.0]
2019.06.12.12:10:48 Info: Parameterizing module sam_pwm
2019.06.12.12:10:48 Info: Adding sdram [altera_avalon_new_sdram_controller 18.1]
2019.06.12.12:10:48 Info: Parameterizing module sdram
2019.06.12.12:10:48 Info: Adding sysid_qsys_0 [altera_avalon_sysid_qsys 18.1]
2019.06.12.12:10:48 Info: Parameterizing module sysid_qsys_0
2019.06.12.12:10:48 Info: Adding timer_0 [altera_avalon_timer 18.1]
2019.06.12.12:10:48 Info: Parameterizing module timer_0
2019.06.12.12:10:48 Info: Adding wm_pio [PIO 1.0]
2019.06.12.12:10:48 Info: Parameterizing module wm_pio
2019.06.12.12:10:48 Info: Building connections
2019.06.12.12:10:48 Info: Parameterizing connections
2019.06.12.12:10:48 Info: Validating
2019.06.12.12:10:49 Info: Done reading input file
2019.06.12.12:10:51 Error: MKRVIDOR4000_template_mbox_lite_sys.qspi: Component <b>arduino_generic_quad_spi_controller2 18.1</b> not found or could not be instantiated
2019.06.12.12:10:51 Info: MKRVIDOR4000_template_mbox_lite_sys.sdram: SDRAM Controller will only be supported in Quartus Prime Standard Edition in the future release.
2019.06.12.12:10:51 Info: MKRVIDOR4000_template_mbox_lite_sys.sysid_qsys_0: System ID is not assigned automatically. Edit the System ID parameter to provide a unique ID
2019.06.12.12:10:51 Info: MKRVIDOR4000_template_mbox_lite_sys.sysid_qsys_0: Time stamp will be automatically updated when this component is generated.
2019.06.12.12:10:51 Warning: MKRVIDOR4000_template_mbox_lite_sys.JTAG_BRIDGE_0: Interrupt sender <b>JTAG_BRIDGE_0.irq</b> is not connected to an interrupt receiver
2019.06.12.12:10:51 Warning: MKRVIDOR4000_template_mbox_lite_sys.flash_spi: Interrupt sender <b>flash_spi.irq</b> is not connected to an interrupt receiver
2019.06.12.12:10:51 Warning: MKRVIDOR4000_template_mbox_lite_sys.nina_spi: Interrupt sender <b>nina_spi.irq</b> is not connected to an interrupt receiver
2019.06.12.12:10:51 Warning: MKRVIDOR4000_template_mbox_lite_sys.JTAG_BRIDGE_0: <b>JTAG_BRIDGE_0.event</b> must be connected to an Avalon-MM master
2019.06.12.12:10:51 Error: MKRVIDOR4000_template_mbox_lite_sys.qspi.avl_mem: Data width must be of power of two and between 8 and 4096
2019.06.12.12:10:51 Info: MKRVIDOR4000_template_mbox_lite_sys: Generating <b>MKRVIDOR4000_template_mbox_lite_sys</b> "<b>MKRVIDOR4000_template_mbox_lite_sys</b>" for QUARTUS_SYNTH
2019.06.12.12:10:53 Info: Interconnect is inserted between master JTAG_BRIDGE_0.avalon_master and slave mb.mst because the master has address signal 32 bit wide, but the slave is 9 bit wide.
2019.06.12.12:10:53 Info: Interconnect is inserted between master JTAG_BRIDGE_0.avalon_master and slave mb.mst because the master has waitrequest signal 1 bit wide, but the slave is 0 bit wide.
2019.06.12.12:10:53 Info: Interconnect is inserted between master JTAG_BRIDGE_0.avalon_master and slave mb.mst because the master has readdatavalid signal 1 bit wide, but the slave is 0 bit wide.
2019.06.12.12:10:55 Error: null

Thanks in advanced for any help or advice.

Kergadon:
2019.06.12.11:59:41 Info: Adding qspi [arduino_generic_quad_spi_controller2 18.1]
2019.06.12.11:59:41 Warning: qspi: Component type arduino_generic_quad_spi_controller2 is not in the library

Did you apply patches to Quartus? You need to do it once.

Run the NIOS II Command shell, move to the TOOLS/scripts directory of the VidorBistream repository, and launch the 'apply_quartus_patches.sh'

I ran into the build error as well and found I had to run through the following on Windows 10 64-bit to get a successful build:
NOTE: This was parsed from the vidor-libraries/VidorBitstream github repo under:
"Things to know before getting started"

  1. Open the NIOS II Command shell and set the PATH variable:
    $ PATH=$PATH:/cygdrive/h/Development/Arduino_config/MKR_Vidor_4000/fpga/VidorBitstream/TOOLS/scripts
    NOTE: This was valid for my config.

  2. Then change directories to the VidorBitstream directory.
    NOTE: I did this from one directory up instead.

$ cd /cygdrive/h/Development/Arduino_config/MKR_Vidor_4000/fpga/VidorBitstream/

or

$ cd /cygdrive/h/Development/Arduino_config/MKR_Vidor_4000/fpga

  1. Set the permissions to the files under VidorBitstream

$ chmod -R a+rw *

  1. Then under the TOOLS/scripts directory, run the patch script
    $ cd /cygdrive/h/Development/Arduino_config/MKR_Vidor_4000/fpga/VidorBitstream/TOOLS/scripts

$ apply_quartus_patches.sh

  1. Download and install the GO Programming language and build makeCompositeBinary.
    $ cd ../makeCompositeBinary

$ go build -o makeCompositeBinary make_composite_binary.go

  1. Build an example:
    $ cd /cygdrive/h/Development/Arduino_config/MKR_Vidor_4000/fpga/VidorBitstream/projects/MKRVIDOR4000_graphics

$ build_all.sh

This resulted in the following for me:

Info: Quartus Prime Shell was successful. 0 errors, 352 warnings
    Info: Peak virtual memory: 4626 megabytes
    Info: Processing ended: Sat Jun 22 02:28:30 2019
    Info: Elapsed time: 00:06:33
    Info: Total CPU time (on all processors): 00:00:05
create ram + flash app.ttf
Jun 22, 2019 2:28:30 AM - (INFO) elf2flash: args = --input=build/software/MKRVIDOR4000_graphics/MKRVIDOR4000_graphics_lite.elf --output=build/output_files/MKRVIDOR4000_graphics_lite.flash --base=0x008E0000 --end=0x008FFFFF --verbose --save
Jun 22, 2019 2:28:30 AM - (FINE) elf2flash: Starting
Jun 22, 2019 2:28:30 AM - (FINE) elf2flash: Done
projects
ip
cp: omitting directory './ip/GFX/arduino/Vidor_GFX/examples'
cp: omitting directory './ip/QUAD_ENCODER/arduino/VidorEncoder/examples'
cp: omitting directory './ip/NEOPIXEL/arduino/VidorNeopixel/examples'
cp: omitting directory './ip/MIPI_RX_ST/arduino/VidorCamera/examples'

I hope this is on topic.

After perfoming the VidorBistream build process and replacing the existing VidorGraphics Arduino IDE libraries folder with that built from VidorBitstream, ex;VidorBitstream\distrib\MKRVIDOR4000_graphics, as Martino explained to me has rendered my Vidor 4000 Graphics as non functional. I put the original library files back in place but still no luck; none of the VidorGraphics examples or code I had previously created and which were working are working now. All I get on the HDMI output is a white screen with the Arduino log in the middle but not the one from the DrawLogo example.

Okay, so I downloaded, built and loaded VidorBoot from the vidor-libraries GitHub repro and all is right again with the Vidor 4000.

I just built VidorGraphics from the VidorBitstream repo (using Quartus 18.1), and successfully flashed the VidorQrRecognition example sketch to my board.

I have a camera and an HDMI monitor connected, and the monitor shows the camera video fine, but the QR recognition is not working - the blue crossmarks in QR markers are not shown.

If I use the pre-built VidorGraphics (downloaded through "Manage Libraries"), the QR recognition works correctly.

I also note that the pre-built VidorGraphics has version no. "1.1.0" in "Manage Libraries", and my built-from-source version also has version no. "1.1.0" in library.properties, but they are not identical - for example, the "VidorQrRecognition" example from the pre-built library has the famous "while (!Serial);" line, but the VidorQrRecognition example from the github VidorBitstream repo does not.

Is there a known bug regarding QR recognition when building from the github repo? If not, any suggestions on how to troubleshoot?