当前位置: 首页 > article >正文

从芯片内部看世界:手把手教你用Verilog在FPGA上点灯(入门必备的5个基础门电路实验)

从芯片内部看世界手把手教你用Verilog在FPGA上点灯第一次接触FPGA开发时我被这个神奇的世界深深吸引——几行代码就能在硬件上创造出各种逻辑功能。还记得当初点亮第一个LED时的兴奋仿佛打开了数字世界的大门。本文将带你从最基础的门电路开始通过五个经典实验用Verilog在FPGA上实现LED控制体验从代码到硬件的完整流程。1. 实验环境准备1.1 硬件选择与连接对于入门级FPGA开发推荐使用以下硬件组合FPGA开发板Xilinx Artix-7系列或Intel Cyclone 10 LP系列外设需求至少2个按键开关和4个LED灯下载器Xilinx平台选用Digilent USB-JTAGIntel平台选用USB-Blaster连接示意图FPGA开发板 ├── JTAG接口 → 下载器 → PC ├── 按键1 → IO引脚P12 ├── 按键2 → IO引脚P13 └── LED1 → IO引脚P421.2 软件工具安装不同平台需要安装对应的开发环境Xilinx VivadoWindows/Linux# Ubuntu安装示例 sudo apt install libncurses5-dev libtinfo5 ./xsetup -b Install -a XilinxEULA,3rdPartyEULA,DownloadableOpensourceIntel Quartus PrimeWindows/Linux# 安装完成后需添加环境变量 export PATH$PATH:/opt/intelFPGA/20.1/quartus/bin提示初学者建议使用Vivado ML Edition或Quartus Prime Lite版本它们对教育用途免费。2. 基础门电路实验2.1 非门实验按键控制LED反向非门NOT Gate是最简单的逻辑元件实现信号反转功能。在FPGA上我们可以用按键作为输入LED显示输出状态。Verilog实现代码module not_gate( input wire btn, // 连接开发板按键 output wire led // 连接开发板LED ); assign led ~btn; // 核心逻辑输出等于输入取反 endmodule硬件验证步骤创建约束文件XDC或QSF格式# Xilinx Vivado约束示例 set_property PACKAGE_PIN P12 [get_ports btn] set_property IOSTANDARD LVCMOS33 [get_ports btn] set_property PACKAGE_PIN P42 [get_ports led] set_property IOSTANDARD LVCMOS33 [get_ports led]综合并生成比特流文件下载到FPGA验证按下按键时LED应熄灭松开时点亮2.2 与门实验双按键控制LED与门AND Gate实现逻辑与运算只有所有输入为1时输出才为1。我们将用两个按键模拟输入信号。真值表对照按键A按键BLED状态000010100111Verilog实现module and_gate( input wire btn1, input wire btn2, output wire led ); assign led btn1 btn2; // 逻辑与运算 endmodule注意实际按键通常为低电平有效可能需要添加反相器assign led ~btn1 ~btn2;2.3 或门实验任一按键触发LED或门OR Gate在任一输入为1时输出1。这个实验可以制作紧急开关效果。硬件连接改进增加第三个LED用于显示或门输出保持前两个LED分别显示两个按键状态Verilog扩展代码module or_gate( input wire btn1, input wire btn2, output wire [2:0] leds // 三位LED总线 ); assign leds[0] btn1; // LED0显示按键1状态 assign leds[1] btn2; // LED1显示按键2状态 assign leds[2] btn1 | btn2; // LED2显示或门结果 endmodule3. 组合逻辑实验3.1 与非门实验反向与逻辑与非门NAND Gate是与门和非门的组合先进行与运算再取反。这是数字电路中最常用的通用逻辑门之一。电路符号表示A --| | | NAND|-- Y B --|____|Verilog实现方案对比实现方式代码示例资源占用运算符直接实现assign y ~(a b);1个LUT门级实例化and AND1(c, a, b); not NOT1(y, c);2个LUT推荐使用运算符直接实现module nand_gate( input wire a, input wire b, output wire y ); assign y ~(a b); endmodule3.2 异或非门实验比较器应用异或非门XNOR Gate输出两个输入是否相同可用于制作简单的比较器电路。应用场景示例密码校验当输入密码与预设值匹配时点亮LED信号一致性检测Verilog实现技巧module xnor_gate( input wire [1:0] sw, // 两位拨码开关输入 output wire led ); // 两种等效实现方式 assign led ~(sw[0] ^ sw[1]); // 方式1异或后取反 // assign led (sw[0] ~^ sw[1]); // 方式2直接使用XNOR运算符 endmodule4. 综合实验门电路组合应用4.1 简单密码锁设计结合前面学到的门电路我们可以创建一个基础的安全锁系统使用4个拨码开关作为密码输入预设密码为4b1010二进制当输入匹配时点亮绿色LED不匹配时红色LED闪烁Verilog实现代码module password_lock( input wire [3:0] sw, // 4位拨码开关 output wire green_led, output wire red_led, input wire clk // 板载时钟(50MHz) ); // 密码比较部分 wire match; assign match (sw[3] ~^ 1b1) // 位比较 (sw[2] ~^ 1b0) (sw[1] ~^ 1b1) (sw[0] ~^ 1b0); assign green_led match; // 红色LED闪烁逻辑 reg [24:0] counter; always (posedge clk) begin counter counter 1; end assign red_led ~match counter[24]; // 约1.5Hz闪烁 endmodule4.2 硬件调试技巧当设计不能正常工作时可以按照以下步骤排查信号完整性检查确认约束文件中的引脚分配正确用万用表测量按键和LED的电压电平仿真验证创建测试平台文件module tb_and_gate(); reg a, b; wire y; and_gate uut(a, b, y); initial begin a0; b0; #10; a0; b1; #10; a1; b0; #10; a1; b1; #10; $finish; end endmodule内部逻辑分析使用SignalTap(II)或ILA工具抓取内部信号添加调试输出端口观察中间结果5. 进阶思考与优化5.1 时序约束与优化当设计规模增大时需要关注时序性能。基础约束示例# 时钟约束 create_clock -period 20.000 -name clk [get_ports clk] # 输入延迟约束 set_input_delay -clock clk 2.000 [get_ports btn*] # 输出延迟约束 set_output_delay -clock clk 2.000 [get_ports led*]5.2 资源利用率对比不同实现方式的资源消耗比较Artix-7为例逻辑门类型LUT使用数最大频率(MHz)非门1450与门1400或门1400与非门1380异或非门13505.3 实际项目中的应用这些基础门电路在复杂系统中的典型应用非门信号极性转换与门使能控制、地址解码或门中断信号合并与非门SR锁存器构建异或非门奇偶校验、比较器在完成这些实验后可以尝试将这些模块封装成IP核方便在更大项目中复用。例如创建一个基础门电路库module gates_lib( input wire a, input wire b, output wire [5:0] outputs ); assign outputs[0] ~a; // NOT assign outputs[1] a b; // AND assign outputs[2] a | b; // OR assign outputs[3] ~(a b); // NAND assign outputs[4] ~(a | b); // NOR assign outputs[5] ~(a ^ b); // XNOR endmodule

