可编程逻辑器件FPGA(CPLD)课程设计_DE2___115.docx

可编程逻辑器件FPGA(CPLD)课程设计_DE2___115.docx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PLD期末课程设计 NIOS II开发 第一章 简介 1.1硬件开发 NIOS II硬件开发主要是通过使用 Qsys 构建 NIOSII 软核,软核主要包括以下几个部分: NIOS II Processor PLL clock sysid sdram controller LCD timer ps2 seg7 led key jtag_uart 其中使用了DE2-115 SystemCD 中官方范例的 IP 和 altera university program 提供的 IP 。 1.2软件开发 NIOS II 的软件开发部分主要实现了以下几个功能: 点亮LED KEY中断 定时器中断 七段数码管 LCD显示字符 PS2键盘 PS2鼠标 1.3基本系统搭建 DE2-115板子上提供的时钟只有50MHz,利用PLL产生三路时钟,clk0为100MHz提供给CPU和需要高速时钟的模块,如:SRAM、SDcard、Jtag_uart等;clk1为相移-65°的100MHz,提供给SDRAM;Mclk2为10MHz提供给那些不需要高速时钟的模块,如:key , led , lcd, timer ps2等。这样就可以根据系统的需要来选择不同的时钟。CPU选择NIOS II/f 型,储存单元选择SDRAM。 第二章 基本功能开发 2.1点亮LED 在Qsys中添加PIO模块,由于红色LED有18个,所以PIO模块中width选择18,direction选择output,其他不变,如下图所示。 编译、分配管脚等步骤后,在NIOS II IDE中system.h可以看到关于LED的相关宏定义。根据LED_BASE就可以读写相应寄存器,实现LED的打开和熄灭。利用PIO读写函数实现了下面几个函数,用来控制LED。 void led(int temp)//根据temp的每一个bit决定么个LED的状态。 //如 temp = 5 即0101,则第1个LED和第三个LED点亮,其他熄灭 { IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE, temp); } void led_on(int i) //将第i个LED点亮。 { int temp = IORD_ALTERA_AVALON_PIO_DATA(LEDR_BASE); IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE, temp|1i); } void led_off(int i) //将第i个LED点亮。 { int temp = IORD_ALTERA_AVALON_PIO_DATA(LEDR_BASE); IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE, temp(~(1i))); } void led_toggle(int i)//将第i个LED的状态去反。即由点亮变熄灭,由熄灭变点亮 { if(tag[i] == 0)//如果为熄灭 { tag[i]=1;//点亮 led_on(i); } else //如果为点亮 { tag[i]=0; //熄灭 led_off(i); } } 利用上述函数实现一个简单跑马灯,程序如下所示: while (1) { for (int i = 0; i 8; i++) { usleep(100000); led_on(17 - i); usleep(100000); led_off(17 - i); } } 2.2 按键中断 在Qsys中添加PIO模块,由于按键有四个,所以width选择4,direction选择input,Edge Type选Falling,具体配置如下图所示。 key1按下时点亮LED8,key2按下时熄灭LED8,这样key1和key2就可以控制LED8的状态。Key3按下时使LED9的状态翻转,依次熄灭 、点亮。key4按下时,7段数码管0和1显示0,即清零。同时每个按键按下时,会在LCD上显示哪个按钮被按下。 按键中断初始化程序和中断服务程序如下所示: /* * 按键中断服务程序 */ void key_isr(void* context, alt_u32 id) { volatile int *edge_capture_ptr = (volatilDe int*) context; *edge_ca

文档评论(0)

liyxi26 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档