
攻略
(资料图)
利用板载的LED灯进行流水灯的设计,让LED灯依次进行点亮,像流水一样,原理就是依次控制LED灯的IO口的高低电平的变化,让LED灯一次
module water_led#( parameter CNT_MAX = 24_999_999)( input wire sys_clk, input wire sys_rst_n, output reg [3:0] led_out); reg [24:0] cnt; reg cnt_flag; reg [3:0] led_out_reg;// cnt:计数500msalways @ (posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) cnt <= 25"d0; else if (cnt == CNT_MAX) cnt <= 25"d0; else cnt <= cnt + 1"b1; //cnt_flag:计数器计数满 500ms 标志信号always @ (posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) cnt_flag <= 1"b0; else if(cnt_flag == CNT_MAX-1) cnt_flag <= 1"b1; else cnt_flag <= 1"b0;// led_out_regalways @ (posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) led_out_reg <= 4"b0001; else if(led_out_reg == 4"b1000 && cnt_flag == 1"b1) // 如果不加这个条件,上板之后经过一级流水,灯全部熄灭 led_out_reg <= 4"b0001; else led_out_reg <= led_out_reg << 1; assign led_out = ~led_out_reg;endmodule
`timescale 1ns/1nsmodule tb_water_led(); reg sys_clk; reg sys_rst_n; wire [3:0] led_out; initial begin sys_clk = 1"b1; sys_rst_n <= 1"b0; #20; sys_rst_n <= 1"b1; end always #10 sys_clk = ~sys_clk; water_led ( .CNT_MAX (25"d24) ) water_led_inst ( .sys_clk (sys_clk) .sys_rst_n (sys_rst_n) .led_out (led_out) )endmodule
假设被操作数是a[7:0] 8bit数据
// 逻辑右移两位b = a >> 2"d2;b = {2"b00,a[7:2]} ; // 用拼接符也可以表示移位操作// 逻辑左移两位b = a << 2"d2;b = {a[5:0],2"b00};
关键词:
攻略
装备
商城