FPGA小白学习日志一:LED的点亮

1.工程准备

首先建立一个名为led的工程文件夹,文件夹下包含了doc、quartus_prj、rtl、sim四个子文件夹:

那么我们来分析各个文件夹包含了什么:

doc:该文件夹主要包含了文档资料、数据手册、Visio波形等,相当于档案库;
quartus_prj:该文件夹主要包括了使用Quartus II软件新建的工程,相当于操作台;
rtl:该文件夹主要放置生成硬件电路的代码,相当于原材料;
Sim:该文件夹放置对生成硬件电路代码的仿真文件,相当于质检室;

    这四个文件夹各自完成不同的分工,但是它们之间有什么联系呢?答案是:他们之间通过路径关联和文件引用,形成一个完美的FPGA开发闭环。quartus_prj作为工程中枢,向上访问doc读取说明,向下访问rtl获取硬件代码,向外访问sim获取仿真脚本;sim向上访问rtl在逻辑上验证硬件代码的正确性。

2.设计过程

   无论我们使用FPGA做什么类型的项目时,我们都要参照一个具体的流程,这里就介绍我自己的开发流程:

1.看手册和原理图,搞清楚我们需要实现什么功能,就像做饭时我们需要看食谱,要知道自己吃什么。
2.搞清楚要吃什么了以后,我们就要开始选食材,选调料了,这样我们才能炒出来一盘好菜,这就对应着我们要新建工程,选好工程对应的开发芯片。这里我用的是野火的Altera EP4CE10 征途Mini开发板。
3.接下来我们就要开始炒菜了,也就是说我们要去写代码,运用Verilog代码实现电路功能。
4.相信大家炒完菜之后都会用筷子夹起一些尝一尝,评定炒的这盘菜好不好吃,能不能上桌,要不要重炒,也就是说我们写完代码以后,要去编译代码、写仿真软件测试是否有逻辑错误。
5.菜没问题以后呢,我们就要盛出来上桌了,那么是要盛到盘子里呢还是盛到盆子里呢,不同的菜我们也要分配好容器才好,也就是说在我们测试仿真完以后啊,就要分配硬件引脚了,这样我们的工程才能正常跑出来。
   
   其实我们用FPGA做项目和炒菜流程是差不多的,这样有了具体的流程以后,我们就按着这个思路来实现led这个工程项目的实现。

3.工程实现

(1)看食谱

        首先,我们来看食谱,看看我们需要吃什么菜,这里要打开开发板的原理图,找到“按键”和“LED”这两个模块,这里取KEY1与LED1:

        


                                                                       按键电路

                               

                               

                                                                  LED电路

我们来分析一下这两个原理图,看看他们是怎么共同实现led灯点亮的:
 
当SW2按键松开时,1、2与3、4不导通,此时KEY1被拉低到GND低电平,发出低电平信号key_in为0,对应的FPGA输入引脚接收0信号,并给LED电路发送0信号,LED1电路收到0信号后,输出低电平信号led_out为0,led灯不亮;
当SW2按键按下时,1、2与3、4导通,此时KEY1被拉高到3V3高电平,发出高电平信号key_in为1,对应的FPGA输入引脚接收1信号,并给LED电路发送1信号,LED1电路收到1信号后,输出高电平信号led_out为1,led灯亮。

接着我们在VIsio中绘制我们led功能框图和波形图,这里我们就不过多介绍了,相信大家看完上述我们对led电路实现的解析后很容易理解下面两个框图。   


                


                                                             led功能框图

                   


          
                                                              led波形图
 

  记得做完以后保存到doc文件夹中。 就此,我们的工程前提工作已经就绪了,也就是说我们看完菜谱已经知道自己要吃什么了,接下来我们就要新建工程,开始备菜了。

(2)备菜

接着,我们在Quartus中新建工程,工程要放到quartus_prj文件夹中:       

               

            对于以下页面,野火官方文档中只做了简要说明,这里主播解释一下:其实就是把我们写好的代码文件和新建工程绑定在一起,Quartus只有在列表里看到了这个文件,才会去读取他,生成对应的电路。不过我们还没有开始写代码,所以目前就不用添加代码文件了。

                    

接下来是器件选择,我们这里也来做个解释:
1.Family是器件族,就是说我们使用的哪类芯片,这个在FPGA板芯片上有介绍,这里主播使用的是Cyclone IV E系列芯片
2.Packege是封装类型,这里我们选的是Any QFP封装,这时候就有读者要问了:“配置为什么和野火官方文档给的不一样呢”,其实主播这块板CPU型号是EP4CE10E22C8N ,我们来对这串数值进行拆解:

