##環境
- Terasic DE0-Nano
- Quartus Prime 18.1 Lite Edition
- DE0-Nano_v.1.2.4_SystemCD Users Manual
- DE0-Nano_My_First_Fpga_v1.0.pdf
- My_First_NiosII_Qsys.pd
Verilog HDLでLチカ
DE0-Nano_My_First_Fpga_v1.0.pdfの通りやってLチカ成功。
NiosIIでLチカ
My_First_NiosII_Qsys.pdfに記述されている方法を試す。
Creation Hardware Design
DE0_NANO_QSYS DE0_NANO_QSYS_inst
(
.clk_50 (CLOCK_50),
.out_port_from_the_pio_led (LED),
.reset_n (1'b1)
);
これの通りでは以下のエラーが出る。
Error (12002): Port "clk_50" does not exist in macrofunction "DE0_NANO_QSYS_inst"
Error (12002): Port "out_port_from_the_pio_led" does not exist in macrofunction "DE0_NANO_QSYS_inst"
Error (12002): Port "reset_n" does not exist in macrofunction "DE0_NANO_QSYS_inst"
以下の記述でコンパイルが通る
DE0_NANO_QSYS DE0_NANO_QSYS_inst
(
.clk_clk (CLOCK_50),
.pio_led_external_connection_export (LED),
.reset_reset_n (1'b1)
);
Qsys -> Generate -> Show Installation Templateの記述を参考にした。
Creation of Software Design
NiosII EclipseでHello Worldテンプレートを使ってビルドすると以下のエラーになる。
error: ld returned 1 exit status
以下を参考にenable_lightweight_device_driverを有効にすることで解決した。
LチカCコードをビルドすると、以下のエラーになる。
hello_world.c:31:32: error: 'LED_BASE' undeclared (first use in this function)
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, count & 0x01);
LED_BASEの記述は、Platform DesignerでPIOに名付けた名前に「_BASE」を後ろにつけるルールらしい。
以下のコードで通るようになった。
#include <system.h>
#include <altera_avalon_pio_regs.h>
int main()
{
printf("Hello from Nios II!\n");
int count = 0;
int delay;
while(1)
{
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, count & 0x01);
delay = 0;
while(delay < 1000000)
{
delay++;
}
count++;
}
return 0;
}
実行するためRun -> Run Configuration -> Nios II Hardwareを選択すると以下のエラーが出た。
[Target Connection]: Connected system ID hash not found on target at expected base address.
単純にハードが起動していないことが原因だった。
Quartus Programmer -> Start を押下して、ハードを起動させる。
Nios II Eclipse -> Runとして、ソフトを走らせる。
Lチカ成功!