- 2025-03-23
-
回复了主题帖:
【microchip PolarFire SoC FPGA 套件】⑤尝试通过SoftConsole启动RISC-V内核
jobszheng5 发表于 2025-3-23 11:16
从去年就开始准备学习FPGA,结果到现在也没有成行。
唉
给自己定个小目标,一点点实现,加油,共勉
-
回复了主题帖:
【microchip PolarFire SoC FPGA 套件】简单uart的实现
这是纯硬件时序模拟实现串口通讯啊:loveliness:
- 2025-03-22
-
发表了主题帖:
【microchip PolarFire SoC FPGA 套件】⑤尝试通过SoftConsole启动RISC-V内核
本帖最后由 cc1989summer 于 2025-3-22 22:29 编辑
https://bbs.eeworld.com.cn/thread-1308660-1-1.html
书接上回。我们知道PolarFire SoC FPGA是分为2大块的,一块是FPGA,通过Libero SoC编程驱动,一块是RISC-V SOC,通过SoftConsole编程驱动。
FPGA与RISC-V SOC相互独立,通过总线联通。因此想要通过SW1(隶属于FPGA BANK0)驱动LED8(隶属于RISC-V SOC BANK2)还是有点困难的。
RISC-V SOC核的详细介绍,可参考:PolarFire_SoC_FPGA_MSS_Technical_Reference_Manual_VC
顺着藤摸下去,怎么驱动这个RISC-V SOC核呢?
我咨询了microchip官方
这就不得不请蛋疼的Github出场,为啥说蛋疼呢,因为经常打不开。当然有时候可以打开。
https://github.com/polarfire-soc/polarfire-soc-discovery-kit-reference-design
这是我把该设计的附件下载下来了。
注意这个MPFS_DISCOVERY_KIT_REFERENCE_DESIGN.tcl,他是本文的关键。
这是该参考设计的架构图:
步骤一,在Libero中导入该参考设计。 Project——Execuie Script
需要注意一点:polarfire-soc-discovery-kit-reference-design-main文件夹需要尽量放置于靠近根目录的位置,比如
D:\Microchip\polarfire-soc-discovery-kit-reference-design-main
不可放置于桌面,文件路径过长会出错。
点击Run就可以了。
可以看到一个包括了RISC-V核在内的庞大体系。
Synthesize——constraints—— RUN PROGRAM Action后,就可以正常烧录了。
前面的步骤仅仅是对FPGA及SOC硬件线路进行了烧录。
要想驱动RISC-V SOC核,还需要使用Microchip的一大利器:SoftConsole
SoftConsole软件安装方法就不细说了。
安装好后,注意下载github (又是他) 裸机程序范例:polarfire-soc-bare-metal-examples
https://github.com/polarfire-soc/polarfire-soc-bare-metal-examples
官方只给出了下面3个例程。
1. 导入例程:
2:设置开发板型号
3.编译,下载调试:
4. 调试运行。
运行后,打开串口调试助手,共计3个串口,打开第2个。
每次按下SW2(SOC复位按钮)会出现如下画面:
随意发送一个字符,就开始系统自检测试。
依次进行 DDR Memory Test、SD Card Test、Ethernet(GEM) Test
具体程序细节还有待挖掘,先跑个代码试试是不!
本次分享就到这里。
- 2025-03-17
-
加入了学习《直播回放: Microchip - 为什么选择FPGA,而非MCU?》,观看 为什么选择FPGA,而非MCU?
- 2025-03-11
-
回复了主题帖:
【microchip PolarFire SoC FPGA 套件】④求助:如何通过FPGA驱动SoC GPIO?
卿小小 发表于 2025-3-10 16:41
帖子内容质量很棒,对于您的问题做如下解答:
1.对于流水灯的功能来讲,驱动逻辑侧的7个LED已经够了; ...
谢谢您的细致指点,我再好好研究下,,第一次用microchip FPGA,尤其是包含SOC的FPGA,很多方面还不熟悉,网上资料也很少,这次争取搞明白了。:congratulate:
- 2025-03-09
-
发表了主题帖:
【microchip PolarFire SoC FPGA 套件】④求助:如何通过FPGA驱动SoC GPIO?
https://bbs.eeworld.com.cn/thread-1307977-1-1.html
书接上回,通过Verilog语言运行了一个跑马灯的程序,遗憾的是8个LED只成功驱动了其中7个,
前面7个都属于FPGA直属的BANK0;而LED8挂载在Bank2(也就是属于SoC的GPIO)
通过常规的方式根本没有选不了BANK2 E1端口。
查阅官方说明文档,原来用到SOC的IO,需要通过PolarFireSoC MSS Configurator软件来设置。
如果想实现一个最简单的功能,通过按钮SW1控制LED8的亮灭。
SW1:BANK0 T19,直属于FPGA HSIO
LED8:BANK2 E1(复用GPIO_1_9),直属于SOC(MSS) GPIO
查阅了官方资料:
PolarFireSoC MSS Configurator 设置如下:
然后在Libero SoC v2024.2中导入刚才的MSS 设置,
最右边的逻辑块就是设置好的SOC。
其左侧有2个RESET
GPIO_RESET_N_F2M:SOC GPIO的复位?
MSS_RESET_N_F2M:SOC的复位?
编译、设置管脚(GPIO_RESET_N_F2M设置为SW1 BANK0 T19,MSS_RESET_N_F2M_0设置为SW2 BANK0 U18),但烧录后仍无法控制GPIO_1_9 (LED8)亮灭。
困于以上问题,究竟如何通过FPGA驱动SoC GPIO呢?
- 2025-03-01
-
发表了主题帖:
【microchip PolarFire SoC FPGA 套件】③艰难啃下基于verilog语言的跑马灯
https://bbs.eeworld.com.cn/thread-1307592-1-1.html
书接上回,上次跑了一个基于官方的范例,也就是个最简单的 与门 电路。
也就是这样的:按下按键1或按键2,LED1灯亮。基本学习了如何编写程序及如何烧录。
有了初步的入门,那么怎么进一步编写自己的程序呢,看到开发板上8个LED陷入沉思,何不写个跑马灯的程序呢。
多方查资料学习,于是就有了如下的程序。
其中OSC_RC2MHZ_0是 Libero自带的时钟程序块(Macro Libray中)。
需要说明,把选中到OSC_RC2MHZ_0选中到电路图中,需要把左端脚上拉(Tie High)
cc03_0是我自编的基于verilog语言的程序,也是本文的重点。
首先新建一个 Creat HDL,选择verilog。
要实现跑马灯就需要比较精准的时钟,我们使用了2MHz的时钟源,每1个周期是(1/2,000,000 S )要想实现1秒钟计时,就需要数数到2,000,000
LED的跑马灯效果就是通过移位来实现,RST是复位功能。
比如
00000001 向左移位1位
00000010 再向左移位1位
00000100 再向左移位1位
00001000 再向左移位1位
00010000 再向左移位1位
00100000 再向左移位1位
01000000 再向左移位1位
10000000 等到最高位是1时就恢复到最初状态
00000001
程序如下:
module cc03( clk,rst_n,led);
input clk;
input rst_n;
output reg [6:0] led;
reg [20:0] counter;
//计数器
always@(posedge clk)
if(!rst_n)//低电平复位
counter <= 0;
else if(counter == 21'd1999999) //1秒
counter <= 0;
else
counter <= counter + 1'b1;
always@(posedge clk)
if(!rst_n)
led <= 7'b0000001;
else if(counter == 21'd1999998)begin
if(led == 7'b1000000)
led <= 7'b0000001;
else
led <= led << 1;
end
else
led <= led;
endmodule
眼睑的你可能看到了,我这里LED【6:0】怎么只有7个LED,待会会提。
verilog程序编写完,点击Check HDL File。如果程序有错会提示:
程序检查无误就点击 Build Hierarchy。
将刚才编写好的cc03.v程序拖到电路图中。
置顶对应引脚(rst_n,LED 6:0)
Synthesize通过后,设置好对应引脚。
发现LED8对应的E1引脚无法选择,可能因为其是MSS(RISC-V核) I/O BANK的缘故,目前还没学会使用RISC-V核的IO,暂时就不用这个LED了。
最后编译下载程序就可以实现跑马灯效果了。
[localvideo]e113055628df4bc770aac3a940d70384[/localvideo]
本次分享就到这里。
- 2025-02-27
-
回复了主题帖:
【microchip PolarFire SoC FPGA 套件】②并不算一帆风顺的点灯之旅
ccccccc@ 发表于 2025-2-27 14:38
这个板子还是很强大的,不过阅读英语比较吃力的话,可以试试ai(不过ai也会有些问题存在,比如乱回复,回答 ...
加油,攻克这个复杂板子
-
回复了主题帖:
【microchip PolarFire SoC FPGA 套件】②并不算一帆风顺的点灯之旅
dfjs 发表于 2025-2-27 00:25
请问一下你的中文文档在哪里找到的
都是通过Bing搜索到的pdf:victory:
-
回复了主题帖:
【microchip PolarFire SoC FPGA 套件】②并不算一帆风顺的点灯之旅
wangerxian 发表于 2025-2-26 21:23
FPGA和单片机环境还是区别很大的。写代码也有不少区别,FPGA好多模块。
FPGA太复杂了,涉及复杂的协议、时序、IP软核,难度不是一般大。:time:
- 2025-02-26
-
发表了主题帖:
【microchip PolarFire SoC FPGA 套件】②并不算一帆风顺的点灯之旅
https://bbs.eeworld.com.cn/thread-1306307-1-1.html#pid3395283
书接上回,在开箱之后更多的是熟悉microchip的官方文档,挺丰富的但几乎全英文,需要花时间仔细阅读。
本篇正式开始编程、烧写点灯程序。
主要参考文件为官方文档:PolarFire_SoC_Design_Flow_AN5282
上回说到。PolarFire SoC FPGA 主要包括SoC(五核Risc-V)和FPGA两部分,这两部分是相对独立、互相联系的。
SoC编程:使用SoftConsole https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/soc-fpga/softconsole
FPGA编程:使用Libero https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/libero-software-later-versions
以下我下载的最新版本。
本篇为通过FPGA编程点灯,所以使用的是Libero。
需要说明Libero是要Lisence注册的,官方提供了免费的Lisence。
具体的安装、注册步骤详见以下帖子:
https://blog.csdn.net/m0_51307090/article/details/121086742
首先新建项目:
选择型号封装等:
剩下的就是下一步的事了。
新建一个SmartDesign,放置一个与门(AND),对应3个引脚(A,B,Y)
– A - T19 按键SW1
– B - U18 按键SW2
– Y - T18 LED灯1
开发板电路图
接下来最重要的一步就是 Synthesize,然而在这步栽了跟头。
软件提示错误,并提示找不到synplify pro ME.
网上一查,原来是没安装这个软件,正常这个软件是Libero的一部分,原来是在安装Libero的时候没选择。
那就装上吧。把用得到的用不到的都装上。
安装完后需要设置下synplify软件的路径:
下面是我的安装目录。设置后就可以了。
Synthesize成功。
再接下来就是设置管脚。
最后一步就是把配置好的程序下载到开发板啦。
编译及下载过程稍稍漫长(约几分钟)
然后就可以看到程序运行了。按下任意按钮(SW1、SW2)LED1灯熄灭。
[localvideo]969fa0691af0394119192b5355549f08[/localvideo]
本次的分享就到这里。
- 2025-02-20
-
回复了主题帖:
【microchip PolarFire SoC FPGA 套件】①热气腾腾的开箱
学学学学学学学 发表于 2025-2-19 16:05
颜值很高
是的,做工很精细!
- 2025-02-12
-
发表了主题帖:
【microchip PolarFire SoC FPGA 套件】①热气腾腾的开箱
本帖最后由 cc1989summer 于 2025-2-12 23:15 编辑
感谢EEWORLD及Digikey给我提供的这次microchip PolarFire SoC FPGA 套件测评及学习机会。
说起FPGA,大家更多的是接触Altera(被Intel收购)及Xilinx(被AMD收购)这两家,顶多再加一家Lattice。
microchip的FPGA在国内似乎比较小众,了解了下历史,原来是由一些列收购而来的。
Actel——>Microsemi——>microchip,而且一直主要偏向于军用和宇航。
Actel是美国军方的合作伙伴,占据了美国90%以上航天航空的FPGA市场,在过去的十多年中,Actel反熔丝的FPGA已经成功地应用于 300多个太空计划。
直到2002年,其创新的基于Flash架构的FPGA的出现,从此揭开了Actel神秘的面纱,从此Actel逐渐走向了民用市场,被大家所认知。
Microchip的三个主要FPGA系列:
IGLOO®2 FPGA:具有大量资源的低密度器件。
SmartFusion®2 SoC FPGA:具有大量资源和32位硬处理器内核的低密度器件。
PolarFire™ FPGA 和 SoC FPGA:成本经过优化的高性能器件,并采用28纳米 (nm) 工艺技术实现。
本次测评的就是PolarFire™ SoC FPGA。
从名字中可知,集成了SoC(RISC V)和FPGA。
从架构图中可以看出,该FPGA集成了5核RISC-V SoC(625 MHz)和FPGA核心(93K LE逻辑单元),1LE=4LUT + DFF,性能非常强劲。
FPGA核部分的资源。
SoC核部分的资源
具体到板子,集成了丰富的硬件。包括1GB RAM,1000M以太网,SD卡等。
自带了JTAG调试工具。支持Bare-metal(裸机编程),RTOS以及Linux。
下面是开箱的内容,后面再慢慢学习应用开发。
本次分享就到这里。
- 2025-02-06
-
回复了主题帖:
测评入围名单: PolarFire SoC FPGA Discovery 套件
感谢eeworld,确认可完成测评计划。{:1_138:}
- 2025-01-18
-
回复了主题帖:
【英飞凌PSOC™ 4100S Max】③Capsense触摸按钮初体验
CoderX9527 发表于 2025-1-16 23:31
谢谢分享。
不仅分享了基础用例,还分享了触控调教,点赞。
嘿嘿,这就是所谓理论联系实际,我发现很多坛友发帖,有的只有案例,没有细讲背后的原理,有的干将理论死活不跑个实际案例,结果都是不太好的。
- 2024-12-15
-
回复了主题帖:
【英飞凌PSOC™ 4100S Max】③Capsense触摸按钮初体验
Capsense触摸功能是业界第一的看门功夫,尽管瑞萨、德仪都有,但英飞凌仍独领风骚,自己顶一个先。
-
加入了学习《Follow me第二季第3期 视频介绍》,观看 Follow me第二季第3期 任务提交
-
回复了主题帖:
【英飞凌PSOC™ 4100S Max】⑥作品提交:电机触控及屏显系统
lugl4313820 发表于 2024-12-14 08:32
看了一下,楼主的工具挺多呀,这转盘也是有个性哦!
顺带当作给自家小朋友的玩具(有多种不同类型的转盘,转起来效果各异)
- 2024-12-13
-
回复了主题帖:
【英飞凌PSOC™ 4100S Max】⑤SPI点亮TFT LCD屏幕
TL-LED 发表于 2024-12-12 22:02
模拟SPI刷新速度有点慢,硬件SPI方式会好些。
是这样的,模拟SPI唯一的优点就是移植性非常好,拿过来任何一款MCU,能在几分钟内搞定显示,但要去吃透硬件SPI可没那么简单。
- 2024-12-10
-
发表了主题帖:
【英飞凌PSOC™ 4100S Max】⑥作品提交:电机触控及屏显系统
结合前述分享,本篇提交作品:基于PSOC™ 4100S Max的电机触控及屏显系统。
基本架构如图:
其中:
触摸按钮用到了板载的 BTN0和BTN1触摸按钮
TFT-LCD使用基于SPI协议驱动的屏幕
电机驱动板使用基于L9110S芯片的直流电机驱动板,如下图:
电路如下图,MCU通过两个IO口(本例P8.0、P8.1)控制电机正反转。
控制逻辑如下图:
IA=H;IB=0 正转
IA=0;IB=H 反转
配置好硬件,我们着手软件的编写:
main函数,主要进行初始化设置、IO设置,屏幕初始化、显示“Infineon”LOGO,然后进入循环。
int main(void)
{
cy_rslt_t result = CY_RSLT_SUCCESS;
/* Initialize the device and board peripherals */
result = cybsp_init();
/* Board init failed. Stop program execution */
if (result != CY_RSLT_SUCCESS)
{
CY_ASSERT(CY_ASSERT_FAILED);
}
/* Enable global interrupts */
__enable_irq();
/* Initialize EZI2C */
initialize_capsense_tuner();
/* Initialize MSC CapSense */
initialize_capsense();
#if CY_CAPSENSE_BIST_EN
/* Measure the self capacitance of sensor electrode using BIST */
measure_sensor_cp();
#endif /* CY_CAPSENSE_BIST_EN */
/* Start the first scan */
Cy_CapSense_ScanAllSlots(&cy_capsense_context);
Cy_GPIO_Pin_FastInit(GPIO_PRT1,2u,CY_GPIO_DM_PULLDOWN,0,0);
Cy_GPIO_Pin_FastInit(GPIO_PRT1,3u,CY_GPIO_DM_PULLDOWN,0,0);
Cy_GPIO_Pin_FastInit(GPIO_PRT1,4u,CY_GPIO_DM_PULLDOWN,0,0);
Cy_GPIO_Pin_FastInit(GPIO_PRT1,5u,CY_GPIO_DM_PULLDOWN,0,0);
Cy_GPIO_Pin_FastInit(GPIO_PRT1,6u,CY_GPIO_DM_PULLDOWN,0,0);
Lcd_Init(); //初始化LCD
delayms(10); //延时一段时间
Lcd_Clear(black );
Show_RGB(0,0,176,44,blue);
Show_RGB(0,44,176,88,green);
Show_RGB(0,88,176,132,magenta);
Show_RGB(0,132,176,176,red);
Show_RGB(0,176,176,220,yellow);
Show_RGB(0,0,176,44,yellow);
Show_RGB(0,44,176,88,red);
Show_RGB(0,88,176,132,blue2);
Show_RGB(0,132,176,176,green);
Show_RGB(0,176,176,220,blue);
delayms(10); //延时一段时间
showimage(gImage_infineon);
Cy_GPIO_Pin_FastInit(GPIO_PRT8,0u,CY_GPIO_DM_PULLUP,0,0);
Cy_GPIO_Pin_FastInit(GPIO_PRT8,1u,CY_GPIO_DM_PULLUP,0,0);
for (;;)
{
if(CY_CAPSENSE_NOT_BUSY == Cy_CapSense_IsBusy(&cy_capsense_context))
{
/* Process all widgets */
Cy_CapSense_ProcessAllWidgets(&cy_capsense_context);
/* Turns LED ON/OFF based on button status */
led_control();
/* Establishes synchronized communication with the CapSense Tuner tool */
Cy_CapSense_RunTuner(&cy_capsense_context);
/* Start the next scan */
Cy_CapSense_ScanAllSlots(&cy_capsense_context);
/* Toggles GPIO for refresh rate measurement. Probe at P10.4. */
Cy_GPIO_Inv(CYBSP_SENSE_SCAN_RATE_PORT, CYBSP_SENSE_SCAN_RATE_NUM);
}
}
}
在led_control函数中,添加电机控制的代码以及屏幕显示代码。
按下BTN0,IA拉高(默认IA、IB都是0),电机顺时针旋转,并显示顺时针文字(实际是图片)。
松开时,IA=0,电机不转。
按下BTN1,IB拉高(默认IA、IB都是0),电机逆时针旋转,并显示逆时针文字(实际是图片)。
松开时,IB=0,电机不转。
static void led_control(void)
{
if(MSC_CAPSENSE_WIDGET_INACTIVE != Cy_CapSense_IsWidgetActive(CY_CAPSENSE_BUTTON0_WDGT_ID, &cy_capsense_context))
{
Cy_GPIO_Write(CYBSP_LED_BTN0_PORT, CYBSP_LED_BTN0_NUM, CYBSP_LED_STATE_ON);
Cy_GPIO_Set(GPIO_PRT8,0u);
showimage1(gImage_shun);
}
else
{
Cy_GPIO_Write(CYBSP_LED_BTN0_PORT, CYBSP_LED_BTN0_NUM, CYBSP_LED_STATE_OFF);
Cy_GPIO_Clr(GPIO_PRT8,0u);
}
if(MSC_CAPSENSE_WIDGET_INACTIVE != Cy_CapSense_IsWidgetActive(CY_CAPSENSE_BUTTON1_WDGT_ID, &cy_capsense_context))
{
Cy_GPIO_Write(CYBSP_LED_BTN1_PORT, CYBSP_LED_BTN1_NUM, CYBSP_LED_STATE_ON);
Cy_GPIO_Set(GPIO_PRT8,1u);
showimage1(gImage_ni);
}
else
{
Cy_GPIO_Write(CYBSP_LED_BTN1_PORT, CYBSP_LED_BTN1_NUM, CYBSP_LED_STATE_OFF);
Cy_GPIO_Clr(GPIO_PRT8,1u);
}
}
顺时针:
逆时针:
演示视频1
[localvideo]ebf3e8332faabc36417cbb0532ad64b7[/localvideo]
演示视频2
[localvideo]08cde9632b93b17f45311b201a16441a[/localvideo]
本次分享就到这里,谢谢!