a)EP4CE是产品系列,也就是上面Family中选择的芯片型号:Cyclone IV 系列E型
b)后面的10就是10k个逻辑单元
c)再后面的E就是EQFP类型封装,归类在QFP大类下,所以我们在Package中选择的是Any QFP封装
d)22就对应着Pin count中的引脚数量,即144个
e)C对应着工作温度,0-85°,这个我们可做了解
f)8则对应着速度等级,也就是Speed grade中的8
g)N就是工艺标识,无铅工艺,这个我们也只做简要了解

    相信看完这个,大家已经懂得怎么去读一个FPGA CPU型号了,同时在主播给大家讲解的过程中,我们也把工程配置好了。对于下面的Available devices,我就不做详细解说了。主播要说的是,在新建工程中的配置一定要和CPU严格对应好,不然是很影响后面的编译结果的。
                                               


         


            
(3)炒菜

看完食谱备好食材了之后呢,我们就要开始炒菜了,也就是要写代码。但是要在哪里炒菜呢,在哪里写代码呢?当然就是Notepad++了。此时,我们在rtl文件夹下新建一个名为led.v的文本文件,然后用Notepad++打开。
           

  大家回想一下第一步在工程准备中我们对quartus_prj文件夹的介绍:“quartus_prj作为工程中枢.....向下访问rtl获取硬件代码”,也就是说,我们编写完代码以后,还要让quartus_prj这个文件夹访问提取使用才可以,那怎么才能实现这个流程呢?接下来我们就要回到Quartus软件,将我们编写的代码(led.v文本文件)添加到工程中,这样quartus_prj就可以访问rtl获取硬件代码了,具体的步骤主播就不展示了,在野火官方文档有详细介绍。至此,炒菜部分我们就完成了。

(4)品尝

      菜炒好以后呢,我们就要夹起一些品尝了,也就是说,我们要去对代码进行编译和仿
这里主播不做步骤解释了,我们来简要看一下这个任务栏(Task)是干啥的:

a)Start Project: 工程初始化,包含新建工程、选择芯片型号、添加源文件等等,也就是说我们可以从这里面新建工程、打开已有工程等等。
b)Create Design: 设计输入与文件管理的核心入口,就是说我们可以从这里面新建代码文件、打开已有代码文件等。
c)Assign Constraints: 主要是导入约束文件、进行引脚分配等。
d)Compile Design :这个负责代码语法检查-布局布线-生成下载文件-时序分析-下载到开发板,讲明白点就是做了一些我们“尝菜”的部分操作。    
e)Verify Design :则是整个工程的收尾操作,负责打包整个led工程,也就是归档,然后导出工程数据库                                                

                           

                                 

说完了这些,我们来看看RTL视图,所谓RTL视图,就是将我们写的代码转换成硬件电路:            

                                            


                       
可以看出,这和我们在Visio软件中设计的led电路是一样的,同时代码编译也是没有问题的。完成这一步之后呢,我们就要去做仿真测试了。那么有些读者就会问,明明RTL视图已经和我们的设计电路一样的,那为什么还要做仿真测试呢?其实RTL视图做的就是将我们的代码综合成硬件电路,但是我们是不知道电路输入和输出的状态的,因此我们就要跑仿真,证明代码逻辑在实际运行中是正确的。
此处的仿真代码与文件添加主播就不再多述了,但是主播要在这里向大家解释一下输出网表的概念,因为在官方文档中频繁出现。所谓输出网表,说白了就是把我们的代码翻译成FPGA能读懂的硬件电路而已,所以“输出网表的语言格式”就是Verilog语言咯,“输出网表的时间单位”就是做仿真时的时间单位。相信主播这样解释,大家更能理解得通。

                                                                    仿真波形

在得到仿真波形以后,对比我们在Visio中绘制的波形图,是一模一样的。也就是说,RTL视图和Modelsim的仿真,无论是硬件电路还是输入输出波形都与我们的初始设计高度吻合,因此,“品尝”这一步我们已经做好了。

(4)装盘
   
