基于正点原子zynq的学习
源码如下加自己解析,整体挺简单,有一点注意就是看到原子代码时,觉得计数器的值有些不当,害,愣是让我觉得我语法学错了,有点疑惑,我基本不看视频的,然后看视频后发现时讲解人说1个clk 20ns可以忽略,所以写25000000,
但个人觉得该是多少,就为多少,防止以后写高精度的代码时记忆发生混乱。
//两种方法,实现是相同的。
module led_twinkle(
input sys_clk , //系统时钟
input sys_rst_n, //系统复位,低电平有效
output [1:0] led //LED 灯
);
//计数值定义
reg [25:0] cnt ;
//对计数器的值进行判断,以输出 LED 的状态 采用组合逻辑赋值
assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;
//建立一个1s的计数器
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt <= 26'd0;
else if(cnt < 26'd4999_9999)
cnt <= cnt + 1'b1;
else
cnt <= 26'd0;
end
endmodule
第二种如下
module led_twinkle(
input sys_clk , //系统时钟
input sys_rst_n, //系统复位,低电平有效
output [1:0] led //LED 灯
);
//计数值定义
reg [25:0] cnt ;
//建立一个1s的计数器以及采用时序逻辑赋值
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)begin
cnt <= 26'd0;
led <= 2'b01;
end
else if(cnt >= 26'd2499_9999)begin
cnt <= 26'd0;
led <= ~led;
end
else begin
cnt <= cnt + 26'd1;
end
end
endmodule