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:
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:
For ROM, if you use on-chip memory as ROM:
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.