Forum Discussion
Hi,
1) UART for burning/programing is the same as a common UART. when I use burning tools to send firmware(elf) via UART, the driver/bootloader in NIOS will get to know whether it is firmware or not, and will then save it at correct location in ROM/flash.
Yes, UART is just a standard serial interface — it doesn’t "know" the type of data. The ability to recognize firmware and write to flash comes from a bootloader that you must implement or include in your NIOS II system. By default, using nios2-download over UART loads the .elf to RAM, not Flash — it won’t persist after a reset.
To burn to flash via UART:
You need a bootloader running on NIOS II that receives the data over UART and writes it to flash.
Or use a prebuilt tool that supports flashing via UART (some vendors provide this).
Summary: UART works, but only if you have proper firmware on the device to handle the incoming data. It's not automatic.
2) I can use both UART or JTAG interface to burn both firmware(elf) and bitstream(sof).
JTAG can program:
FPGA bitstream (.sof)
NIOS II firmware (.elf)
UART can:
Transfer .elf into RAM (temporary execution only)
Not program .sof (bitstream) — this requires JTAG or a Flash device during power-up
Summary: You cannot program .sof via UART. Only firmware (and only if a bootloader is present).
3) I am using Quartus 18.1. In compilation report, I can see the total size of memory used, but I can't see the total memory available.
For ROM, I have the same question.
Quartus shows how much memory your design uses, but not how much is available directly in the report.
To find total available memory:
Look up the FPGA part number in the Intel FPGA datasheet
Example: Cyclone IV E EP4CE10 has 414 Kbits (~51.75 KB) of total embedded memory (M9Ks)
For ROM, if you use on-chip memory as ROM:
Its size is defined when you add the memory block in Platform Designer (Qsys).
Check Qsys or system.h file to see exact size.
4) in the following picture, Total PLL is 1. however, I didn't import PLL IP. why does it report 1 PLL used?
Valid and common question
Quartus sometimes inserts a PLL automatically even if you didn’t manually add one.
Reasons:
Clock source needs frequency conversion to meet timing
NIOS II debug interface or clock crossing domains
IP blocks internally require it (e.g., clocked video or SDRAM controller)
Summary: It's normal. Quartus uses PLL resources behind the scenes even if you didn’t explicitly configure a PLL.