SoC FPGA

SoC FPGA 芯片:
Intel Cyclone V SE 系列

Cyclone V系列中的 5CSEBA2U19I7N,5CSEBA5U19C8N,5CSEBA6U23I7

	主要区别:
		5CSEBA2U19I7N:工业级(-40℃~100℃) 逻辑单元 25K 
		5CSEBA5U19C8N:商业级(0℃~85℃) 逻辑单元 82K
		
硬核 主频925MHz

Altera
英特尔SOC FPGA 芯片三个系列:Cyclone V SE/SX 	Arria V 	Arria10

英特尔对标赛灵思,Xilinx synq 667MHz 825MHz 256K 赛灵思synq不是相互独立的

创建工程时用到的型号:5CSEBA2U19I7N

新型SoC芯片:	
	灵活高效的数据运算和事务处理能力,集成FPGA的高速并行处理优势
	
	基于两者独特的片上互联结构,可以将FPGA上的通用逻辑资源经过配置,
		映射成ARM处理器的一个或者多个具有特定功能的外设,通过高达128位宽的AXI高速总线进行通信,完成数据和控制命令的交互。
		
	FPGA变成了ARM处理器的外设。linux下操作FPGA侧寄存器
	
	
	战略上 Intel Cyclone V SE 系列 对标 Xilinx S系列
	
	Cyclone 10
	Cyclone V 最低的系统成本和功耗,以及全新的性能水平,大容量应用优势,相比前代产品总体功耗降低40%,高效的逻辑集成功能
				集成收发器变体和SoC FPGA变体(包括基于ARM的硬处理器系统(HPS))。
				E  GX GT SE SX ST
				SE: A2 A4 A5 A6(20 40 85 110)
				
				5C SE B A2 U 19 I 7 N
				5C:Cyclone V
				SE:SoC with enhanced logic/memory
				B:No hard PCIe or hard memmory controller
				A2:25K logic elements
				U:Ultra FineLine BGA(FBGA)
				19:484 pins
				I:Industrial(Tj=-40℃to100℃)
				7:FPGA  Fabric Speed Grade
				S
				L
				N:Optional Suffix Lead-free packaging
				

	Cyclone IV

硬件处理器系统(HPS):
双核 Cortex-A9
顺序控制,丰富外设,开源驱动

HPS运行成熟的Linux操作系统,提供统一的系统API,降低开发软件难度

现场可编程逻辑门阵列资源 FPGA:
高带宽的数据通信
并行运算,高速接口,灵活定制

HDL;硬件描述语言,Verilog,VHDL 状态机

开发方式差别

并行处理,响应及时,ADC采集

通用可编程逻辑门阵列+存储器 ,在单纯的FPGA芯片上使用FPGA的逻辑和存储器搭建一个软核CPU系统。
软核:SOPC技术  Inter PSG vs Xilinx CPU主频最高至150~160MHz

HPS-to-FPGA 桥:
高速桥接总线 ,一边采集一边存储

Avalon总线 MM总线,Avalon ST总线

5CSEBA2U19I7N:
25K的FPGA逻辑单元(LE)
1433600bit嵌入式RAM存储器
36个数字信号处理器(DSP)
5个模拟锁相环PLL

4个数字锁相环PLL
双核 Cortex-A9 硬处理器系统,主频800~925MHz
DDR3控制器 800MHz
1000以太网 x2
NAND FLASH
QSPI FLASH
SD/MMC 
SPI /主从 x2
USB x1 / UART x2/ I2C x4 /CAN x2

开发Soc FPGA:
2013年,Quartus II 13.1之后,兼容性的问题 AD13
软件:17.0 / 17.1

厂家提供:
1、使用Quartus prime 17.1,英特尔,新建文件,保存编译,分配引脚

2、Quartus集成工具:platform Designer (Qsys),重点掌握,为Soc FPGA添加外设,配置HPS

3、SoC EDS,独立的软件 大小为3G,工具,类似cmd终端,纯命令行命令 ls,cd

4、SoC EDS集成 DS-5 AE  arm公司 ARMDS 
						软件的编程,I2C控制器应用的 C 设备文件
						含FPGA的编程,映射,FFT变换,printf输出,标准的linux应用开发

第三方:
1、终端putty
2、winscp

