SOPC实验报告(不含综合实验)_第1页
SOPC实验报告(不含综合实验)_第2页
SOPC实验报告(不含综合实验)_第3页
SOPC实验报告(不含综合实验)_第4页
SOPC实验报告(不含综合实验)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#SOPC系统搭建实验步骤:一、系统模块设计FPGANios IICPUJTAG UARTTimer定时器AVALONSDRAM ctrollerSDRAM chipCH452_controller_IPcore4×4矩阵键盘led_pio (4 bits)8个动态数码管UART ctroller电平转换RS-232 to PCCH452键盘显示管理芯片 PLL自主PWM_IPcoreLED灯(观察?)控制四个LED灯2、 建立Quartus工程设定工程目录、工程名、选择器件等;建立一个与工程名相同的顶层图形设计文件;将两个相关文件夹拷到工程目录下;3、 进入SOPC Builder

2、,搭建Nios2系统模块确定FPGA芯片型号和和系统工作频率;添加Nios2处理器并配置;添加JTAG UART调试模块;添加SDRAM控制器;添加Time core并配置;添加UART并配置;添加PIO Core,配置为4位输出,控制台上的4个LED灯;添加CH452_controllerIPcore;添加自主IPcore(PWM);选择自动分配地址和中断号;设定CPU启动地址和异常处理地址;Generate生成Nios2模块;4、 在Quartus顶层图形设计文件中添加(insert symbol)Nios2系统模块;添加alt_pll并配置;添加Timer_out辅助电路;添加(inse

3、rt symbol)input、output、bidir引脚并连线;设定未用引脚状态为三态,编译工程;进行引脚分配(如下所示);再次编译;下载.sof文件下为引脚分配示意图:系统搭建完毕后的硬件核截图:实验小结:系统搭建其实是本次实验中最难倒我们的部分,主要是在搭建过程中我们组与老师的进度脱节,以至于出现了不切实际的设计部分而我们又不自知。这带来的后果则是我们在做后续的实验中频频遭遇问题而难以从代码和设置上解决,这个影响甚至持续到UART实验部分。好在我们在最后完全修正了系统的设置问题也检查了引脚的正确性,最终使用了正确的系统完成了后续的实验。#基本实验实验步骤:1. 建立软件工程-test,

4、并与硬件系统绑定2. 选择“hello world”模板,设系统库属性, 添加 #include <system.h> 添加 #include <altera_avalon_pio_regs.h>3. builder工程,有错则修改,直到正确4. run 程序,调试信息窗内应显示“Hello from Nios II!”5. 打开“system.h”,查看系统硬件信息,熟悉相关内容 打开 altera_avalon_pio_regs.h 熟悉PIO控制方法6. 修改程序,使调试信息窗内显示出和实验学生相关的信息,例如“Hello from 12070005!”7. 添加

5、程序,通过PIO控制4个LED闪烁8. 运行程序,观察调试信息窗内显示内容和实验台LED现象,满足要求后, 整理获得实验报告使用的代码和截图,思考如何构建测试程序的流程图。#include <stdio.h>#include <system.h>#include <altera_avalon_pio_regs.h>int main()printf("13073108 13073113n");while(1)IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0); usleep(1000000);IOWR_

6、ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xf); usleep(1000000); return 0;开始输出“13073108 13073113”设置无限循环设置LED状态设置LED显示时间实验小结:基本实验其实没什么好说的,毕竟是为后续的实验熟悉编译环境而设置的实验,本身并没有什么难度。有意思的是尽管我们的系统在搭建之初是存在很大问题的,但是基本实验却凭借有缺陷的设计无障碍地完成了,这点知道撰写报告时我才发现。相比个中原因可能是基本实验涉及硬件核功能部分不多。#键盘控制部分实验步骤:1. 建立软件工程-disp&key,并与硬件系统绑定2. 选择

7、“hello world”模板,设系统库属性,添加 #include <system.h>3. run 程序,调试信息窗内应显示“Hello from Nios II!”4. 复制相关文件夹下define.h到工程目录,查看并理解相关内容; 查看并理解CH452_CORE使用说明 复制粘贴相关文件夹下的测试例程,解析代码结构与功能5. 修改程序,使调试信息窗内显示出和实验学生相关的信息, 例如“DISP and KEY test from 12070005!”6. builder工程,有错则修改,直到正确7. 运行程序,观察数码管显示现象11. 满足要求后,整理获得实验报告使用的代