相关文章:

从芯片内部看世界:手把手教你用Verilog在FPGA上点灯(入门必备的5个基础门电路实验)

从芯片内部看世界:手把手教你用Verilog在FPGA上点灯 第一次接触FPGA开发时,我被这个神奇的世界深深吸引——几行代码就能在硬件上创造出各种逻辑功能。还记得当初点亮第一个LED时的兴奋,仿佛打开了数字世界的大门。本文将带你从最基础的门电路…...

基于Django构建开源提示词管理系统Vidura:从设计到部署全指南

1. 项目概述:为什么我们需要一个专业的提示词管理系统?如果你和我一样,每天都在和ChatGPT、Midjourney或者各种AI模型打交道,那你肯定遇到过这个场景:脑子里突然冒出一个绝妙的提示词(Prompt)&a…...

3步实现游戏模组革命:BepInEx插件框架的完整实践指南

3步实现游戏模组革命:BepInEx插件框架的完整实践指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 你是否厌倦了游戏中一成不变的玩法?想要为心爱的游戏添…...

AI大模型发展全景图:从Transformer到多模态的技术演进与学习指南

1. 项目概述:一份AI大模型发展的全景图如果你最近也在关注AI领域,尤其是大语言模型(LLM)的进展,可能会和我有同样的感觉:信息爆炸,迭代太快。今天这家公司发布了一个新模型,明天那个…...

别再只画图了!用Python的Confusion Matrix类一键计算并可视化模型精度、召回率

别再只画图了!用Python的Confusion Matrix类一键计算并可视化模型精度、召回率 在机器学习项目的最后阶段,我们常常需要评估分类模型的性能。很多开发者习惯性地打开matplotlib,绘制一个标准的混淆矩阵图表就宣告任务完成。但真正的模型评估…...

3大核心功能!NS-USBLoader:Switch玩家的全能文件管理神器