仿真这一步我们做的已经没有问题了,接着我们就要分配引脚了,就是具体看按键SW1和LED1具体分配在电路板上的哪些引脚。因为EP4CE10E22C8N型CUP是把key_in和led_out 两个分配到IOBANK_3里面了,因此主播的引脚配置和官方文档不太相同,如下:
key_in <Input> @ IOBANK_3
led_out <Output> @ IOBANK_3

                      

         最后呢,主播提醒大家一下,尤其是我们在分配引脚时,一定一定要参考手册或者原理图来,不然轻则工程无发实现,重则芯片烧毁。至此,我们已经装盘了,后续的步骤主播就不进行讲解了,还请大家参照官方文档来。本文章不仅记录主播的FPGA学习之路,还想能为各个读者提供部分个人解答,共同进步。

Read more

Stack-Chan机器人完整指南:从入门到精通

Stack-Chan机器人完整指南:从入门到精通 【免费下载链接】stack-chanA JavaScript-driven M5Stack-embedded super-kawaii robot. 项目地址: https://gitcode.com/gh_mirrors/sta/stack-chan Stack-Chan是一款基于JavaScript驱动的M5Stack嵌入式超级可爱的机器人项目,集成了表情显示、面部追踪、语音交互等多种智能功能。无论你是嵌入式开发新手还是机器人爱好者,这份终极指南都将帮助你快速上手并充分发挥Stack-Chan的潜力。 🎯 Stack-Chan核心功能概览 Stack-Chan机器人最吸引人的地方在于它丰富的交互能力。通过M5Stack平台,这个可爱的小机器人可以: * 生动表情显示:通过屏幕展示各种可爱的面部表情 * 智能面部追踪:能够检测并跟踪人脸或特定目标 * 实时模仿功能:同步模仿用户的动作和表情变化 * 语音对话交流:支持语音输入输出,实现自然的人机对话 * 模块化扩展:轻松连接各种M5Unit扩展模块 🛠

【无人机路径规划】基于粒子群算法PSO融合动态窗口法DWA的无人机三维动态避障路径规划研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 📋📋📋本文内容如下:🎁🎁🎁  ⛳️赠与读者 👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。      或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎 💥第一部分——内容介绍 基于PSO-DWA的无人机三维动态避障路径规划研究 摘要:本文聚焦于无人机在三维复杂环境中的动态避障路径规划问题,提出了一种融合粒子群算法(PSO)与动态窗口法(DWA)的PSO-DWA混合算法。该算法首先利用

易百纳携多模态AI桌面机器人——Kubee Robot亮相2025火山引擎冬季FORCE大会

易百纳携多模态AI桌面机器人——Kubee Robot亮相2025火山引擎冬季FORCE大会

2025年12月18日至19日,火山引擎冬季FORCE原动力大会在上海隆重举办,作为字节跳动旗下云和AI服务平台的核心行业盛会,本次大会以“Agentic AI重塑产业”为核心主题,聚焦多模态智能体(Agent)生态构建、大模型落地应用及企业级AI转型路径等关键议题。大会不仅正式发布了豆包大模型1.8及配套AI节省计划,更全面升级了Agent开发者生态工具链,汇聚超4000家企业、开发者及行业专家,搭建起技术交流与生态协同的核心平台,为推动AI技术从“实验室演示”走向“规模化生产”注入强劲动力。 Kubee Robot AI桌面机器人 在本次大会的参展企业中,易百纳凭借其自主研发的Kubee Robot AI桌面机器人惊艳亮相,成为展区内的一大亮点。 Kubee Robot AI桌面机器人是南京启诺(易百纳运营公司)研发的一款聚焦多模态智能交互的创新产品,其核心优势在于深度整合了硬件配置与软件算法的双重实力。硬件层面,机器人搭载海思AI主控,内置星闪无线连接技术,具备高速、稳定的传输能力;同时集成多麦克风阵列、视觉摄像头及多种高性能传感器,为多模态交互提供了坚实的硬件基础,可全

机器人策略开发3步走:从菜鸟到高手的避坑实战手册

你是不是曾经面对一堆机器人代码手足无措?想开发自己的策略却不知从何下手?别担心,这篇文章就是为你量身定制的实用指南!我们将用最简单的语言,带你快速掌握LeRobot框架下机器人策略开发的核心技巧。 【免费下载链接】lerobot🤗 LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch 项目地址: https://gitcode.com/GitHub_Trending/le/lerobot 为什么你的机器人策略总是"翻车"? 在开始之前,我们先来盘点几个典型的"翻车现场": * 场景一:好不容易写好的策略,训练时却报各种莫名错误 * 场景二:模型效果时好时坏,完全看运气 * 场景三:好不容易训练完成,部署到真实机器人上却完全失效 这些问题其实都有共同的根源:对框架理解不够深入。今天,我们就用3个步骤,帮你彻底解决这些问题! 第一步:理解核心概念