GHRD 黄金硬件参考设计

HPS参数配置
IO交错配置
DDR3存储器参数配置
FPGA工程信号连接和引脚分配

platform Designer:

AC501_SoC_GHRD 工程 基于Verilog

	vga_pll TFT显示屏
	key_filter

	soc_system u0	arm系统  platform Designer生成
	
soc_system.qsys	打开系统
	clk_0	系统默认 输入 时钟源IP 50000000Hz
	hps_0  Arria V/Cyclone V Hard Process arm处理器
	sysid_qsys System ID Peripheral 输入数字  软件识别系统  32bit
	led_pio		2位的输出型IO	Enable
	buton_pio	
	uart_0
	spi_0		速率为2MHz 2000000 1923076Hz 8位宽数据模式 如果2个不够用,在FPGA添加spi
	clock_bridge_0
	alt_vip_vfr_tft_0 Frame Reader	设置参数 800*480 width height
					图像帧缓存读取控制器 直接从AXI总线上以DMA的方式读取内存中的数据的IP,驱动RGB TFT显示屏
					Frame Buffer II (4K Ready)
	alt_vip_itc_0
	i2c_0		IP Catalog仅支持NIOS下的驱动代码,linux下暂无对该IP的驱动支持,使用开源的opencores网站的oc_i2c控制器
				使用虚拟地址映射的方式来进行编程控制
				通过配置Linux内核以使能现有的驱动程序
				
	AC501_SoC_GHRD 修改工程文件
	
	通过Platform Designer(原Qsys)加一个 Altera UART 外设到HPS的轻量级FPGA到HPS桥(fpga2hps_lw_bridge),
	然后更新到Quartus工程中,再重新编译生成HPS启动的U-boot镜像文件和preloader镜像文件并更新到AC501_SoC的启动的SD中,
	重新生成包含了Altera UART 外设的HPS系统,编译得到新的dts文件和dtb文件,最后将dtb文件拷贝到AC501_SoC开发板的linux系统SD卡中,
	以使linux系统能够获得新增加的Altera UART外设
	
	
	clk_0 hps_0 	h2f_reset
				桥:	
					h2f_axi_clock
					f2h_axi_clock
					h2f_lw_axi_clock
				sysid_qsys
				led_pio
				button_pio
				uart_0
				spi_0
				i2c_0
				alt_vip_vfr_tft
					clock_master
				
	clock_bridge_0 66Hz时钟
					
	复位
	
	sysid_qsys
		control_slave   Avlon Memory Mapped Slave:获取内部寄存器
		
		Avlon Memory Mapped Slave连接到了 h2f_lw_axi_master
		
		fpga和arm之间的通信:数据交换
			arm控制 fpga
			两者之间有三座桥:		位宽 32 64 128bit unused 关闭
					f2h_axi_briege:
							fpga -> hps
									slave
					
			
					h2f_axi_briege:					
							hps -> fpga
							master
							
					h2f_lw_axi_briege:
							hps -> fpga
							master
							
							轻量 2M字节  uart i2c spi
							
		总线连接:	clk h2f_lw_axi_clock
					irq 
					reset 
					sl h2f_lw_axi_master
					
		hps	Arria V/Cyclone V Hard Processor System
		altera_hps
		
		FPGA-to-HPS SDRAM Interface +
			f2h_sdram0_data AXI Slave
			
		fpga 需要大容量的DDR3 hps给一个总线接口
		
		IO的复用:
			选择FPGA
			
		800MHz
		
		Platform Designer安装路径 intelFPGA 17.1 是一个路径

DS5编写基本C程序
Quartus
Platform Designer
SoC EDS
DS-5 AE
Modelsim

putty 

GHRD

Eclipse for DS-5 v5.27.1
因为环境变量,不建议在开始菜单中打开,使用SoC EDS 输入eclipse& 打开。

编译环境 C Project