3大核心功能!NS-USBLoader:Switch玩家的全能文件管理神器 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://gitcod…...

从“为什么”到“怎么做”:给C语言新手的MISRA-C-2012核心规则精讲(规则10.1/15.6/17.7详解)

从“为什么”到“怎么做”:给C语言新手的MISRA-C-2012核心规则精讲 在嵌入式开发领域,MISRA-C标准就像一位严格的导师,时刻提醒我们规避那些看似合理却暗藏风险的编码习惯。对于刚掌握C语言语法却缺乏工业级开发经验的程序员来说,…...

从零搭建私有Helm Chart仓库:ChartMuseum架构解析与K8S生产实践

1. 项目概述:为什么我们需要一个私有的 Helm Chart 仓库?在云原生和 Kubernetes 生态中,Helm 作为事实上的“包管理器”,其重要性不言而喻。它让部署复杂的应用变得像安装一个软件包一样简单。但当我们从个人学习或小团队开发&…...

别再死记if语法了!通过水仙花数、三角形判断,带你理解Python分支的‘思维模型’

从水仙花数到三角形判断:Python分支结构的思维跃迁 当新手程序员第一次接触if语句时,往往会被其表面上的简单所迷惑——语法规则清晰明了,示例代码一看就懂。然而,当他们真正面对实际问题时,却常常陷入困境&#xff1a…...

别再死记硬背了!用Python和逻辑分析仪,动态解析TTL与非门的电压传输特性曲线

用Python动态解析TTL与非门的电压传输特性曲线 在数字电路的学习中,TTL与非门是最基础也最重要的组件之一。传统的学习方式往往依赖于死记硬背电压传输特性曲线,这不仅枯燥,也难以真正理解电路在不同工作状态下的动态行为。本文将介绍如何利…...

突破《原神》帧率限制:内存注入技术的实战部署指南

突破《原神》帧率限制:内存注入技术的实战部署指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 在追求极致游戏体验的道路上,60帧的硬性限制已成为高刷新率显示…...

阴阳师百鬼夜行AI自动化脚本:深度解析智能决策架构与算法优化

阴阳师百鬼夜行AI自动化脚本:深度解析智能决策架构与算法优化 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript Onmyoji Auto Script的百鬼夜行自动化脚本通过先进的计…...

从“玩具”到“产品”:用LangChain Prompt Templates设计稳定可靠的AI提示工程

从原型到生产:LangChain提示模板工程化实践指南 当AI应用从演示环境走向真实生产时,那些在测试阶段表现良好的临时提示(Prompt)往往会暴露出各种问题——输出不稳定、格式混乱、边界情况处理能力差。这就像用橡皮筋搭建的桥梁&am…...

Arm CoreLink NI-700 NoC架构与电源管理技术解析

1. Arm CoreLink NI-700 NoC架构概览 在现代SoC设计中,片上网络(NoC)已成为连接处理器、内存控制器和各类加速器的核心基础设施。Arm CoreLink NI-700作为第五代NoC解决方案,采用分布式路由架构,支持AXI5、AHB5等最新AMBA协议,其创…...

5分钟学会专业级GPU显存稳定性测试:memtest_vulkan完整指南

5分钟学会专业级GPU显存稳定性测试:memtest_vulkan完整指南 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 你的显卡真的健康吗?当你沉浸…...

避坑指南:STM32F407+RT-Thread解码SD卡JPG图片到LCD,内存与性能优化实战

STM32F407RT-Thread实战:JPG解码性能优化与内存管理精要 在嵌入式图像处理领域,JPG解码一直是资源受限设备面临的典型挑战。当开发者尝试在STM32F407这类中等性能MCU上实现SD卡JPG图片解码并输出到LCD时,往往会遭遇解码速度慢、大图显示死机…...

BookGet:如何一键下载全球50+数字图书馆的古籍资源?

BookGet:如何一键下载全球50数字图书馆的古籍资源? 【免费下载链接】bookget bookget 数字古籍图书下载工具 项目地址: https://gitcode.com/gh_mirrors/bo/bookget 你是否曾为寻找珍贵古籍文献而烦恼?作为一名历史爱好者、学术研究者…...

ai赋能科学减碳:在快马平台开发智能sbti目标推荐系统

最近在做一个关于企业碳减排目标设定的项目,发现科学碳目标倡议(SBTi)的设定过程其实挺复杂的。作为一个开发者,我尝试用AI来简化这个过程,在InsCode(快马)平台上做了一个智能推荐系统。这里分享一下开发过程和经验。 项目背景与需求分析 S…...

