一、硬件(使用的是Quartus II 9.0)
1、建立工程,打开SOPC Builder,添加CPU(次部分可根据实际硬件平台更改)。
选择标准NIOS即可
2、添加PLL
点击Launch Altera‘s ALTPLL MegaWizard
器件速度等级按自己的FPGA选择,我的FPGA是EP2C8,所以选择8
输入时钟根据晶振决定,我的板子上是50MHz
输出两个时钟:
C0 50MHz 相位 0
C1 50MHz 相位 -72度
将Clock Settings中的pll.co更名为sys_clk,pll.c1更名为sd_clk
CPU的clock选择sys_clk
3、添加SDRAM(我板子上是K4S641632H)
Presets选择Custom
Data width选择16
4、添加JTAG_UART
5、添加PIO
width选择4,我的板子上只有四个LED
Direction选择Output port only
pio更名为led_pio
6、添加system ID
7、点击System—>Auto Assign Base address和Auto Assign IRQs,系统配置完毕
最后点击“Generate”生成系统
8、在Quartus II新建原理图BDF文件,添加刚建的SOPC
配置I/O后,运行Quartus,并在到目标板上……
二、软件(NIOS II 9.0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* * led.h * * Created on: 2010-7-17 * Author: Administrator */
#ifndef LED_H_
#define LED_H_
void led(unsigned char dir)
{ unsigned char k,led;
unsigned int i,j;
for(k=10;k;k--)
{ for(i=0;i<4;i++)
{ if(!dir) led=1<
else led=8>>i;
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,~led);
j=0; while(j<100000) j++;
}
}
}
#endif /* LED_H_ */
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include
int main()
{ FILE *fp;
char str[6];
char str1[5];
char str2;
fp=fopen("/dev/jtag_uart","r+");
if(fp)
{ while(strcmp(str1,"stop")!=0)
{ printf("Leds are ready,please input start or stop\n");
fgets(str,6,fp);
strcpy(str1,str);
str1[4]='\0';
if(strcmp(str,"start")==0)
printf("Leds have run over,please input p or n or stop\n");
while(strcmp(str1,"stop")!=0)
{ str2=getc(fp);
if(str2=='n')
{ led(0);
printf("Leds have run over,please input p or n or s\n");
}
else if(str2=='p')
{ led(1);
printf("Leds have run over,please input p or n or s'\n");
} else if(str2=='s') strcpy(str1,"stop");
}
}
}
printf("Leds have run over\n"); fclose(fp);
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
运行