517|1

35

帖子

0

TA的资源

一粒金砂(中级)

【Sipeed Tang Primer 25K】评测:3、来个蠕虫灯,何如? [复制链接]

本帖最后由 xiyou2020eeeee 于 2024-1-15 20:53 编辑
  1. 简要介绍
    Tang Primer 25K有丰富的接口,核心板引出了76个GPIO、1路硬核4lane MIPI线路和3路电源输出给用户使用。用户只需给核心板提供一路5V供电和正确设置配置引脚,即可轻松使用Tang Primer 25K核心板。
    204100iyeky08w99brqweu.png
    其次,开发板配套了很多PMOD,尤其以LED*2最为养眼。
    204100bf3d35cc3df5dl9z.png
    链接板子
    204100e17dta0m3omrmn30.jpg
  2. 例程运行
    首先,可以下载很多示例。
    Github链接:
    链接已隐藏,如需查看请登录或者注册

    204100wvmxlshnaacf3xmh.png
    其次,下载之后打开。
    204100jk80pp0kweteotkl.png
    再次,打开例程
    204100qabooc24l5uu26ru.png
    最后,经过整合、约束、规划。
    204100z7df8ra7q77d2dyu.png
    最后,下载
    204100yvppqpo4rsvo8rp6.png
    USB端口检查
    204100j6ouhfuou5o6fz9s.png
    下载完成
    204100jyio5i8g8iuk45id.png
  3. 设计一个蠕虫灯
3.1 程序
这个程序主要用于生成一个“蠕虫”效果,通过循环移位LED灯来实现。计数器用于控制移位的时机。当复位信号激活时,LED灯会被重置到初始状态。
// 定义一个名为Worms_led的模块,有时钟输入、复位输入和16位LED输出
module Worms_led
(
input clk, // 输入信号:时钟
input rst, // 输入信号:复位
output reg [15:0]led // 输出信号:16位LED控制
);
// 定义一个28位的寄存器cnt,用于计数
reg [27:0] cnt;
// 当时钟上升沿到来或复位信号下降沿到来时执行
always @(posedge clk or negedge rst)
begin
if(!rst) // 如果复位信号为低电平
cnt <= 28'd0; // 将计数器清零
else if (cnt < 28'd25_000_000) // 如果计数器小于25,000,000
cnt <= cnt + 1'd1; // 计数器加1
else // 否则
cnt <= 28'd0; // 计数器清零
end
// 当时钟上升沿到来或复位信号下降沿到来时执行
always @(posedge clk or negedge rst)
begin
if(!rst) // 如果复位信号为低电平
led <= 8'b1111_1110; // LED高位为灭,低位为亮,因此16个LED中有7个灭、9个亮
else if (cnt == 28'd25_000_000) // 如果计数器达到25,000,000
led[15:0] <= {led[14:0],led[15]}; // 循环移位LED灯(产生“蠕虫”效果)
else // 否则
led <= led; // 保持LED状态不变
end
endmodule // 模块结束
3.2 下载步骤
首先,整合Synthesize
204100unz821avme1elb2p.png
然后,布局FloorPlanner
204100dgv1ttvpnfjelxm7.png
然后,I/O设置
204100c6s31sw3sxuq7176.png
最后保存设置
204100bvdaamhtamlsxwtd.png
然后布线
204100zyrp4v94h1h36oiy.png
最后下载程序
204100vrolwzqi2vprxagl.png
效果
FPGA
4、修改程序,实现贪吃蛇效果

module Worms_led (
    input clk,
    input rst,
    output reg [15:0] led
);

reg [24:0] cnt; // 优化:减少计数器位数,只需足够的计数范围

// 时钟和复位信号触发的逻辑
always @(posedge clk or negedge rst) begin
    if (!rst) begin
        cnt <= 0; // 同步复位计数器
        led <= 16'b1111_1111_1111_1110; // 初始化LED状态
    end else begin
        if (cnt < 25_000_000) cnt <= cnt + 1; // 计数直到特定值
        else begin
            cnt <= 0; // 重置计数器
            led <= {led[14:0], led[15]}; // 循环移位LED
        end
    end
end

endmodule
效果

FPGA2

 

最新回复

谢谢分享,期待后续!   详情 回复 发表于 2024-1-17 19:56

回复
举报

7254

帖子

18

TA的资源

五彩晶圆(中级)

谢谢分享,期待后续!

个人签名

默认摸鱼,再摸鱼。2022、9、28


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表