工程名
选择编译器 GCC 4.x arm-linux-gnueabihf
新建文件 main.c
1:打开soc eds command shell软件
2:eclipse&
3:file -> new -> c project
4:创建main.c文件
5:编写C程序
6:编译得到可执行文件
7:制作开发板Linux系统镜像SD卡
8:将编译得到的可执行文件拷贝到开发板的SD卡中
9:用micro USB教据线连接开发板和电脑
10:将sD卡插入开发板的卡槽中
11:查看电脑上的串口号,打开putty软件,打开该串口,波特率是115200
12:给开发板上电
13:root
14:挂载sD卡的FAT分区 mount -t vfat /dev/mmcblk0p1 /mnt15:切换到mnt目录下 cd /mnt16: 执行程序: ./hello world在这里插入代码片

Linux下使用网络进行调试:


ifconfig,udhcpc,手动设置,静态IP地址

vi /etc/network/interfaces
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.30.166
netmask 255.255.255.0
gateway 192.168.30.1

reboot

windows软件 WinSCP,新建站点 IP地址 passwd ,主机名,拖动,添加权限,调试


eclipse 编辑后不会自动保存


gdb调试:

gdb设置:打开Run->Debug Configurations,在调试配置界面,双击”C/C++ Application“栏,将会生成 ”hello Debug“调试目标

Debugger  Debugger:gdbserver	
		Debugger Options 
		GDB debugger:路径 intelFPGA/17.1/emedded/ds-5/sw/gcc/bin/arm-linux-gnueabihf-gdb.exe

arm-linux-gnueabihf-gdb.exe从哪里来:
exe文件:
linux 下编译器:gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux
fpga/ac620_soc/AC501_SoC_CD_Files/配套软件/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin

Connection Type: TCP 192.168.30.166 Port number: 10000

开发板运行:
#gdbserver :10000 hello_world

Process hello_world created; pid = 1622
Listening on port 10000

PC 点击Debug

Remote debugging from host 192.168.30.188

查看变量,设置断点,双击设置断点
在这里插入代码片

基于gdbserver调试实验:
1、保证电脑能够通过网络访问开发板
ifconfig etho 192.168
vi /etc/network/interfaces 编辑这个文件
#iface ethO inet dhcp找到修改这个,前面加#
iface ethO inet static 改为静态分配配ip
address 192.168.35.225
netmask 255.255.255.0
gateway 192.168.35.254
保持,然后reboot
2、使用passwd命令为root账户设置密码
3、将希望调试的程序拷贝到开发板中
4、为程序添加可执行权限 chmod 777 he1lo world
5、在DS-5软件里面配置调试相关设置debugger: gdbserver选择qdb.exe
connect :tcp ip address
gdbserver :10000 hello world
6、在开发板上启动调试
7、在DS-5里面点击debug开始调试

PC中的DS5软件与开发板上gbserver进行通信

虚拟地址映射:

在AC501_SoC_GHRD工程中,我们在platform Designer集成开发工具中为HPS
添加了若干个外设,包括PIO,UART,SPI,IIC Frame Buffer等。
这些IP外设通过LW_H2F_AXI bridge或 F2H_AXI bridge 连接到了HPS的内部总线上,
能够被总线上的主机(HPS,MPU,DMA)直接寻址。
因此,从处理器操作外设的基本原理来看,就是通过寻址的方式,让总线上的主机(HPS,MPU,DMA)
能够直接读写指定地址存储的数据。

FPGA和ARM
arm如何通过编程控制FPGA侧的外设

FPGA 绝对地址
HPS 增加MPU,外设由MPU管理,MPU将外设的地址经过转换,映射出新的地址,不再是绝对地址

标准的Linux驱动程序,在驱动程序中对外设的寄存器进行读写操作,然后提供给用户应用层标准的UNIX编程接口

SoC FPGA
1、为使用虚拟地址映射的方式将外设寄存器映射到Linux用户空间
2、为配置Linux内核,打开对添加的外设IP的驱动支持,即使用系统自带的驱动程序直接驱动外设IP。

虚拟地址映射的实现:
1、得到存储器管理单元(MPU)的虚拟地址
2、通过添加h2f_lw_axi_master桥在MPU上的偏移地址来得到h2f_lw_axi_master桥的虚拟地址
3、添加FPGA侧具体外设在h2f_lw_axi_master桥上的偏移地址来得到该外设在Linux系统中的虚拟地址

Linux系统中,通过mmap()函数实现虚拟地址的映射

void *mmap(void *addr,size_t len,int port,int flags,int fd,off_t offset);

