【Sipeed Tang Primer 25K】评测:3、来个蠕虫灯,何如?
[复制链接]
本帖最后由 xiyou2020eeeee 于 2024-1-15 20:53 编辑
- 简要介绍
Tang Primer 25K有丰富的接口,核心板引出了76个GPIO、1路硬核4lane MIPI线路和3路电源输出给用户使用。用户只需给核心板提供一路5V供电和正确设置配置引脚,即可轻松使用Tang Primer 25K核心板。
其次,开发板配套了很多PMOD,尤其以LED*2最为养眼。
链接板子
- 例程运行
首先,可以下载很多示例。
Github链接:
其次,下载之后打开。
再次,打开例程
最后,经过整合、约束、规划。
最后,下载
USB端口检查
下载完成
- 设计一个蠕虫灯
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
然后,布局FloorPlanner
然后,I/O设置
最后保存设置
然后布线
最后下载程序
效果
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
|