8、码和截图,思考如何构建测试程的流程图。9. 按动4*4键盘的按键,观察IDE显示内容,分析实验现象8. 修改程序,显示学号(例如12070005 ),运行程序,观察数码管显示现象10. 修改程序,某键按下时,开启显示;另一键按下时,关闭显示。运行程序,观察、 分析实验现象实验代码:#include <stdio.h>#include <system.h>#include "alt_types.h"#include <define.h>#include <altera_avalon_CH452_regs.h>#include &

9、lt;altera_avalon_PIO_regs.h>void disp_init();void we_ch452_comand(alt_u16 data);void ch452_init();void delay(alt_u32 delay_data);void close_disp_key();void open_disp_key();void KeyDownISR();void disp_init() we_ch452_comand(CH452_DIG0|3); we_ch452_comand(CH452_DIG1|1); we_ch452_comand(CH452_DIG2|8

10、); we_ch452_comand(CH452_DIG3|0); we_ch452_comand(CH452_DIG4|1); we_ch452_comand(CH452_DIG5|3); we_ch452_comand(CH452_DIG6|7); we_ch452_comand(CH452_DIG7|0); void close_disp_key() we_ch452_comand(CH452_SYSOFF); void open_disp_key() we_ch452_comand(CH452_SYSON2); void delay(alt_u32 delay_data) usleep

11、(delay_data); void we_ch452_comand(alt_u16 data) alt_u16 temp=IORD_ALTERA_AVALON_CH452_STATUS(CH452_BASE); while (temp&0x0001)=1) temp=IORD_ALTERA_AVALON_CH452_STATUS(CH452_BASE); IOWR_ALTERA_AVALON_CH452_INSTRACTION(CH452_BASE, data); delay(1000); /wait ch452 ok alt_u8 keyvalue=0,flag=0;void Ke

12、yDownISR(void* context, alt_u32 id) keyvalue=IORD_ALTERA_AVALON_CH452_KEY_DATA(CH452_BASE); flag=1; void ch452_init() we_ch452_comand(CH452_SYSON2);/open disp & key we_ch452_comand(CH452_BCD); /BCD disp mode IOWR_ALTERA_AVALON_CH452_IRQ_MASK(CH452_BASE, 1);/enable key irq alt_irq_register(CH452_

13、IRQ, NULL, KeyDownISR);int main() printf("Hello from Nios II!n"); ch452_init(); disp_init(); while (1) if(flag=1) printf("reg0=%lxn",keyvalue); flag=0; close_disp_key(); delay(10000); open_disp_key(); delay(10000); return 0;开始数码管输出“Hello from Nios II!” 无限循环当键入开关打开,输出屏幕显示当前键盘输入缓存值

14、,并关闭键入开关结束调用提供的ch452并设置要显示的字符实验小结:实验的重点在于读懂新的ch452的操作语句使用方法,所幸老师在这方面的讲解十分详细,我们很快通过老师的指导和对于实验流程及代码的理解便完成了键盘控制显示实验。主要也是指导书内容十分详尽,以至于我们的实验也没遇到什么大问题。#UART一、实验步骤:1.建立软件工程-UART,并与硬件系统绑定2. 选择“hello world”模板,设系统库属性,添加 #include <system.h>3. run 程序,调试信息窗内应显示“Hello from Nios II!”4.复制粘贴相关文件夹下的测试例程,解析代码结构与

15、功能5.修改程序,使调试信息窗内显示出和实验学生相关的信息, “UART test from 130731 13073108 13073113!”6.修改程序,alt_u8 tx_buffer10=“wait datan”; 为alt_u8 tx_buffer?=“13073108 13073113 wait datan”;形式7.builder工程,出现error则修改程序直到正确。8.PC上运行“串口助手” ,完成相应设置9.运行SOPC程序,观察IDE和“串口助手”显示内容,分析实验现象10.通过“串口助手”分别发送A123#、#,观察IDE和“串口助手”显示内容,分析实验现象二、程序清

16、单#include <stdio.h>#include <system.h>#include <altera_avalon_pio_regs.h>#include <altera_avalon_timer_regs.h>#include <altera_avalon_uart_regs.h>#include <alt_types.h>/中断接收,查询发送alt_u16 aaa=0;alt_u8 i=0,j=0,k=0;alt_u8 flag=0,err_cmd=0;alt_u8 tx_buffer20="1307

17、310813 waitdatan"alt_u8 tx_err_buffer22="1307310813command errn"alt_u8 rx_buffer20;alt_u8 rx_data;void rx_uart_interrupt_server(void*context,alt_u32 id) rx_data=IORD_ALTERA_AVALON_UART_RXDATA(RS232_BASE); if (rx_data='#')&(j!=0) flag=1;j=0; else if (rx_data='#')&am

