宠物智能投喂器 FPGA 设计 VHDL Quartus
名称宠物智能投喂器 FPGA 设计 VHDL Quartus软件Quartus语言VHDL开发板/平台DE2-115功能介绍本设计实现了一个基于 FPGA 的宠物智能投喂器控制系统使用 VHDL 编写并在 Quartus 环境下完成工程实现。系统通过 DE2-115 开发板上的拨码开关、按键、LED 和八位七段数码管完成投喂参数设置、倒计时显示、投喂状态指示和缺粮报警等功能。 用户可以通过拨码开关设置投喂次数和投喂重量档位其中投喂次数支持 1~4 次选择重量档位支持 20g、40g、60g、80g、100g 等显示配置。按键部分包含启动、时间增加、时间减少和手动应急投喂便于演示定时投喂和人工触发投喂两类场景。 显示部分使用 HEX0~HEX7 数码管显示重量、次数和时间信息LED0 用于缺粮报警LED1 用于喂食状态提示。整体功能贴近“定时、定量、缺粮提醒”的智能投喂器控制需求适合作为 FPGA 课程设计、VHDL 综合设计和 DE2-115 板级实验参考。运行环境开发语言VHDL 开发软件Quartus 目标开发板DE2-115 主要硬件资源50MHz 时钟、KEY 按键、SW 拨码开关、LED 指示灯、HEX 七段数码管 顶层模块pet_smart_feeder设计思路系统采用模块化 VHDL 设计把投喂控制、时间节拍、数码管显示和顶层板级连接分开实现。顶层 pet_smart_feeder 负责连接 DE2-115 的按键、拨码、LED 和 HEX 数码管资源并通过泛型参数设置 1 秒分频系数、默认倒计时时间和单次投喂持续时间便于在仿真和上板时分别调整时间尺度。 投喂逻辑以用户设置为核心SW1~SW0 用于选择投喂次数SW4~SW2 用于选择投喂重量档位KEY0 用于启动定时流程KEY1/KEY2 用于调整投喂间隔时间KEY3 用于手动应急投喂。系统根据倒计时状态控制投喂输出在投喂阶段点亮喂食指示 LED并将当前设置和时间信息送入显示模块。 剩余粮量检测通过 SW5 输入模拟高电平表示缺粮状态控制逻辑驱动 LED0 输出缺粮报警。这样的设计把实际传感器接口抽象为单路数字输入便于课程设计、实验演示和后续扩展到真实粮仓检测开关。模块结构工程主要模块包括 pet_smart_feeder顶层模块连接时钟、复位、按键、拨码、LED 和八位数码管并协调各功能模块。 tick_gen时间节拍产生模块根据系统时钟产生秒级节拍用于倒计时和定时控制。 feeder_control投喂控制核心模块处理启动、时间调整、手动投喂、缺粮检测、投喂次数和重量设置等逻辑。 display_driver显示驱动模块将时间、次数、重量等数据转换为七段数码管显示内容。 LED7S七段数码管译码模块用于数字到段码的转换。 tb_pet_smart_feeder测试平台用于对顶层控制流程进行仿真验证。开发板验证工程面向 DE2-115 开发板使用顶层端口已经按照板载资源进行管脚约束包含 50MHz 系统时钟、低有效复位拨码、KEY0~KEY3 按键、SW0~SW5 拨码输入、LED0/LED1 指示灯以及 HEX0~HEX7 八位七段数码管显示输出。约束文件可直接用于 Quartus 工程编译和下载验证适合在 DE2-115 上观察按键启动、手动投喂、缺粮报警、次数/重量设置和倒计时显示等功能。仿真图/仿真说明/设计文档图片工程包含 tb_pet_smart_feeder 测试平台可用于验证投喂器顶层逻辑的启动、参数设置、倒计时、投喂输出和缺粮报警流程。Quartus 工程中包含综合、布局布线、时序分析和下载文件生成结果可作为学习 VHDL 模块化设计与 FPGA 板级实现流程的参考。部分代码以下展示顶层模块pet_smart_feeder的部分代码完整代码可关注下方公众号卡片获取。entity pet_smart_feeder is generic( G_1S_DIV: integer : 50000000; G_COUNTDOWN_SECONDS: integer : 600; G_FEED_SECONDS: integer : 3 ); port( clk: in std_logic; -- 50MHz系统时钟 rst_n: in std_logic; -- 低电平复位SW17 start_key_n: in std_logic; -- 启动键低有效key0 sw_times: in std_logic_vector(1 downto 0); -- 次数拨码SW1~000→1次01→2次10→3次11→4次 sw_weight: in std_logic_vector(2 downto 0); -- 重量拨码SW4~2000→20/001→40/010→60/011→80/100→100g time_key_add_n: in std_logic; -- 时间加键低有效key1 time_key_sub_n: in std_logic; -- 时间减键低有效key2 feed_key_n: in std_logic; -- 手动应急喂键低有效key3 sw_check: in std_logic; -- 剩余粮量检测高电平缺粮 SW5 food_shortage_led: out std_logic; -- 缺粮报警LED输出 LED0 food_feed_led: out std_logic; -- 喂食LED输出 LED1 HEX0: out std_logic_vector(6 downto 0); -- 数码管HEX0段码重量个位 HEX1: out std_logic_vector(6 downto 0); -- 数码管HEX1段码重量十位 HEX2: out std_logic_vector(6 downto 0); -- 数码管HEX2段码重量百位 HEX3: out std_logic_vector(6 downto 0); -- 数码管HEX3段码次数N HEX4: out std_logic_vector(6 downto 0); -- 数码管HEX4段码分钟个位 HEX5: out std_logic_vector(6 downto 0); -- 数码管HEX5段码分钟十位 HEX6: out std_logic_vector(6 downto 0); -- 数码管HEX6段码小时个位 HEX7: out std_logic_vector(6 downto 0) -- 数码管HEX7段码小时十位 ); end pet_smart_feeder;代码获取点击下方公众号卡片