1、2、设计内容:3、实验步骤23.1新建工程23.2用sopc builder建立nios系统模块23.3添加元件23.4顶层原理图绘制33.5软件设计部分63.6程序编写83.7软件调试154、实验心得体会16交通灯&电子时钟的设计进一步掌握SOPC的开发流程。熟悉Quartus II软件的使用。NIOS II软件的使用。掌据利用SOPC做简单的设计通过Quartus II 、SOPC Builder和NIOS II实现交通灯控制仿真。交通灯:以15秒为一个十字路口交通灯的一个周期。1.东西方向绿灯亮15秒(东西方向可以通行),然后黄灯闪烁5秒(黄灯亮时已过线的可以继续通行,未过线的停车等待)
2、;南北方向显示红灯15秒(南北方向禁止通行)。2.南北方向显示绿灯15秒(南北方向通行),然后黄灯闪烁5秒(黄 灯亮时已过线的可以继续通行,未过线的停车等待);东西 方向显示红灯15秒(东西方向禁止通行)。3.依次循环1和2。电子时钟:得用定时器定时1秒实现走时,分别用六个数码管显示时分秒。163、实验步骤在quartus II中建立工程在自己的文件目录下,建立一个自定义文件夹led3.1新建工程打开QUARTUS II,点击FILE菜单下的NEW Project Wizard然后输入工程存放目录,或点击工程路径右边的按钮设置工程存放目录,在第二栏中输入工程名称,此实验为led_light;之
3、后点击Next,选择芯片为cyclone系列的EP1C12Q240C8;点击Finish,对话框消失,此时已经建立好了led_light工程文件;3.2用sopc builder建立nios系统模块点击Quartus II界面第一行工具栏中的SOPC Builder工具;名称填写nios_light,选择verilog语言后点击OK,在device family中选择cyclone。3.3添加元件a) cpu选择32bit标准型,其他参数默认,改名为cpu;b) 添加JTAG UART Interface,保持默认选项,Finsh,改名jtag_uart;c) 添加内部RAM:选择memory
4、on-chip memory,改名ram;d) 加入pio:选择otherpio设置为output ports noly点击finsh,重新命名,按此方法一次添加三个1位和一个12位pio并分别重命名为:pio_lock、pio_clk、pio_dat、pio_key、pio_led;e) 加入定时器Timer;e)添加元件结束后,双左击cpu弹出对话框,两个memory选项选择RAM; f)指定基地址和分配中断号:选择system下拉菜单中auto-assign base address或auto-assign irqs;g)点击sopc窗口下的 system generation生成系统模
5、块,待到提示成功便可以退出SOPC Builder3.4顶层原理图绘制1. 在quartus II中的图形编辑界面中进行管脚连接锁定工作将生成模块以图标形式添加到BDF文件中:于Quartus 界面NewBlock Diagram/Schematic File,于弹出画图界面双击空白弹出添加界面完成模块的输入输出接口连接,如下图: 其中CS138、D3、D2、D1、595_OE分别电位分别为10100是为了选中交通灯的12个LED,和数码管使能输出有效。 pio_clk为时钟、pio_dat为送给数码管的数字、pio_lock为数码管锁存管脚、pio_key为时钟与交通灯功能切换皱键。2. 管
6、脚锁定:新建引脚锁定命令文件,FileNewTcl Script File,弹出新窗口,将引脚锁定文件输入进去,通过查阅引脚文件从而对相应输入输出对应到硬件引脚上。内容如下:#Setup.tcl#Setup pin settingset_global_assignment -name RESERVE_ALL_UNUSED_PINS AS INPUT TRI-STATEDset_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFFset_location_assignment PIN_153 -to clkset_location_assignm
7、ent PIN_161 -to pio_datset_location_assignment PIN_156 -to pio_lockset_location_assignment PIN_159 -to pio_clkset_location_assignment PIN_55 -to pio_keyset_location_assignment PIN_14 -to pio_led0set_location_assignment PIN_16 -to pio_led1set_location_assignment PIN_18 -to pio_led2set_location_assign
8、ment PIN_12 -to pio_led3set_location_assignment PIN_8 -to pio_led4set_location_assignment PIN_6 -to pio_led5set_location_assignment PIN_4 -to pio_led6set_location_assignment PIN_2 -to pio_led7set_location_assignment PIN_240 -to pio_led8set_location_assignment PIN_20 -to pio_led9set_location_assignme
9、nt PIN_23 -to pio_led10set_location_assignment PIN_42 -to pio_led11set_location_assignment PIN_163 -to 595_OEset_location_assignment PIN_44 -to CS138set_location_assignment PIN_46 -to D3set_location_assignment PIN_48 -to D2set_location_assignment PIN_50 -to D1写好之后点击保存,名字为Tcl_script1.tcl放到工程目录下。然后点击T
10、oolsTcl Script 选择Tcl_script1.tcl后点击RUN,如此,管脚约束与锁定就会自动加入了,如图:有些锁定后接线图并没有显示锁定后的引脚,这时我们按如下操作使其显示:3. 编译工程: ProcessStart compilation。4. 配置FPGA:这里要打开实验板电源、连接USB下载线将生成的SOF文件下载到目标板上。步骤:ToolsProgrammer目标文件夹下载,选择USB-Blaster模式,通过JTAG口对FPGA进行配置;然后点Start,进度达到100&便可将其关闭3.5软件设计部分a.打开NIOS II IDE,选择工作区间,如下图操作:b.新建工程
11、:FileNewProject选择C/C+Application,Browse选择工程里面的ptf后缀文件,选择hello world smallFinish。c. 添加.c主程序文件:选中工程右击NewNIOS II C/C+Application,输入程序。如下图:3.6程序编写#includealt_types.hstdio.hsystem.hsys/alt_irq.haltera_avalon_timer_regs.haltera_avalon_pio_regs.h#define alt_cpu_freq 50000000 /定时1秒初值/*CLK PIN CONTROL*/#defi
12、ne LED_CLK_L() IOWR(PIO_CLK_BASE,0,0) /定义时钟低电平#define LED_CLK_H() IOWR(PIO_CLK_BASE,0,1) /定义时钟高电平/*DAT PIN CONTROL*/#define LED_DAT_H() IOWR(PIO_DAT_BASE,0,1) /定义数码管数据灯高电平#define LED_DAT_L() IOWR(PIO_DAT_BASE,0,0) /定义数码管数据灯低电平/*LOCK PIN CONTROL*/#define LED_LOCK_H() IOWR(PIO_LOCK_BASE,0,1) /定义锁存引脚高电
13、平#define LED_LOCK_L() IOWR(PIO_LOCK_BASE,0,0) /定义锁存引脚低电平#define LED_MID_LINE 0x40 /only display G segment/*SHIFT WHIT MSB FIRST*/alt_u8 seg_dat=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, /笔形码0至9 和全亮、灭码 0x07,0x7f,0x6f,0xff,0x00 ;alt_u8 display_ram8=LED_MID_LINE,LED_MID_LINE,LED_MID_LINE, LED_MID_LINE,LED_MID_LINE,LED_MID_LINE, LED_MID_LINE,LED_MID_LINE ; /*display the whole ram area*/void led_display_dat(alt_u8 *pData) alt_u8 i,j; LED_LOCK_L(); /*First lock is disable*/ /数据锁存显示for(i=0;i8;i+) for(j=0;jj+) LED_CLK_L(); /*Low level put data on line*/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1