module binary_led( input clk, input reset_n, output reg [3:0]led ); parameter MAX_COUNT_S = 'd49_999_999;//一秒 reg [25:0]counter_delay_s; reg [3:0]count3_0; //HS秒 always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行 if(!reset_n) counter_delay_s <= 'd0; else if(counter_delay_s == MAX_COUNT_S) counter_delay_s <= 0; else counter_delay_s <= counter_delay_s + 1'b1; //HS到第4位就回去 always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行 if(!reset_n) count3_0 <= 'd0; else if(count3_0 == 'd4) count3_0 <= 0; else if(counter_delay_s == MAX_COUNT_S) count3_0 <= count3_0 + 1'd1; //HS呼吸灯 always @(posedge clk or negedge reset_n) if(!reset_n) led <= 0; else case (count3_0) 0 : led <= 4'b0001; 1 : led <= 4'b0010; 2 : led <= 4'b0100; 3 : led <= 4'b1000; default: led <= led; endcase endmodule下来是仿真 复制module binary_led_tb; reg clk = 0 ; reg reset_n = 0 ; // led Outputs wire [3:0]led ; parameter MAX_COUNT_S = 'd49_999_999; initial clk = 1; always #10 clk = ~clk; binary_led #( .MAX_COUNT_S ( 49_99 )) u_led ( .clk ( clk ), .reset_n ( reset_n ), .led ( led ) ); initial begin reset_n = 0; #201; reset_n = 1; #40000000; $stop; $finish; end endmodule时序图 以下为二进制流水灯 复制module binary_led( input clk, input reset_n, output reg [3:0]led ); parameter MAX_COUNT_S = 'd49_999_999;//一秒 reg [25:0]counter_delay_s; reg [14:0]count3_0; //HS秒 always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行 if(!reset_n) counter_delay_s <= 'd0; else if(counter_delay_s == MAX_COUNT_S) counter_delay_s <= 0; else counter_delay_s <= counter_delay_s + 1'b1; //HS到第4位就回去 always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行 if(!reset_n) count3_0 <= 'd0; else if(count3_0 == 'd15) count3_0 <= 0; else if(counter_delay_s == MAX_COUNT_S) count3_0 <= count3_0 + 1'd1; //HS呼吸灯 // always @(posedge clk or negedge reset_n) // if(!reset_n) // led <= 0; // else case (count3_0) // 0 : led <= 4'b0001; // 1 : led <= 4'b0010; // 2 : led <= 4'b0100; // 3 : led <= 4'b1000; // default: led <= led; // endcase // HS二进制灯 always @(posedge clk or negedge reset_n) if(!reset_n) led <= 0; else case (count3_0) 0 : led <= 4'b0001; 1 : led <= 4'b0010; 2 : led <= 4'b0011; 3 : led <= 4'b0100; 4 : led <= 4'b0101; 5 : led <= 4'b0110; 6 : led <= 4'b0111; 7 : led <= 4'b1000; 8 : led <= 4'b1001; 9 : led <= 4'b1010; 10 : led <= 4'b1011; 11 : led <= 4'b1100; 12 : led <= 4'b1101; 13 : led <= 4'b1110; 14 : led <= 4'b1111; default: led <= led; endcase endmodule结果 可以不使用仿真直接烧录,xdc匹配到对应的管脚即可
module binary_led_tb; reg clk = 0 ; reg reset_n = 0 ; // led Outputs wire [3:0]led ; parameter MAX_COUNT_S = 'd49_999_999; initial clk = 1; always #10 clk = ~clk; binary_led #( .MAX_COUNT_S ( 49_99 )) u_led ( .clk ( clk ), .reset_n ( reset_n ), .led ( led ) ); initial begin reset_n = 0; #201; reset_n = 1; #40000000; $stop; $finish; end endmodule时序图 以下为二进制流水灯 复制module binary_led( input clk, input reset_n, output reg [3:0]led ); parameter MAX_COUNT_S = 'd49_999_999;//一秒 reg [25:0]counter_delay_s; reg [14:0]count3_0; //HS秒 always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行 if(!reset_n) counter_delay_s <= 'd0; else if(counter_delay_s == MAX_COUNT_S) counter_delay_s <= 0; else counter_delay_s <= counter_delay_s + 1'b1; //HS到第4位就回去 always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行 if(!reset_n) count3_0 <= 'd0; else if(count3_0 == 'd15) count3_0 <= 0; else if(counter_delay_s == MAX_COUNT_S) count3_0 <= count3_0 + 1'd1; //HS呼吸灯 // always @(posedge clk or negedge reset_n) // if(!reset_n) // led <= 0; // else case (count3_0) // 0 : led <= 4'b0001; // 1 : led <= 4'b0010; // 2 : led <= 4'b0100; // 3 : led <= 4'b1000; // default: led <= led; // endcase // HS二进制灯 always @(posedge clk or negedge reset_n) if(!reset_n) led <= 0; else case (count3_0) 0 : led <= 4'b0001; 1 : led <= 4'b0010; 2 : led <= 4'b0011; 3 : led <= 4'b0100; 4 : led <= 4'b0101; 5 : led <= 4'b0110; 6 : led <= 4'b0111; 7 : led <= 4'b1000; 8 : led <= 4'b1001; 9 : led <= 4'b1010; 10 : led <= 4'b1011; 11 : led <= 4'b1100; 12 : led <= 4'b1101; 13 : led <= 4'b1110; 14 : led <= 4'b1111; default: led <= led; endcase endmodule结果 可以不使用仿真直接烧录,xdc匹配到对应的管脚即可
module binary_led( input clk, input reset_n, output reg [3:0]led ); parameter MAX_COUNT_S = 'd49_999_999;//一秒 reg [25:0]counter_delay_s; reg [14:0]count3_0; //HS秒 always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行 if(!reset_n) counter_delay_s <= 'd0; else if(counter_delay_s == MAX_COUNT_S) counter_delay_s <= 0; else counter_delay_s <= counter_delay_s + 1'b1; //HS到第4位就回去 always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行 if(!reset_n) count3_0 <= 'd0; else if(count3_0 == 'd15) count3_0 <= 0; else if(counter_delay_s == MAX_COUNT_S) count3_0 <= count3_0 + 1'd1; //HS呼吸灯 // always @(posedge clk or negedge reset_n) // if(!reset_n) // led <= 0; // else case (count3_0) // 0 : led <= 4'b0001; // 1 : led <= 4'b0010; // 2 : led <= 4'b0100; // 3 : led <= 4'b1000; // default: led <= led; // endcase // HS二进制灯 always @(posedge clk or negedge reset_n) if(!reset_n) led <= 0; else case (count3_0) 0 : led <= 4'b0001; 1 : led <= 4'b0010; 2 : led <= 4'b0011; 3 : led <= 4'b0100; 4 : led <= 4'b0101; 5 : led <= 4'b0110; 6 : led <= 4'b0111; 7 : led <= 4'b1000; 8 : led <= 4'b1001; 9 : led <= 4'b1010; 10 : led <= 4'b1011; 11 : led <= 4'b1100; 12 : led <= 4'b1101; 13 : led <= 4'b1110; 14 : led <= 4'b1111; default: led <= led; endcase endmodule结果 可以不使用仿真直接烧录,xdc匹配到对应的管脚即可
您需要 登录 才可以下载或查看,没有账号?注册
举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
3
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号