从半加器到全加器:用Quartus II 13.1 + DE2-115开发板完成你的第一个FPGA项目
从半加器到全加器用Quartus II 13.1 DE2-115开发板完成你的第一个FPGA项目当你第一次接触FPGA开发时可能会被各种专业术语和复杂的工具链吓到。但别担心今天我们将通过一个完整的项目实践带你从零开始完成一个数字电路设计。我们将使用Quartus II 13.1软件和DE2-115开发板从最基础的半加器开始逐步构建一个全加器最终在硬件上验证我们的设计。这个项目不仅能让你快速上手FPGA开发还能让你直观地看到数字电路从设计到实现的完整流程。1. 环境准备与工具安装在开始我们的FPGA之旅前首先需要准备好开发环境。Quartus II是Intel(原Altera)推出的FPGA开发软件13.1版本虽然不算最新但对初学者来说足够稳定且资源丰富。1.1 Quartus II 13.1安装指南安装过程需要注意几个关键点下载资源获取建议从Intel官网或授权教育机构获取安装包确保下载完整版本包含所有必要组件安装步骤运行安装程序时建议选择Complete安装类型安装路径避免使用中文或包含空格的目录安装过程中可能需要关闭杀毒软件许可证配置安装完成后需要配置许可证文件对于教育用途可以申请免费的网络版许可证提示安装过程中如果遇到驱动警告选择始终安装此驱动程序软件。1.2 DE2-115开发板驱动安装DE2-115开发板是Terasic公司推出的一款经典FPGA学习板搭载Cyclone IV E系列FPGA芯片。要让电脑识别开发板需要安装USB-Blaster驱动# 驱动通常位于Quartus安装目录下的drivers\usb-blaster文件夹 # 在设备管理器中手动指定驱动位置进行安装安装完成后连接开发板到电脑在设备管理器中应该能看到USB-Blaster设备状态为设备运转正常。2. 创建第一个半加器项目现在让我们开始真正的FPGA设计之旅。我们将从数字电路中最基础的组件之一——半加器开始。2.1 新建Quartus工程启动Quartus II后按照以下步骤创建新工程点击File→New Project Wizard设置工程目录和名称如half_adder选择目标设备EP4CE115F29C7DE2-115开发板上的FPGA型号完成工程创建2.2 原理图设计入门Quartus提供了图形化的原理图设计方式非常适合初学者理解数字电路的组成新建Block Diagram/Schematic File使用元件库添加以下组件1个AND2两输入与门1个XOR异或门2个input引脚命名为a和b2个output引脚命名为s和co连接各组件形成完整的半加器电路// 半加器的逻辑表达式 s a ^ b; // 和输出 co a b; // 进位输出2.3 编译与功能验证完成原理图设计后点击Processing→Start Compilation进行编译。编译成功后我们可以通过仿真验证设计是否正确新建University Program VWF文件添加所有输入输出信号设置输入信号的各种组合00,01,10,11运行仿真检查输出是否符合半加器真值表半加器真值表absco00000110101011013. 从半加器到全加器理解了半加器的工作原理后我们可以利用它构建更复杂的全加器。全加器考虑了来自低位的进位输入是构建多位加法器的基本单元。3.1 封装半加器为可重用元件在继续之前我们需要将设计好的半加器封装成一个可重用的元件在打开半加器原理图的情况下选择File→Create/Update→Create Symbol Files for Current File这将生成一个.hsb符号文件可以在其他原理图中调用3.2 构建全加器顶层设计全加器可以通过两个半加器和一个或门实现新建一个原理图文件添加以下组件2个半加器刚才封装的元件1个OR2两输入或门3个input引脚a, b, cin2个output引脚s, cout按照全加器逻辑连接各组件第一个半加器处理a和b第二个半加器处理第一个半加器的和输出与cin或门处理两个半加器的进位输出// 全加器的逻辑表达式 s a ^ b ^ cin; // 和输出 cout (a b) | ((a ^ b) cin); // 进位输出3.3 设置顶层实体与编译完成全加器设计后右键点击full_adder.bdf选择Set as Top-Level Entity重新编译整个项目创建新的仿真文件验证全加器功能全加器真值表abcinscout00000001100101001101100101010111001111114. 硬件实现与验证设计验证通过后下一步就是将我们的设计烧录到FPGA开发板上进行实际硬件验证。4.1 引脚分配与约束DE2-115开发板上的资源需要正确映射到我们的设计信号打开Pin Planner工具根据开发板原理图为输入输出分配具体引脚a → SW0 (PIN_AB28)b → SW1 (PIN_AC28)cin → SW2 (PIN_AC27)s → LEDR0 (PIN_G19)cout → LEDR1 (PIN_F19)保存引脚分配并重新编译注意不同版本的DE2-115开发板引脚可能略有不同务必参考随板提供的原理图。4.2 编程文件生成与下载完成引脚分配后就可以生成编程文件并下载到开发板了确保开发板已正确连接并通电打开Programmer工具添加生成的.sof文件选择USB-Blaster作为硬件接口点击Start开始编程# 如果遇到硬件识别问题可以尝试以下步骤 # 1. 检查USB线连接 # 2. 重新安装USB-Blaster驱动 # 3. 重启Quartus和电脑4.3 硬件功能验证编程完成后就可以在开发板上测试我们的全加器了使用SW0-SW2作为输入a, b, cin观察LEDR0和LEDR1的输出s, cout测试所有8种输入组合验证是否与仿真结果一致5. Verilog实现对比虽然原理图设计直观易懂但在实际工程中硬件描述语言(HDL)如Verilog更为常用。让我们看看如何用Verilog实现同样的全加器功能。5.1 Verilog模块设计新建Verilog文件输入以下代码module full_adder( input a, b, cin, output sum, cout ); // 连续赋值方式实现 assign sum a ^ b ^ cin; assign cout (a b) | ((a ^ b) cin); endmodule这种实现方式比原理图设计简洁得多而且更易于维护和扩展。5.2 Verilog设计流程使用Verilog的设计流程与原理图类似创建Verilog源文件设置为顶层实体编译并仿真引脚分配可以使用相同的约束生成编程文件并下载5.3 两种方法的比较特性原理图设计Verilog设计学习曲线较低直观较高需要学习语法设计效率简单电路快捷复杂电路繁琐任何复杂度都高效可维护性较差优秀可重用性一般优秀仿真调试可视化但不够灵活灵活强大在实际项目中通常会根据具体情况选择合适的设计方法或者两者结合使用。对于初学者来说从原理图入手有助于理解数字电路的基本原理而Verilog则是必须掌握的职业技能。