别再只调参了!用Flask+ECharts给随机森林/XGBoost农业预测模型做个可视化大屏(附完整源码)

从模型到产品:用FlaskECharts打造农业预测可视化系统实战指南 当你的随机森林模型在Jupyter Notebook里跑出0.95的R2分数时,是否想过如何让农业合作社的技术员真正用上这个成果?本文将带你跨越从算法原型到可交互产品的最后一公里。不同于单…...

零刻EQ12 N100小主机保姆级All in One搭建:从ESXI8.0到iKuai旁路由的完整避坑记录

零刻EQ12 N100小主机All in One实战:从ESXI8.0部署到iKuai旁路由的深度指南 当一台巴掌大的迷你主机遇上虚拟化技术,家庭网络和存储的玩法将被彻底改写。零刻EQ12 N100凭借其双2.5G网口和低功耗特性,正成为DIY爱好者构建All in One系统的热门…...

对话机器人工程化实践:从架构设计到生产部署的完整指南

1. 项目概述与核心价值 最近在开源社区里,一个名为 moltbot-best-practices 的项目引起了我的注意。这个项目托管在 NextFrontierBuilds 组织下,名字直译过来是“MoltBot最佳实践”。乍一看,你可能会觉得这又是一个围绕某个特定聊天机器人…...

Go语言原生AI Agent框架:构建高性能、类型安全的智能应用

1. 项目概述:为什么Go需要一个原生的AI Agent框架 在当前的AI开发浪潮中,Python生态几乎占据了绝对主导地位,从PyTorch、TensorFlow到LangChain、LlamaIndex,开发者们被海量的Python库所包围。作为一名长期在后台系统、高并发服务…...

COMSOL波动光学避坑指南:从石墨烯建模到完美匹配层(PML)设置的10个常见错误

COMSOL波动光学避坑指南:从石墨烯建模到完美匹配层(PML)设置的10个常见错误 在COMSOL Multiphysics中进行波动光学仿真时,即使是经验丰富的用户也难免会遇到各种"坑"。这些错误往往不会导致软件直接报错,但会悄无声息地影响仿真结…...

别再踩坑了!阿里云ICP备案全流程保姆级指南(含App备案新规)

阿里云ICP备案避坑指南:从域名准备到公安备案的全流程解析 第一次在阿里云提交ICP备案时,我盯着驳回通知足足愣了三分钟——"网站名称不符合规范"。这个看似简单的环节,让我多耗费了两周时间重新走流程。后来才发现,管局…...

别再搞混了!CarSim数据库、Library和Dataset到底啥关系?一个例子讲透

CarSim数据管理体系深度解析:从概念到实战的完整指南 打开CarSim软件时,面对Database、Library、Category和Dataset这四个核心概念,不少工程师都会产生"选择困难症"——该从哪里开始?如何组织数据才符合最佳实践&#…...

FPGA在DSP领域的优势与Xilinx开发套件实战

1. FPGA在DSP领域的独特优势解析作为一名长期从事数字信号处理系统开发的工程师,我见证了FPGA如何从单纯的逻辑器件演变为DSP领域的核心处理器件。FPGA(现场可编程门阵列)与传统DSP处理器最本质的区别在于其硬件可编程性和并行架构。想象一下…...

保姆级教程:在VMware Workstation 17 Pro上搞定Win11虚拟机(含TPM 2.0和UEFI安全引导配置)

深度解析:VMware Workstation 17 Pro部署Win11虚拟机的全流程实战 在虚拟化技术日益成熟的今天,越来越多的开发者和IT专业人员选择在虚拟机环境中测试和运行Windows 11系统。不同于简单的安装向导,本文将深入探讨如何利用VMware Workstation …...

别再让模型‘瞎猜’了!用Active Learning减少90%标注成本(附Python代码实战)

别再让模型‘瞎猜’了!用Active Learning减少90%标注成本(附Python代码实战) 在电商商品分类和内容审核等实际业务场景中,数据标注往往是机器学习项目中最昂贵的环节。想象一下,当你的团队需要标注数百万张商品图片时&…...

基于MCP协议构建AI家庭信息助手:Famulor-MCP项目实战解析

1. 项目概述与核心价值最近在折腾AI智能体开发的朋友,估计对“MCP”(Model Context Protocol)这个词已经不陌生了。简单来说,MCP就像是为你的AI大模型(比如Claude、GPTs)提供了一个标准化的“插件商店”&am…...

TranslucentTB完整指南:3步让Windows任务栏变透明

TranslucentTB完整指南:3步让Windows任务栏变透明 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想要让你的Windows桌面焕然…...