SOPC-十字路口模拟交通灯控制

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Sopc技术与应用课程设计模拟交通灯控制系统专业:电子科学与技术学号:姓名:指导老师:模拟交通灯课程设计一、实验目的:1、进一步掌握SOPC的开发流程。2、熟悉QuartusII软件的使用。3、NIOSII软件的使用。二、实验内容:通过QuartusII、SOPCBuilder和NIOSII实现交通灯控制仿真。以42秒为一个十字路口交通灯的一个周期。东西为主干道,南北为从干道(主干道和从干道通行时间不一样)1.东西方向绿灯亮21秒(东西方向可以通行),然后黄灯闪烁5秒(黄灯亮时已过线的可以继续通行,未过线的停车等待);南北方向显示红灯26秒(南北方向禁止通行)。2.南北方向显示绿灯11秒(南北方向通行),然后黄灯闪烁5秒(黄灯亮时已过线的可以继续通行,未过线的停车等待);东西方向显示红灯16秒(东西方向禁止通行)。3.依次循环1和2。三、实验步骤1.在quartusII中建立工程在自己的文件目录下,建立一个自定义文件夹,这里为1020630110(注意不能有空格或中文);2.打开QUARTUSII,点击FILE菜单下的NEWProjectWizard;然后输入工程存放目录,或点击工程路径右边的按钮设置工程存放目录,在第二栏中输入工程名称,此实验为jiaotongdeng;之后点击Next,选择芯片为cyclone系列的EP1C12Q240C8;点击Finish,对话框消失,此时已经建立好了jiaotongdeng工程文件;3.用sopcbuilder建立nios系统模块点击QuartusII界面第一行工具栏中的SOPCBuilder工具;名称填写jiaotong,选择verilog语言后点击OK,在devicefamily中选择cyclone4.添加元件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_CLOCK、PIO_LOCK、PIO_DATA、PIO_LED;e.加入定时器Timer;f.添加元件结束后,双左击cpu弹出对话框,两个memory选项选择RAM;5.指定基地址和分配中断号:选择system下拉菜单中auto-assignbaseaddress或auto-assignirqs;6.点击sopc窗口下的systemgeneration生成系统模块,待到提示成功便可以退出SOPCBuilder7.在quartusII中的图形编辑界面中进行管脚连接锁定工作将生成模块以图标形式添加到BDF文件中:于Quartus界面New→BlockDiagram/SchematicFile,于弹出画图界面双击空白弹出添加界面完成模块的输入输出接口连接,如下图:其中D4、D3、D2、D1、GND分别电位分别为10100是为了选中交通灯的12个LED,CLK为时钟、DAT为送给数码管的数字、LOCK为数码管锁存管脚;8.管脚锁定:新建引脚锁定命令文件,File→New→TclScriptFile,弹出新窗口,将引脚锁定文件输入进去,通过查阅引脚文件从而对相应输入输出对应到硬件引脚上。内容如下:#Setup.tcl#Setuppinsettingset_global_assignment-nameRESERVE_ALL_UNUSED_PINSASINPUTTRI-STATEDset_global_assignment-nameENABLE_INIT_DONE_OUTPUTOFFset_location_assignmentPIN_153-toCLK_0set_location_assignmentPIN_161-toDATset_location_assignmentPIN_156-toLOCKset_location_assignmentPIN_159-toCLKset_location_assignmentPIN_14-toLED[1]set_location_assignmentPIN_16-toLED[2]set_location_assignmentPIN_18-toLED[3]set_location_assignmentPIN_12-toLED[4]set_location_assignmentPIN_8-toLED[5]set_location_assignmentPIN_6-toLED[6]set_location_assignmentPIN_4-toLED[7]set_location_assignmentPIN_2-toLED[8]set_location_assignmentPIN_240-toLED[9]set_location_assignmentPIN_20-toLED[10]set_location_assignmentPIN_23-toLED[11]set_location_assignmentPIN_42-toLED[12]set_location_assignmentPIN_163-toGNDset_location_assignmentPIN_44-toD4set_location_assignmentPIN_46-toD3set_location_assignmentPIN_48-toD2set_location_assignmentPIN_50-toD1写好之后点击保存,名字为Tcl_script1.tcl放到工程目录下。然后点击Tools→TclScript选择Tcl_script1.tcl后点击RUN,如此,管脚约束与锁定就会自动加入了,如图:有些锁定后接线图并没有显示锁定后的引脚,这时我们按如下操作使其显示:9.编译工程:Process→Startcompilation。10.配置FPGA:这里要打开实验板电源、连接USB下载线将生成的SOF文件下载到目标板上。步骤:Tools→Programmer目标文件夹下载,选择USB-Blaster模式,通过JTAG口对FPGA进行配置;然后点Start,进度达到100&便可将其关闭11.软件设计部分a.打开NIOSIIIDE,选择工作区间,如下图操作:b.新建工程:File→New→Project选择C/C++Application,设置如下:Browse选择工程里面的ptf后缀文件,选择helloworldsmall→Finish。c.添加.c主程序文件:选中工程右击New→NIOSIIC/C++Application,输入程序。如下图:d.添加.h头文件:原理同上,并将程序输入进去。见图:完成程序的添加后右击工程→BuilderProjectd对工程编译。e.选择RUN→RUN·····,系统自动检测JTAG连接电缆f.于弹出窗口Main中选中工程,在TargetConnection选择电缆USB-Blaster→RUN,目标板上的灯就按照程序点亮。四、程序文件1、头文件:#defineLED_CLK_L()IOWR(PIO_CLOCK_BASE,0,0)//定义时钟低电平/*DATPINCONTROL*/#defineLED_DAT_H()IOWR(PIO_DATA_BASE,0,1)//定义数码管数据灯高电平#defineLED_DAT_L()IOWR(PIO_DATA_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/*theledsegmentdatacorrespondtothehardwareinterface*//*SHIFTWHITMSBFIRST*/alt_u8seg_dat[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,//笔形码0至90x07,0x7f,0x6f/*,0x77,*/};/*globalareafordisplaydatastore*//*alt_u8display_ram[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};*//*displaythewholeramarea*/voidled_display_dat(alt_u8*pData){alt_u8i,j;LED_LOCK_L();/*Firstlockisdisable*///数据锁存显示for(i=0;i8;i++){for(j=0;j8;j++){LED_CLK_L();/*Lowlevelputdataonline*/if((pData[7-i]&(1(7-j)))!=0)LED_DAT_H();elseLED_DAT_L();LED_CLK_H();/*Onebitshiftin*/}}LED_LOCK_H();}/*insertdataatxofpositionpData*/voidled_display_x(alt_u8*pData,alt_u8x,alt_u8data){pData[x]=data;led_display_dat(pData);}#endif/*LED_SEG_H_*/2、主程序:#includealt_types.h#includeled_seg.h#includestdio.h#includesystem.h#includesys/alt_irq.h#includealtera_avalon_timer_regs.h#includealtera_avalon_pio_regs.h#definealt_cpu_freq50000000intmain(void)__attribute__((weak,alias(alt_main)));intalt_main(void){alt_u8i,j;alt_u8led=0x0;alt_u8seg_pos=0;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};led_display_dat(display_ram);IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_BASE,(short)(alt_cpu_freq&0x0000ffff));//定时器初值设定IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_BASE,(short)((alt_cpu_freq16)&0x0000ffff));IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE,ALTERA_AVALON_TIMER_CONTROL_START_MSK+ALTERA_AVALON_TIMER_CONTROL_CONT_MSK);while(1){for(i=0;i2;i++)//东西方向绿灯显示0--19秒{for(j=0;j10;){if(IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)&ALTERA_AVALON_TIMER_STATUS_TO_MSK){IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0x30c);IOWR_ALTERA_AVALON_TIMER

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功