18、p;(j=0) err_cmd=1; else rx_bufferj=rx_data;j+; void clr_rxbuffer() for (k=0;k<=19;k+) rx_bufferk=0; void init_uart() alt_irq_register(RS232_IRQ,NULL,rx_uart_interrupt_server); IOWR_ALTERA_AVALON_UART_CONTROL(RS232_BASE, ALTERA_AVALON_UART_CONTROL_RRDY_MSK );void send_wait_data() for (i=0;i<=19

19、;i+) aaa=IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE); while (aaa&ALTERA_AVALON_UART_STATUS_TRDY_MSK)=0) aaa=IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE); IOWR_ALTERA_AVALON_UART_TXDATA(RS232_BASE, tx_bufferi); void send_err_data() for (i=0;i<=21;i+) aaa=IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE)

20、; while (aaa&ALTERA_AVALON_UART_STATUS_TRDY_MSK)=0) aaa=IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE); IOWR_ALTERA_AVALON_UART_TXDATA(RS232_BASE, tx_err_bufferi); int main() init_uart(); clr_rxbuffer(); printf("uart_tx Hello from 1307310813n"); while (1) send_wait_data(); usleep(3000000);

21、 if (flag=1) for (k=0;k<=19;k+) printf("%x ",rx_bufferk); flag=0; printf(" rx datan"); clr_rxbuffer(); if (err_cmd=1) err_cmd=0; printf("error rx datan"); send_err_data(); return 0;开始流程图:Err_CMD=1?N Y输出错误信息Flag=1?N YK>19?YK=k+1 N输出x清空rx_buffer结束测试结果与分析:在串口助手的信息框中不

22、断显1307310813 waitdata在输入了0后程序显示了error data;在输入了学号后程序显示了学号各位的BCD码;在实验过程中出现了硬件连接以及代码没有错误,但是在串口助手上总是无法显示程序中编写的信息的问题,经检查是由于在引脚分配的过程中,输入与输出引脚分配顺序发生了颠倒,导致数据无法正确输出,将输入输出引脚进行修正之后,在串口助手上即可正确的显示提前编写的信息。小结:在实验过程中多次检查了程序中的错误,然而试验中的问题并没有出现在软件方面,而是在硬件上引脚的分配出现了问题,导致在这项实验上浪费了很多时间,这也从侧面证明了sopc技术试验中,每一个细节的重要性。#Timer一

23、、实验步骤:1.建立软件工程-Timer,并与硬件系统绑定2. 选择“hello world”模板,设系统库属性,添加 #include <system.h>3. 运行程序,调试信息窗内应显示“Hello from Nios II!”4.复制粘贴相关文件夹下的测试例程,解析代码结构与功能5.修改程序,使调试信息窗内显示出和时钟相关的信息,“0:0:1 0:0:2”6. builder工程,出现error则修改程序直到正确。7. 运行程序,观察调试信息窗内显示内容,分析实验现象。2、 程序清单#include <stdio.h>#include <system.h&

24、gt;#include <altera_avalon_pio_regs.h>#include <altera_avalon_timer_regs.h>#include <alt_types.h>#include <stdio.h>alt_u8 tm_sec,tm_min,tm_hour;alt_u8 flag=0;void timer_interrupt_server(void*context,alt_u32 id) tm_sec+; if(tm_sec=60) tm_sec=0; tm_min+; if(tm_min=60) tm_min=0;

25、 tm_hour+; if(tm_hour=24) tm_hour=0; IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0); flag=1;void init_timer() alt_irq_register(TIMER_IRQ,NULL,timer_interrupt_server); IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK+ ALTERA_AVALON_TIMER_CONTROL_CONT_MSK+ ALTERA_AVALON

26、_TIMER_CONTROL_START_MSK ); int main() init_timer(); printf("Hello from Nios II!n"); while (1) if (flag=1) printf("%d:%d:%dn",tm_hour,tm_min,tm_sec); flag=0; return 0;开始测试流程图:显示helloworld执行timer函数Flag=1?N显示“时:分:秒”YFlag归零结束测试结果与分析:在运行程序后,在调试文字信息框中出现helloworld文字,并在之后随时间显示具体的计时信息。小结:在这部分模块的实验中,由于对代码和软件的不熟悉,出现了频繁报错的情况,之后在询问同学和老师之后这些问题逐渐迎刃而解,之后成功的完成了本次关于timer模块的实验。#PWM1、 实验步骤1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论