FPGA 20个例程
文章平均质量分 89
精选20个FPGA经典实战例程,循循渐进,重点突出
青青豌豆
豌豆FPGA & STM32开发板,谢绝白嫖
展开
-
FPGA20个例程专栏介绍
最后在第七章、实战项目提升,完善简历,实事求是地说每个例程都可以作为一个项目部分写入简历中,真的会让面试官眼前一亮,例程“SD卡存放音频WAV播放”比较偏向校园电子大赛项目,如果是刚毕业找工作的大学生朋友们,把这个例程动手实践学习好,通过电子大赛项目方式表述在简历里,例程本身比较新颖、涉及的知识点多,会给面试官们留下不错的印象,自然地认为大家在学校的时候就有良好的编程和动手能力;......原创 2022-06-12 12:44:26 · 8640 阅读 · 5 评论 -
FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(五)
2. DDS IP核的输入信号s_axis_config_tdata在其指示信号s_axis_config_tvalid为高时有效,且信号s_axis_config_tdata的低32位是频率控制字,高32位是相位控制字,所以需要在dds_din_freq_vld和dds_din_phase_vld高有效时分别去赋值给s_axis_config_tdata对应的位;图7 输出10ms上升时间、10ms下降时间、10ms保持时间的梯形波。原创 2023-04-27 23:38:16 · 4212 阅读 · 8 评论 -
FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(四)
典型地在eth_control_top顶层模块中需要把UDP协议收到的数据、在usb_control_top顶层模块中需要把USB2.0中收到的数据,通过信号udp_dout和udp_dout_vld、信号rxd_data和rxd_data_vld分别例化出来,再在顶层模块中完成报文解析,有效提取出1字节的指令码和4字节的数据码送到下游指令解析模块中进行解析,指令解析模块把相应的参数通过FIFO写入任意波和正弦波模块中即可实现上位机程控开发板输出不同波形的效果。图2 USB2.0接口顶层模块的代码设计。原创 2023-04-23 20:45:22 · 3705 阅读 · 0 评论 -
FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(三)
正弦波设置中包括了频率、偏移的设置和指令码0x03、0x04相关联,数据码发送对应的频率控制字或者相位控制字的数值,数值也是由上位机端计算所得,单击上位机的“设置“控件则会把当前页面下的“上升时间”、“保持时间”、“下降时间”的值或者“频率”、“偏移”的值都下发下去,但是在“波形选择“栏中选择波形种类,上位机端只会下发设定波形类型的设置指令,并不会去下发当前频率控制字的设置指令。图1 USB2.0/RS232/ETH控制并行DAC输出任意频率正弦波、梯形波、三角波、方波的整体设计示意图。原创 2023-04-02 13:15:00 · 4552 阅读 · 3 评论 -
FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(二)
在结合XILINX的DDS IP核手册对数字变频参数进行说明后,我们再来看一看IP核的具体设置和各个信号量所代表的含义,以方便后续对其进行仿真测试,搞明白整个IP核的行为特征,细心的同学不难发现在XILINX的VIVADO环境下支持旗下所有7系列的芯片,而相比于ISE环境,大部分XILINX的官方IP核都支持AXI总线协议,AXI总线协议引入了握手机制等,当然在这里篇幅原因笔者就不展开叙述了,感兴趣的同学可以查阅XILINX的官方手册。原创 2023-03-10 23:33:02 · 4120 阅读 · 0 评论 -
FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(一)
如图7所示是数字变频的累加器步长和频率关系示意图,在简单地介绍完累加器步长和地址间映射后,就涉及到第三个知识点即频率分辨率了,那么在数字变频的过程中频率分辨率又是怎么计算出来的呢,对于分辨率相信大家也耳熟能详,比如现实生活中的显示屏有各种各样的分辨率如1920*1080、1024*768、640*480等,显然分辨率越高精确度越大,对于数字变频中其实也存在相似的说法,比如设定的精度理论上可以达到小数点前两位、前一位还是后一位、后两位、后三位等,而这个最小分辨率实际上参考时钟fclk与频率累加器位宽的比值。原创 2023-02-21 11:28:14 · 4015 阅读 · 7 评论 -
FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(四)
但是回归到现实在实际工程当中,首先不能保证采集和显示时钟是完全同步的,这只是一种理想的模型;在T2时刻结束,屏幕显示了1/2第一帧图像和1/2第二帧图像;最后就是第五个问题了即在FPGA视频研发当中,乒乓操作和多帧缓存有何异同,相信这是很多朋友们非常关心的问题,这也是笔者在学习实践FPGA过程中被困扰了很久的问题,乒乓操作这个思想真的非常好,也充分发挥了FPGA并行加速的硬件特点,但是大家再仔细想想看它真正从根本上完全解决了图像输入端和输出端之间不匹配或者说不同步的问题了吗。4.什么是局部乒乓和全局乒乓;原创 2023-01-23 12:39:50 · 4676 阅读 · 3 评论 -
FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(三)
在详细介绍过OV7725 CMOS Sensor的相关背景知识和如何初始化其内部寄存器达到输出预期视频流的目的后,就到了该例程的核心内容即把OV7725输出的视频流预先缓存到外部DDR3颗粒,接着按照HDMI的视频格式把DDR3颗粒内存储的一帧一帧图像数据送显到屏幕上显示,如图1所示是OV7725摄像头实时采集送HDMI显示整体设计示意图,在这里大家不妨先去停下来去思考下应该怎么设计这些模块,然后这些模块之间如何进行数据交互和缓存。图3 OV7725 CMOS Sensor在VGA帧模式下的输出时序图。原创 2023-01-21 11:29:31 · 4160 阅读 · 0 评论 -
FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(二)
根据“OV7725_software_application_note“即OV7725软件应用手册介绍,我们能了解到OV7725实际上一共包含了172个读写寄存器,以用于CMOS Sensor的工作模式的配置,在这里有的寄存器只支持读取或者写入,有的既支持读取又支持写入,在传感器正常工作前,需要用户人为地进行初始化配置才能工作在预取模式下,在这里虽然对这172个寄存器都可以通过SCCB总线进行配置,但是也并非所有的寄存器都需要配置,有些寄存器直接保持默认值即可。原创 2023-01-18 00:24:21 · 3430 阅读 · 4 评论 -
FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(一)
实际上笔者在绘制豌豆开发板原理图时,也参考了市面上大量开发板,但遗憾的是会发现不同开发板几乎都有自己一套自定义的接口,导致了很多不能兼容,也意味着当用了一家的开发板,如果想要做摄像头实验就必须购买对应的接口板和摄像头模块,不同开发板之间的摄像头模组不能通用,模块转接板不能通用,甚至连JTAG下载器接口也不能通用,就带来很多不必要的麻烦,所以笔者在这里采用了CMOS模块的统一接口,使其可以兼容市面上各家开发板的摄像头模块。图5 OV7725 CMOS Sensor模块的内部构造。原创 2023-01-15 09:03:50 · 5115 阅读 · 2 评论 -
FPGA 20个例程篇:18.SD卡存放音频WAV播放(下)
如图5所示是SD卡存放音频WAV播放顶层模块的代码设计,大家需要把各个模块的相关信号例化到一起,在这个例程中首先我们在SD卡中事先存储好了很多首WAV格式的歌曲,然后按下按键KEY1,FPGA会按照SD卡的扇区依次遍历各个扇区直到找到WAV文件头格式的歌曲,把WAV格式的音频数据按照WM8731配置的Right justified、主时钟、默认32bit模式播放歌曲,接着当播放完一首歌曲后,再按下按键KEY1,FPGA会再去查找SD卡扇区的下一首WAV文件头格式的歌曲,找到后继续播放下一首。原创 2022-12-10 22:07:39 · 3010 阅读 · 3 评论 -
FPGA 20个例程篇:18.SD卡存放音频WAV播放(中)
如图1所示是WM8731中11个寄存器功能说明概况图,我们需要对照手册,再去深入了解WM8731中的11个寄存器,怎么去配置这些寄存器达到预期的效果,起初笔者在刚接触这款芯片时,猛地一看这么多个寄存器,那么为了保险起见,就想着把所有的寄存器都按照顺序配置一遍,实际在这里走了一些弯路并且反复排查耽误了两天时间。 注意到复位寄存器R15,其相当于之前PHY芯片对MDIO接口的软复位,当我们写入这个复位命令后实际上证明是WM8731就会将所有的控制寄存器都写入0,本来开发板一上电WM8731会自己复位,原创 2022-12-04 23:31:52 · 3452 阅读 · 0 评论 -
FPGA 20个例程篇:18.SD卡存放音频WAV播放(上)
如图3所示是WM8731的内部结构和引脚说明这里可以对照图7-1中所示的原理图,其中关键的部分笔者都用了红框进行标记,对于本例程的功能实现,实际上我们关心的只需要去关注3个部分即可,即结构图中的1处的初始化配置控制接口,2处的语音数据到音频信号数模DAC转换接口,3处的音频连接器耳机输出接口,分别对应引脚图中6处的CSB、MODE、SCLK、SDIN,4处的BCLK、DACDAT、DACLRC、ADCDAT、ADCLRC以及5处的LHPOUT和RHPOUT。原创 2022-11-27 21:38:28 · 3876 阅读 · 0 评论 -
FPGA 20个例程篇:17.SD卡存放图片逐一送VGA显示(下)
接着我们再来看一看video_driver即VGA图像显示模块,在这个模块中我们需要和上游DDR3读写控制模块进行数据交互,并根据VGA到显示逻辑,在扫描到有效区域的时候,通过video_rdy信号,触发上游模块的读FIFO使能信号,再依次从上游模块中读取128位的数据,因为在这里一个RGB565像素点恰好是16位,所以把128位数据拆分成8个16位数据传给VGA显示,如表1所示是video_driver模块信号列表。图3 SD卡存放图片逐一送VGA显示顶层文件的例化。SD卡图片VGA显示。原创 2022-10-05 18:03:55 · 2522 阅读 · 2 评论 -
FPGA 20个例程篇:17.SD卡存放图片逐一送VGA显示(上)
在学习实践过SD卡读写和VGA驱动显示的时序后,在下面4个例程中笔者精心选择了综合性较强的,相信大家静下心把这4个例程都独立地去实现后,FPGA的设计能力又会提高了一大步。 这几个例程更贴近于实战项目可以帮大家丰富简历内容,这里不妨去设想一个很真实的场景,如果您是面试官在看到很多简历尤其是校招中写的都是异步FIFO、UART、VGA等各种培训班或者网课的基本项目,但突然看到一份简历里写的项目内容:SD卡存储图片和音频并显示和播放、OV7725实时采集图像乒乓读写DDR3送HDMI图像边缘检测显原创 2022-10-05 09:28:02 · 4685 阅读 · 3 评论 -
FPGA 20个例程篇:16.HDMI显示彩色风景图
大家可以对照图9,思考下如何实现并转串的过程即把8B/10B编码后的10位数据通过HDMI接口上的差分对把数据传输出去,这里假设video_driver驱动模块的模块时钟是pixel_clk,显然为了实现10位到1位的并转串处理,如果是sdr单边缘触发传输,那么 需要一个相对于pixel_clk时钟快十倍的pixel_clk_sdr时钟作为数据传输的参考时钟,如果是ddr双边缘触发传输,那么则需要一个相对于pixel_clk时钟快五倍的pixel_clk_ddr时钟作为数据传输的参考时钟即可。原创 2022-09-26 16:25:17 · 5302 阅读 · 4 评论 -
FPGA 20个例程篇:15.VGA显示八种颜色的彩条
在中学的物理课中我们可能做过棱镜的试验,白光通过棱镜后被分解成多种颜色逐渐过渡的色谱,色依次为红、橙、黄、绿、青、蓝、紫,这就是可见光谱。但需要注意的是,虽然大家看到的屏幕大小是640*480的,但是它的实际大小并不只有那么大,或者更通俗点地说,VGA扫描的范围是包含了肉眼能看到的640*480这块区域的更大区域,它会在周围一圈你看不到的区域部分进行扫描,所以在程序设计上,我们在处理扫描信号的时候要注意只有扫描到有效区域的时候才能把像素点数据传给VGA显示,如图6所示形象地描述VGA成像的显示原理。原创 2022-09-19 16:45:51 · 4080 阅读 · 2 评论 -
FPGA 20个例程篇:14.千兆网口实现ICMP、UDP通信协议(下)
在这里想着重说明一点,即不论是ICMP还是UDP发送模块,都要在发送帧之前计算好对应的IP首部校验、ICMP首部校验或者UDP首部校验,对于IP首部校验仅仅只是代入IP首部20个字节进行校验,而对于ICMP首部校验或者UDP首部校验需要校验首部和数据等,所以这也就是在整个例程中用RAM而不用FIFO作为数据收发缓存的原因,因为实际上在ICMP和UDP帧数据打报发送时,需要用到两次缓存中接收到的数据,一次是用来计算首部校验和,另一次是用来发送数据报,如图2所示是UDP发送模块的代码设计。原创 2022-09-18 20:50:29 · 6020 阅读 · 33 评论 -
FPGA 20个例程篇:14.千兆网口实现ICMP、UDP通信协议(上)
在依次设计完以太网首部解析模块、ARP数据解析模块、IP首部解析模块、UDP数据解析模块后,只剩下ICMP数据解析模块了,在这个模块中我们主要实现PC端发起的ping功能,也是ICMP帧中最常用和最关键的功能,ICMP是TCP/IP协议族的一个IP层子协议,包含在IP数据报里,用于IP主机、路由器之间传递控制消息,如图13所示是ICMP数据报格式,其中回送请求报文类型为8'h08,回答报文类型为8'h00。所以利用IP首部长度和IP数据报总长度,就可以知道IP数据报中数据内容的起始位置和长度。原创 2022-09-08 17:32:55 · 9325 阅读 · 15 评论 -
FPGA 20个例程篇:13.千兆网口实现ARP通信协议(下)
先来看以太网首部解析模块,如图1所示是ARP帧的报文格式,其中包括了14字节的以太网首部和28字节的ARP请求应答数据,在这个模块中我们来实现以太网首部的解析,注意到以太网的帧前端含8个字节前导码,即64'h55_55_55_55_55_55_55_55_d5,所以在这个模块中也需要去判断前导码是否正确,如表1所示是mac_receive_analy模块信号列表。整个模块代码设计中没有过多复杂的功能,按照流程来判断即可,用一个状态机来实现。原创 2022-08-23 08:29:20 · 4505 阅读 · 10 评论 -
FPGA 20个例程篇:13.千兆网口实现ARP通信协议(上)
如表1所示是rgmii_to_gmii模块信号列表,要在这个模块中去实现RGMII接口和GMII接口之间的相互转换,因为模块中有4组信号要进行DDR到SDR之间的转换,即gmii_txd和rgmii_txd,rgmii_rxd和gmii_rxd,gmii_tx_en和rgmii_tx_en,rgmii_rx_dv和gmii_rx_dv,所以调用了4个SelectIO IP核,如图19所示是RGMII接口和GMII接口转换的代码设计。ARP映射是指将IP地址和MAC地址映射起来,分为静态映射和动态映射。原创 2022-08-22 18:43:54 · 5855 阅读 · 1 评论 -
FPGA 20个例程篇:12.千兆网口实现MDIO接口读写
如图1所示是豌豆开发板Artix7上千兆LAN口电路,这里选取了经典的KSZ9031RN而作为PHY的主控芯片,KSZ9031RN相比于传统的PHY芯片例如RTL8211E,既可以支持10/100/1000 Mbps网络传输速率,又通过RGMII接口和FPGA相连进行数据通信,RGMII是GMII的精简版,相比于GMII接口,RGMII在硬件上极大地节约了引脚数量,数据的收发引脚由8根变成4根,所以在1000Mbps的传输速率下,即时钟频率是125Mhz时,在时钟的上下沿同时采样数据。...原创 2022-08-16 19:00:40 · 9020 阅读 · 13 评论 -
FPGA 20个例程篇:11.USB2.0接收并回复CRC16位校验
如图9所示是FT232HL芯片在FT245 FIFO模式下的引脚定义,其中ADBUS[7:0]即为输入输出总线,对于FPGA端来说CLKOUT、RXF#、TXE#均为输入引脚,其他的RD#、WR#、SIWU#、OE#均为输出引脚,我们对照芯片手册来看下这些引脚的功能,先大致有个了解,再对照芯片手册的读写逻辑进行代码还原,实际上正如模式名所述,在这种模式下对于FPGA端也如同控制FIFO一样,即可完成对USB2.0的读写操作。4. TXE#:当其为高电平时,表示不能从FIFO中写入数据。......原创 2022-08-08 09:51:51 · 6251 阅读 · 1 评论 -
FPGA 20个例程篇:10.遍历DDR3内存颗粒读写循环校验
例程的整体功能如下按下豌豆开发板的按键,触发开发板一次性遍历读写DDR3内存颗粒循环校验,开发板板载的DDR3芯片型号是镁光MT41J128M16JT,在上一个例程中我们也详细地阅读了其芯片手册,所对应的bank块位宽是3即BA[20],row行位宽是14即A[130],column列位宽是A[90],整颗DDR3的地址大小是2^3*2^14*2^10,即2^27=128M,我们需要把整个内存颗粒的所有地址都遍历读写测试一遍,进而确认硬件物料和链路整体上的可靠性。图2DDR3驱动模块的代码设计。......原创 2022-08-02 13:00:13 · 4090 阅读 · 1 评论 -
FPGA 20个例程篇:9.DDR3内存颗粒初始化写入并通过RS232读取(下)
2.对于写数据操作,和读写地址操作相类似,也是四个信号app_wdf_data、app_wdf_rdy、app_wdf_wren、app_wdf_end一定要对齐,一样的其中app_wdf_rdy是由MIGIP核所产生的输出信号,另外三个信号均由用户端产生并输出到MIGIP核,当MIGIP核默认突发长度为8时,app_wdf_end和app_wdf_wren相同,在app_wdf_rdy为高时去拉高app_wdf_wren,则此时app_wdf_data数据有效输入到MIGIP核;.........原创 2022-07-24 09:06:26 · 4646 阅读 · 0 评论 -
FPGA 20个例程篇:9.DDR3内存颗粒初始化写入并通过RS232读取(上)
在做嵌入式开发过程中“内存”仿佛是无处不在。DDR3颗粒作为当前较为常见的一种储存器,在计算机和嵌入式产品中得到广泛应用,尤其是在涉及到大数据量交互的场合,在FPGA领域比如视频加速处理、AD高速采集、PCIE上位机开发、SFP万兆光口传输等,几乎都能看到DDR3的身影,XILINX也为用户提供了MIG IP核方便实现对DDR3颗粒数据读写的二次开发,但市面上却鲜有不错的教程能快速带领大家入门上手,所以在这一章中笔者选取了两个经典的例程,通过它们就可以很好地去掌握MIG IP核的使用技巧。 DDR原创 2022-07-23 20:20:36 · 5440 阅读 · 0 评论 -
FPGA 20个例程篇:8.SD卡任意地址的读写
SD卡作为最常见的外设之一,本身也是一种基于半导体快闪记忆器的新一代记忆设备。它具有体积小、传输速度快、支持热插拔等优点,在便携式装置领域得到了非常广泛的应用,例如数码相机、多媒体播放器、笔记本电脑、行车记录仪等等都能看到它的身影,相比EEPROM和FLASH而言,SD卡具有断电存储大型数据的优势,同时对于.bmp、.wav等很多格式的数据会按照扇区进行存储,如图1所示是豌豆开发板Artix7上SD卡电路,为了在这款开发板上集成更多的外设资源,电路设计上节约了引脚,FPGA直接通过SPI总线和SD卡进行数据原创 2022-07-15 22:20:12 · 8543 阅读 · 0 评论 -
FPGA 20个例程篇:7.FLASH读写断电存储
三、数据断电存储,工程必备7.FLASH读写断电存储 这篇博客主要讲述QSPI-FLASH,怎么设计FPGA的时序逻辑去实现FLASH的页数据读写、擦除的,这个例程本身有着有非常深刻地学习价值,这里大家不妨去思考一些工作中的常见场景:1.做单片机STM32开发,KEIL编译过后下载直接通过ST-LINK,J-LINK等把bin文件烧写到单片机的内部FLASH里,同样地我们可以把一些希望掉电保存的大批量数据也烧写到STM32内部FLASH里,用后面的扇区即可;2.STM32外挂一颗FLA....原创 2022-05-25 09:56:40 · 9212 阅读 · 14 评论 -
FPGA 20个例程篇:6.EEPROM的任意地址读写断电存储
三、数据断电存储,工程必备6.EEPROM的任意地址读写断电存储 在FPGA 20个例程专栏的第三章节里,我们将围绕Eeprom,Qspi-Flash和Sd卡的读写时序逻辑设计展开,这也是实际项目开发当中所必备的,可能专栏里第一个章节比较基础,通过按键、点灯、蜂鸣器找到些编码的感觉,第二章节通过UART SPI IIC来展开,主要为了掌握常用的低速接口时序设计,这也是简历中必须体现到的。 笔者在撰写整个FPGA 20个例程专栏时,绞尽脑汁花了很多心思在这里,因为想做好......原创 2022-05-04 11:16:35 · 5755 阅读 · 3 评论 -
FPGA 20个例程篇:5.温度传感器实时采集温度
二、常用通信协议,摸索探究:5.温度传感器实时采集温度 温度传感器、重力传感器等等这些传感器模块其实在市面上很多设备都有广泛的应用,可能大家平时没有留心去观察。举个例子我们经常用的平板电脑或者电子书阅读器都有“自动旋转”的功能,这里面其实就是用了重力传感器,硬件上重力传感器去检测当前用户拿设备的姿势,并传入CPU一个信号量,软件上再根据该信号去进行屏幕的自动旋转。温度传感器也同样常用,现在太多的嵌入式产品都有温度显示的功能,这里面毫无疑问都用了温度传感器在实时采集当前设备的温度,典型的就有...原创 2022-04-19 22:46:14 · 12672 阅读 · 3 评论 -
FPGA 20个例程篇:4.串行DAC输出模拟电压控制LED亮度
二、常用通信协议,摸索探究:4.串行DAC输出模拟电压控制LED亮度 首先在此表示抱歉,笔者因为最近杂七杂八的事情比较多,搞得整个人莫名其妙地忙起来,所以博客更新的相对缓慢些,期间也有朋友私信我催更,表示在等着新例程学习呢,打开CSDN APP看到这些留言心里有一丝欣慰。 之前的承诺20个FPGA例程精讲精析,笔者会尽最大可能保持每周一个的速度持续更新,因为编写和整理代码会消耗不少的时间,后续例程的代码也会慢慢复杂起来,下班回来要做饭和陪女友,另外还要持续地学习工作方面.........原创 2022-04-06 23:27:02 · 6923 阅读 · 4 评论 -
FPGA 20个例程篇:3.RS232通信缓存数据
二、常用通信协议,摸索探究:3.RS232通信缓存数据 在FPGA20个例程篇的第二章里,笔者主要为大家介绍UART、SPI、IIC嵌入式软件开发必备的三大常用低速通信协议的规则,和基于此的Verilog逻辑设计,并归纳总结出书写规范化的代码,在这个UART例程中,我们去实现一个功能:通过串口助手向Artix7开发板发数据,FPGA先把数据暂时存储到FIFO中,当按下开发板的按键时,FPGA再把FIFO中存储的数据发送到串口调试助手上打印,一个不复杂的例程,也顺便带着去复习下前面功能文件....原创 2022-03-26 15:30:51 · 4350 阅读 · 0 评论 -
FPGA 20个例程篇:2.按键控制蜂鸣器输出PWM波,发出不同频率响声
一、典型基础入门,小试牛刀 :2.按键控制蜂鸣器输出PWM波,发出不同频率响声 谈起蜂鸣器,大家都不会陌生,在嵌入式领域应用也非常广泛,比如仪器仪表、工控设备当中都离不开蜂鸣器的身影,在轻触触摸屏进行机器操作的时候,蜂鸣器的响声不同则可以用于标记机器的当前状态:正常使用、报警、异常等等。 那么如何才能做到准确地控制蜂鸣器发出不同的响声呢,使得其有时低沉,有时清脆,有时尖锐,而本身蜂鸣器只有一个IO口是连接到FPGA芯片上的,那么这里就需要引入PWM的概念。PWM即......原创 2022-03-20 19:53:06 · 8220 阅读 · 1 评论 -
FPGA 20个例程篇:1.不同按键控制不同LED亮灭
一、典型基础入门,小试牛刀 : 1.不同按键控制不同LED亮灭 通过前面博客介绍的FPGA基础知识,引入了状态机的概念,初学FPGA的朋友们肯定会想到一些很普遍的问题,例如什么时候用状态机,状态机的状态怎么去划分,状态机和计数器怎么交互设计应用,很多教程、书籍包括培训机构等都会提到状态机设计跳转等等,但是很少有真正地切身站在读者角度考虑的,所以看来看去,读来读去,也都觉得如同水中望月、雾里看花一样让人琢磨不透。 其实这需要积累了一定的代码量、调试技巧和项目经验后............原创 2022-03-16 19:29:43 · 6612 阅读 · 1 评论