东华理工大学SOPC课程设计报告.docx
《东华理工大学SOPC课程设计报告.docx》由会员分享,可在线阅读,更多相关《东华理工大学SOPC课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
面向SOPC的设计与应用
课程设计报告
姓名:
学号:
10206101**
班级:
10206101
专业:
电子信息工程
指导老师:
邓文娟
二〇一三年十二月
目录
1、设计目的:
1
2、设计内容:
1
3、实验步骤 2
3.1新建工程 2
3.2用sopcbuilder建立nios系统模块 2
3.3添加元件 2
3.4顶层原理图绘制 3
3.5软件设计部分 6
3.6程序编写 8
3.7软件调试 15
4、实验心得体会 16
交通灯&电子时钟的设计
1、设计目的:
①进一步掌握SOPC的开发流程。
②熟悉QuartusII软件的使用。
③NIOSII软件的使用。
④掌据利用SOPC做简单的设计
2、设计内容:
通过QuartusII、SOPCBuilder和NIOSII实现交通灯控制仿真。
交通灯:
以15秒为一个十字路口交通灯的一个周期。
1.东西方向绿灯亮15秒(东西方向可以通行),然后黄灯闪烁5秒(黄灯亮时已过线的可以继续通行,未过线的停车等待);南北方向显示红灯15秒(南北方向禁止通行)。
2.南北方向显示绿灯15秒(南北方向通行),然后黄灯闪烁5秒(黄灯亮时已过线的可以继续通行,未过线的停车等待);东西方向显示红灯15秒(东西方向禁止通行)。
3.依次循环1和2。
电子时钟:
得用定时器定时1秒实现走时,分别用六个数码管显示时分秒。
16
3、实验步骤
在quartusII中建立工程在自己的文件目录下,建立一个自定义文件夹led
3.1新建工程
打开QUARTUSII,点击FILE菜单下的NEWProjectWizard然后输入工程存放目录,或点击工程路径右边的按钮设置工程存放目录,在第二栏中输入工程名称,此实验为led_light;之后点击Next,选择芯片为cyclone系列的EP1C12Q240C8;点击Finish,对话框消失,此时已经建立好了led_light工程文件;
3.2用sopcbuilder建立nios系统模块
点击QuartusII界面第一行工具栏中的SOPCBuilder工具;名称填写nios_light,选择verilog语言后点击OK,在devicefamily中选择cyclone。
3.3添加元件
a)cpu选择32bit标准型,其他参数默认,改名为cpu;
b)添加JTAGUARTInterface,保持默认选项,Finsh,改名jtag_uart;
c)添加内部RAM:
选择memory→on-chipmemory,改名ram;
d)加入pio:
选择other→pio设置为outputportsnoly点击finsh,重新命名,按此方法一次添加三个1位和一个12位pio并分别重命名为:
pio_lock、pio_clk、pio_dat、pio_key、pio_led;
e)加入定时器Timer;
e)添加元件结束后,双左击cpu弹出对话框,两个memory选项选择RAM;
f)指定基地址和分配中断号:
选择system下拉菜单中auto-assignbaseaddress或auto-assignirqs;
g)点击sopc窗口下的systemgeneration生成系统模块,待到提示成功便可以退出SOPCBuilder
3.4顶层原理图绘制
1.在quartusII中的图形编辑界面中进行管脚连接锁定工作将生成模块以图标形式添加到BDF文件中:
于Quartus界面New→BlockDiagram/SchematicFile,于弹出画图界面双击空白弹出添加界面完成模块的输入输出接口连接,如下图:
其中CS138、D3、D2、D1、595_OE分别电位分别为10100是为了选中交通灯的12个LED,和数码管使能输出有效。
pio_clk为时钟、pio_dat为送给数码管的数字、pio_lock为数码管锁存管脚、pio_key为时钟与交通灯功能切换皱键。
2.管脚锁定:
新建引脚锁定命令文件,File→New→TclScriptFile,弹出新窗口,将引脚锁定文件输入进去,通过查阅引脚文件从而对相应输入输出对应到硬件引脚上。
内容如下:
#Setup.tcl
#Setuppinsetting
set_global_assignment-nameRESERVE_ALL_UNUSED_PINS"ASINPUTTRI-STATED"
set_global_assignment-nameENABLE_INIT_DONE_OUTPUTOFF
set_location_assignmentPIN_153-toclk
set_location_assignmentPIN_161-topio_dat
set_location_assignmentPIN_156-topio_lock
set_location_assignmentPIN_159-topio_clk
set_location_assignmentPIN_55-topio_key
set_location_assignmentPIN_14-topio_led[0]
set_location_assignmentPIN_16-topio_led[1]
set_location_assignmentPIN_18-topio_led[2]
set_location_assignmentPIN_12-topio_led[3]
set_location_assignmentPIN_8-topio_led[4]
set_location_assignmentPIN_6-topio_led[5]
set_location_assignmentPIN_4-topio_led[6]
set_location_assignmentPIN_2-topio_led[7]
set_location_assignmentPIN_240-topio_led[8]
set_location_assignmentPIN_20-topio_led[9]
set_location_assignmentPIN_23-topio_led[10]
set_location_assignmentPIN_42-topio_led[11]
set_location_assignmentPIN_163-to595_OE
set_location_assignmentPIN_44-toCS138
set_location_assignmentPIN_46-toD3
set_location_assignmentPIN_48-toD2
set_location_assignmentPIN_50-toD1
写好之后点击保存,名字为Tcl_script1.tcl放到工程目录下。
然后点击Tools→TclScript选择Tcl_script1.tcl后点击RUN,如此,管脚约束与锁定就会自动加入了,如图:
有些锁定后接线图并没有显示锁定后的引脚,这时我们按如下操作使其显示:
3.编译工程:
Process→Startcompilation。
4.配置FPGA:
这里要打开实验板电源、连接USB下载线将生成的SOF文件下载到目标板上。
步骤:
Tools→Programmer目标文件夹下载,选择USB-Blaster模式,通过JTAG口对FPGA进行配置;然后点Start,进度达到100&便可将其关闭
3.5软件设计部分
a.打开NIOSIIIDE,选择工作区间,如下图操作:
b.新建工程:
File→New→Project
选择C/C++Application,Browse选择工程里面的ptf后缀文件,选择helloworldsmall→Finish。
c.添加.c主程序文件:
选中工程右击New→NIOSIIC/C++Application,输入程序。
如下图:
3.6程序编写
#include"alt_types.h"
#include"stdio.h"
#include"system.h"
#include"sys/alt_irq.h"
#include"altera_avalon_timer_regs.h"
#include"altera_avalon_pio_regs.h"
#definealt_cpu_freq50000000//定时1秒初值
/*CLKPINCONTROL*/
#defineLED_CLK_L()IOWR(PIO_CLK_BASE,0,0)//定义时钟低电平
#defineLED_CLK_H()IOWR(PIO_CLK_BASE,0,1)//定义时钟高电平
/*DATPINCONTROL*/
#defineLED_DAT_H()IOWR(PIO_DAT_BASE,0,1)//定义数码管数据灯高电平
#defineLED_DAT_L()IOWR(PIO_DAT_BASE,0,0)//定义数码管数据灯低电平
/*LOCKPINCONTROL*/
#defineLED_LOCK_H()IOWR(PIO_LOCK_BASE,0,1)//定义锁存引脚高电平
#defineLED_LOCK_L()IOWR(PIO_LOCK_BASE,0,0)//定义锁存引脚低电平
#defineLED_MID_LINE0x40//onlydisplayGsegment
/*SHIFTWHITMSBFIRST*/
alt_u8seg_dat[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,//笔形码0至9和全亮、灭码
0x07,0x7f,0x6f,0xff,0x00
};
alt_u8display_ram[8]={LED_MID_LINE,LED_MID_LINE,LED_MID_LINE,
LED_MID_LINE,LED_MID_LINE,LED_MID_LINE,
LED_MID_LINE,LED_MID_LINE};
/*displaythewholeramarea*/
voidled_display_dat(alt_u8*pData)
{
alt_u8i,j;
LED_LOCK_L();/*Firstlockisdisable*///数据锁存显示
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
LED_CLK_L();/*Lowlevelputdataonline*/