SOPC实验程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:FPGA_NIOS_II应用举例
#include "sys/alt_stdio.h"
#include "unistd.h"
int main()
{
alt_putstr("Hello from Nios II!\n");
/* Event loop never exits. */
while (1){
alt_putstr("Hello 0826!\n");
usleep(100000);
}
return 0;
}
实验二:跑马灯实验(建立Quartus工程
1. 新建Quartus工程RunningLED,顶层实体名RunningLED
2. 重新设置编译输出目录为../ RunningLED/release)
#include "system.h"
#include <sys/alt_irq.h>
#include "alt_types.h"
#include <io.h>
// Internal Timer Overflow interrupt
static void timer_overflow(void* context, alt_u32 id)
{
IOWR(TIMER_BASE, 0, 0);
if(*(alt_u8*)context&0x80)
{
*(alt_u8*)context=0x01;
}
else
{
*(alt_u8*)context=*(alt_u8*)context<<1;
}
IOWR(PIO_LEDG_BASE, 0, *(alt_u8*)context);
return;
}
int main( )
{
alt_u8 led=0x01;
// Register Interrupt Service Routine(ISR)
alt_irq_register(TIMER_IRQ, (void*)&led, timer_overflow);
while(1);
}
实验二: Hello World example.
#include <stdio.h>
int main()
{
printf("Hello from Nios II!\n");
return 0;
}
实验三:C2H编译器实验(该实验将演示在Nios II处理器编写程序的时候,Nios II IDE
中所带的C2H Compiler工具的作用。

什么是C2H?它是(C to Hardware)的缩写,能将你原本的软件C语言程序代码变成硬件实现)(右击工程,Run As->Nios II Hardware,可以看到红色LED灯轮流闪烁。

如果是以Release方式编译,那么闪烁将相对较快,如果以Debug方式编译,那么闪烁和使用500ms的Timer速度差不多。


#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
int main (void) __attribute__ ((weak,alias ("alt_main")));
void delay (void)
{
alt_u32 i=0,j=0;
while (i<100000)
i++;
while (j<100000)
j++;
return;
}
int alt_main (void)
{
alt_u32 led =0x2;
alt_u8 dir = 0;
while (1)
{
if (led & 0x00080001)
{
dir = (dir ^ 0x1);
}
if (dir)
led =led >> 1;
}
else
{
led = led << 1;
}
IOWR_ALTERA_A V ALON_PIO_DATA(PIO_LEDR_BASE,led);
delay();
}
return 0;
}
实验五:SDRAM读写测试实验(该实验主要完成对SDRAM读写的测试。

主要讲解如
何使用SDRAM,由于DE2-70上的SDRAM是两片,所以比使用Flash稍微复杂一点点。

通过本实验,读者应该了解不同器件对时钟的需求不同,并学会如何创建新的时钟。

两片SDRAM的用法可以是统一使用,即只建立一个SOPC的SDRAM模块,数据宽32位,也可以分开使用,即建立两个SOPC的模块,数据宽度16位,本例是读写测试,需要知道两片各自独立的基址,故使用后一种用法。

)(建立Quartus工程
1. 建立一个新的工程SDRAMTest。

2. 重新设置编译输出目录为../ SDRAMTest/release )
#include"stdio.h"
#include"system.h"
int main( )
{
short*sdram1=(short*)SDRAM_U1_BASE;
short*sdram2=(short*)SDRAM_U2_BASE;
int i;
int right;
short temp;
printf("testing sdram1... \n");
for(i=0;i<0x1000000;i++)
{
*(sdram1+i)=0x55aa;
}
right=1;
for(i=0;i<0x1000000;i++)
{
temp=*(sdram1+i);
if(temp!=0x55aa)
{
right=0;
printf("sdram1 test failed at %d",i);
}
}
if(right)
printf("sdram1 test ok!\n");
printf("testing sdram2... \n");
for(i=0;i<0x1000000;i++)
{
*(sdram2+i)=0x55aa;
}
right=1;
for(i=0;i<0x1000000;i++)
{
temp=*(sdram2+i);
if(temp!=0x55aa)
{
right=0;
printf("sdram2 test failed at %d",i);
break;
}
}
if(right)
printf("sdram2 test ok!\n");
return 0;
}
大作业:交通灯
#include "system.h"
#include <sys/alt_irq.h>
#include "alt_types.h"
#include <io.h>
#define SEG7_SET(index, seg_mask) IOWR(SEG7_DISPLAY_BASE,index,seg_mask) #define SEG7_NUM 4
static alt_u16 shu[] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBF,
0xE0,0xFF,0xF6}; // 0,1,2, (9)
void SEG7_Clear(void){
int i;
for(i=0;i<SEG7_NUM;i++){
SEG7_SET(i, 0x00);
}
void SEG7_tt(void){
SEG7_SET(0, 0x8C);
SEG7_SET(1, 0xE0);
SEG7_SET(2, 0x8C);
SEG7_SET(3, 0xE0);
}
int alt_main(void)
{
SEG7_tt();
usleep(5000000);
alt_u16 s1[][4] =
{{shu[5],shu[0],shu[5],shu[0]},
{shu[4],shu[0],shu[4],shu[0]},
{shu[3],shu[0],shu[3],shu[0]},
{shu[2],shu[0],shu[2],shu[0]},
{shu[1],shu[0],shu[1],shu[0]}}; alt_u16 s2[][4] =
{{shu[5],shu[1],shu[0],shu[1]},
{shu[4],shu[1],shu[9],shu[0]},
{shu[3],shu[1],shu[8],shu[0]},
{shu[2],shu[1],shu[7],shu[0]},
{shu[1],shu[1],shu[6],shu[0]},
{shu[0],shu[1],shu[5],shu[0]},
{shu[9],shu[0],shu[4],shu[0]},
{shu[8],shu[0],shu[3],shu[0]},
{shu[7],shu[0],shu[2],shu[0]},
{shu[6],shu[0],shu[1],shu[0]},
};
alt_u16 s3[][4] =
{{shu[0],shu[1],shu[5],shu[1]},
{shu[9],shu[0],shu[4],shu[1]},
{shu[8],shu[0],shu[3],shu[1]},
{shu[7],shu[0],shu[2],shu[1]},
{shu[6],shu[0],shu[1],shu[1]},
{shu[5],shu[0],shu[0],shu[1]},
{shu[4],shu[0],shu[9],shu[0]},
{shu[3],shu[0],shu[8],shu[0]},
{shu[2],shu[0],shu[7],shu[0]},
{shu[1],shu[0],shu[6],shu[0]},
};
SEG7_Clear();
int i = 0;
int time;
while(1){
for(time = 10 ; time > 0 ; time--){
for(i = 0;i < 4;i++)
{
SEG7_SET(i, s2[10-time][i]);
}
IOWR(LEDR_BASE,0,0x01);
IOWR(LEDG_BASE,0,0x02);
usleep(1000000);
}
for(time = 5 ; time > 0 ; time--){
for(i = 0;i < 4;i++)
{
SEG7_SET(i, s1[5-time][i]);
}
IOWR(LEDR_BASE,0,0x20);
IOWR(LEDG_BASE,0,0x01);
usleep(1000000);
}
for(time = 10 ; time > 0 ; time--){ for(i = 0;i < 4;i++)
{
SEG7_SET(i, s3[10-time][i]);
}
IOWR(LEDR_BASE,0,0x12);
IOWR(LEDG_BASE,0,0x00);
usleep(1000000);
}
}
}。

相关文档
最新文档