1、嵌入式系统,浙江大学计算机学院施青松 , 嵌入式系统计算内核-SoCSoC Core to Embedded SystemII,1,提纲,基于可重构SoC实例,SoC设计方法-4基于IP Core的嵌入式开发实例BSB建立的最小系统结构SoC设计方法-2基于学生设计的MIPS IP 的SoC乒乓游戏俄罗斯方块打砖块,3,基于IP Core的嵌入式开发实例,4,基于IP Core的嵌入式开发实例,EDK开发最小SoC系统主要步骤 1. 工程的建立; 2. 添加AXI4 IP到硬件设计; 3. 定制LED IP,并添加IP到系统,编写应用程序; 4. 定制7段数码管 IP,并添加IP到系统,编写应
2、用程序; 5. 定制PWM IP,并添加IP到系统,编写应用程序; 6. 实现AXI4中断控制系统; 7. 使用AXI4 Chipscope实现系统协同调试;,5,运行 Xilinx Platform Studio(XPS),打开EDK软件在Windows操作系统下,选择所有程序Xilinx ISE Design Suite13.1 EDK Xilinx Platform Studio(XPS) 1)打开XPS,在XPS主界面选择File Open Project,出现右图界面选择:Open a recent project然后单击ok按钮,6,打开已经存在的工程,选择该选项,点击”OK”按纽
3、,添加EMC IP到设计中,选择EMC 总线参数,点击“Yes”按钮。,选择EMC IP参数,设置EMC IP存储参数,添加EMC IP到设计中,配置MicroBlaze处理器,配置MicroBlaze处理器,配置MicroBlaze处理器,配置MicroBlaze处理器,配置MicroBlaze Cache,配置MicroBlaze处理器,配置MicroBlaze接口,配置MicroBlaze M_AXI_DC接口,配置MicroBlaze M_AXI_IC接口,建立EMC和CPU的连接,EMC和CPU的连接-选择互连接口,建立EMC和CPU的连接,建立axi_interface互连时钟端口
4、的连接,建立axi_interface互连复位端口连接,建立EMC和FPGA端口的连接-时钟,建立EMC和FPGA端口的连接-时钟,建立EMC和FPGA端口的连接-存储,建立EMC和FPGA端口的连接-存储,建立EMC和FPGA端口的连接-存储,建立EMC和FPGA端口的连接-存储,RAM多余端口处理,RAM多余端口处理,新添加的端口,分配EMC的存储空间,鼠标点击该按纽,分配EMC的存储空间,添加逻辑端口和FPGA引脚的物理约束,新建工程的结构分析,新建工程的结构分析,新建工程的结构分析,生成网表,想想这步完成的工作? 其实就是 把这个抽象的结构, 转换成门级网表的连接.,新建工程的结构分析
5、,这个过程需要持续一小部分时间,请等待,并且看看控制台给出的综合信息.,生成bit流文件,建立软件应用程序,选择输出硬件到SDK,建立软件应用程序,建立软件应用程序,建立软件应用程序,下面将添加设计的BSP,建立软件应用程序,选择建立Xilinx BSP, 作用是各种外设的软件驱动,建立软件应用程序,建立软件应用程序,建立软件应用程序,建立软件应用程序,下面将添加SDK自动生成的应用程序,建立软件应用程序,建立软件应用程序,建立软件应用程序,建立软件应用程序,建立软件应用程序,建立软件应用程序,调用存储器测试程序,建立软件应用程序,下面准备下载设计到芯片中,生成链接脚本文件,选择产生链接脚本文
6、件,生成链接脚本文件,工程的下载,产生比特流文件并且下载到板子上。在下载前,指令存储器(FPGA的BRAM)将被更新(使用GNU编译器产生可执行的文件)。使用下面的步骤完成设计下载和结果的观察:连接Nexys3的USB线连接到主机的USB口打开目标板的电源打开主机的超级终端(在Windows操作系统的开始所有程序附件通信下),并且配置其参数,使其波特率9600,数据位:8比特;无奇偶校验;一个停止位;无流量控制。,61,工程的下载,选择编程 FPGA选项,工程的下载,等待编程成功,在超级终端上观察结果,同时在Nexys3板卡上操作按键和DIP开关,观察打印信息的变化.注意:如果前面没有选择生成
7、链接脚本文件,则需要选择RUN RUN,来运行程序.,64,工程的下载过程,等待编程成功,在超级终端上观察结果,同时在Nexys3板卡上操作按键和DIP开关,观察打印信息的变化.注意:如果前面没有选择生成链接脚本文件,则需要选择RUN RUN,来运行程序.,基于学生设计的MIPS IP 的SoC,66,LED版:乒乓游戏-VGA版:俄罗斯方块、打砖块,教学实验平台:硬件系统综合设计,设计自己的CPU和计算机系统、用自己的操作系统管理自己的计算机,运行用自己设计应用程序QS-I 简易DIY计算机硬件系统(综合设计)本系统是计算机组成原理与设计的后继计算机硬件综合实践课程的实验系统。学生利用计算机
8、组成或计算机体系结构课程设计的不同性能的CPU 核,继续深入实现完整计算机系统所需的基本外部设备:VGA、PS2、内存和简单的命令解释器,完成一个简易的计算机硬件系统,使用MIPS汇编设计并直接运行自己的应用程序。,微控制器结构,SoC实现平台,68,Datapath模块接口规范,data_path(clk,reset,MIO_ready,IorD,IRWrite,RegDst,RegWrite,MemtoReg,ALUSrcA,ALUSrcB,PCSource,PCWrite,PCWriteCond,Beq,ALU_operation,PC_Current, data2CPU,Inst_R,
9、data_out,M_addr,zero,overflow);,CPU控制器模块接口规范,ctrl(clk,reset,Inst_in,zero,overflow,MIO_ready,MemRead,MemWrite,ALU_operation,state_out,CPU_MIO,IorD,IRWrite,RegDst,RegWrite,MemtoReg,ALUSrcA,ALUSrcB,PCSource,PCWrite,PCWriteCond,Beq);,CPU接口规范,Muliti_cycle_Cpu(clk,reset,MIO_ready,pc_out,/TESTInst,/TESTmem
10、_w,Addr_out,data_out, data_in,CPU_MIO,INT0,INT1,state );,7段译码器显示,7段译码器映射为点阵显示SW0 =0:4位7段码映射为图形显示,共32段,映射到一个32位字,共阳7段码显示器结构和显示原理,4位共阳7段码映射图形显示,disp_num= DFCFBFFF,72,一个很好的外设,7段译码器映射图形例子,disp_num= D7BDFBD9,disp_num= 557EF7E0,disp_num= D7DBFDB9,disp_num= DFCFFCFB,disp_num= DFCFBFFF,Dice=1,Dice=2,Dice=3,
11、Dice=4,Dice=5,Dice=6,73,7段译码器显示设备逻辑结构,hex7seg_decode,74,后续课程用于外设和测试,时钟和分频,module clk_div(input wire clk,input wire rst,input wire SW2,output reg 31:0 clkdiv,output wire Clk_CPU );always (posedge clk or posedge rst) beginif (rst) beginclkdiv = 0;end else beginclkdiv = clkdiv + 1b1;endendassign Clk_CP
12、U = SW2 ? clkdiv24 : clkdiv1;/ SW2选择时钟endmodule,存储器,存储器就是二维寄存器变量reg 31:0 MEM_ROM 0:1024;reg 31:0 MEM_RAM 0:1024;实际可用IP核,用工具生成模块用寄存器变量很消耗芯片资源,总线接口模块规范,MIO_BUS(clk,rst,BTN,SW,mem_w,Cpu_data2bus,/data from CPUaddr_bus,/Cpu地址线ram_data_out,/数据存储器输出数据线led_out,/LED回读输入信号counter_out,/记数器信号,备用counter0_out,/记
13、数器信号,备用counter1_out,/记数器信号,备用counter2_out,/记数器信号,备用CPU_wait,/Cpu等待,与MIO_ready对应Cpu_data4bus,/write to CPUram_data_in,/from CPU write to Memoryram_addr,/Memory Address signalsdata_ram_we,/数据存储器写信号GPIOffffff00_we,/FFFFFF00端口写译码信号GPIOffffffe0_we,/FFFFFFe0端口写译码信号counter_we,/记数器写信号,备用Peripheral_in);/送外部分
14、设备的数据线,通用接口设备一 LED设备模块: ffffff00,Device_GPIO_led ( clk_io, rst, GPIOffffff00_we, Peripheral_in, Counter_set, led_out, GPIOf0 );,通用接口设备二 7段码设备模块: ffffffe0,Device_GPIO_7seg (clk_io, rst, GPIOffffffe0_we, /7段写控制信号 Input2:0 Test, /显示通道选择07 disp_cpudata, /作为CPU外设输入通道 Test_data0, /硬件检测显示通道1 Test_data1, /硬
15、件检测显示通道2 Test_data2, /硬件检测显示通道3 Test_data3, /硬件检测显示通道4 Test_data4, /硬件检测显示通道5; Test_data5, /硬件检测显示通道6; Test_data6, /硬件检测显示通道7 disp_num/送7段码译码模块);,外部设备模块:通用接口设备三、四 Device_GPIO_SW_BTN,输入,8位Switch和5位Buttonaddre=f0000000-ffffffff0。A2=0太简单了,直接在译码电路中输入CPU: Cpu_data4bus = counter0_out,counter1_out,counter2
16、_out,9h000, led_out,BTN,SW;,外设五:计数器模块,Counter_x(clk,rst,clk0,clk1,clk2,counter_we,counter_val,counter_ch,counter0_OUT,counter1_OUT,counter2_OUT,counter_out);,VGA接口模块规范,VGA_IO(vga_clk, rst,vram_out, Cursor,/光标Blink,/闪烁R, G, B, HSYNC, VSYNC,vga_addr,vga_rdn);VRAM模块Vram_B (clka,wea, / Bus 0 : 0 addra,/
17、 Bus 12 : 0 dina, / Bus 10 : 0 douta);/ Bus 10 : 0,VGA扫描同步模块,vga_core (vga_clk, /25MHzrst, addr, v_active, h_sync, v_sync);8*8Ascii字库模块Font_rom (a, / Bus 9 : 0 spo); / Bus 7 : 0,PS2键盘驱动模块,ps2_kbd (clk, clrn, ps2_clk, ps2_data, rdn, data, ready, overflow);,PS2键盘驱动模块,ps2_kbd (clk, clrn, ps2_clk, ps2_d
18、ata, rdn, data, ready, overflow);,存储与接口地址译码模块,86,88,外设及接口模块,module Device_GPIO_led( clk, rst, GPIOf0000000_we, Peripheral_in, counter_set, led_out, GPIOf0 );input clk,rst,GPIOf0000000_we;input 31:0Peripheral_in;output 1:0 counter_set;output 7:0 led_out;output 21:0GPIOf0;wire 7:0 led_out;reg 1:0 coun
19、ter_set;reg 7:0 LED;reg 21:0GPIOf0;,Device_GPIO_led模块代码,/ GPIO out use on LEDs endendendendmodule,Device_GPIO_7seg模块代码,module Device_GPIO_7seg( clk, rst,GPIOe0000000_we, Test,disp_cpudata, Test_data0, Test_data1,Test_data2, Test_data3, Test_data4, Test_data5, Test_data6, disp_num );input clk,rst,GPIOe0000000_we;input 2:0 Test;input 31:0 disp_cpudata, Test_data0, Test_data1, Test_data2, Test_data3, Test_data4, Test_data5, Test_data6;output31:0disp_num;reg 31:0disp_num;,/ 7 Segments LEDs read and write endcase endendendmodule,