该函数会在调用程序的虚拟地址空间addr处创建设备文件fd,偏移地址offset的一个长度为length的映射,映射内核地址空间一段内存到用户进程地址空间。

要将MPU映射到用户空间,打开MPU得到其描述符,通过open函数实现
if((fd = open(“/dev/mem”,(O_RDWR | O_SYNC))) == -1)
{
printf(“ERROR:could not open “/dev/mem”…\n”);
return 1;
}
再使用该文件描述符来完成h2f_lw_axi_master总线的虚拟地址映射。
void *periph_virtual_base;
periph_virtual_base = mmap(NULL,HW_REGS_SPAN,(PORT_READ | PORT_WRITE),MAP_SHARED,fd,HW_REGS_BASE);

void类型指针 periph_virtual_base 表示外设虚拟地址
使用mmap函数将MMU上偏移地址HW_REGS_BASE的地址映射为虚拟地址,并赋值给periph_virtual_base指针
映射的地址空间长度为HW_REGS_SPAN大小

LED_PIO_BASE和BUTTON_PIO_BASE为led_pio和button_pio外设在lw_h2f_bridge上的基地址,
宏定义在hps_0.h中定义,ALT_LWFPGASLVS_OFST即为lw_h2f_bridge在外设地址空间中的基地址。

外设从设备标识 说明 基地址 地址空间
STM space trace macrocell 0xFC000000 48MB

DAP Debug Access Port 0xFF000000 2MB

LWFPGASLAVES FPGA slaves accessed with lightweight HPS-to-FPGA bridge 0xFF200000 2MB

LWHPS2FPGAREGS Lightweight HPS-to-FPGA bridge global programmer’s view(GPV) registers 0xFF400000 1MB

HPS2FPGAREGS HPS-to-FPGA bridge GPV registers 0xFF500000 1MB

0xFC000000~0xFFFFFFFF	LWFPGASLAVES

HPS -> MPU -> h2f_lw_axi_master总线 -> 外设

大小 0x4000000 十进制:67108864 除以 1024 等于64MB

0xFC000000 + 0x4000000

int fpga_init(long int *virtual_base){

mmap();

*virtual_base = periph_virtual_base; //将外设虚拟地址保存,用以释放时候使用

}

LWFPGASLAVES基地址:
ALT_LWFPGASLVA_OFST 0xFF200000
LED_PIO_BASE 0x10040
led_pio_virtual_base = periph_virtual_base + ((unsigned long)(ALT_LWFPGASLVS_OFST + LED_PIO_BASE) & (unsigned long)(HW_REGS_MASK));

BUTTON_PIO_BASE 0x100C0

//清除边沿捕获寄存器的bit0的值
*(button_pio_virtual_base + 3) = 0x3; 0011
0 1 2 3 第3号寄存器写入0x3
edgecapture 边沿捕获寄存器 Enable bit-clearing for edge capture register 写入任意值清除所有位,写1对应位

BUTTON 2位宽
0x1 01
bool led0 = true; led0 = !led0;
*(button_pio_virtual_base + 3) = 0x1;
*(button_pio_virtual_base + 4) = 0x1;
outset
*(button_pio_virtual_base + 5) = 0x1;
outclear

0x2 10
*(button_pio_virtual_base + 3) = 0x2;
*(button_pio_virtual_base + 4) = 0x2;
outset
*(button_pio_virtual_base + 5) = 0x2;
outclear

0x3:
*(button_pio_virtual_base + 3) = 0x3;
*(led_pio_virtual_base + 0) = led1 * 2 | led0;

LED
uart_0 0x0060

fpga_init(long int*)
取消虚拟地址映射 与mmap对应 periph_virtual_base = mmap(NULL,HW_REGS_SPAN,(PROT_READ | PORT_WRITE),MAP_SHARE,fd,HW_REGS_BASE);
if(munmap(virtual_base,HW_REGS_SPAN) !=0)
{
printf(“ERROR: munmap()failed…\n”);
close(fd);
return (1);
}
close(fd);
return 0;

没有gdbserver 选项 点击select other 点击Chande Workspace Settings 选择Debug

安装时注意 安装到 D intelFPGA 17.1 embedded ds-5 新建ds-5文件夹

界面恢复 windows perspective reset perspective

8层PCB板级设计

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40723768

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值