基本要求:以十赫兹的频率,点亮实验开发板上的发光二极管,显示过程中各个点亮的发光二极管的亮度呈现出明暗变化,形似呼吸。开关0 向下系统复位,灯全灭。开关0向上,LED呈现呼吸状显示。(利用pwm)
扩展部分:
分组显示两组不同渐变周期的呼吸灯,Key0控制LED4~LED0显示, KEY1 控制LED9~LED5显示,渐变周期由开关1~开关9输入,同时数码管分别显示2组呼吸灯对应周期数。
module led
(
//数据的输入
input wire sys_clk ,
input wire sys_rst_n ,
input wire [9:0] sw_in ,
input wire key_in1 ,
input wire key_in2 ,
//led的输出
output wire [9:0] led_out ,
//前三个数码管显示频率
output wire [6:0] ge1 ,
output wire [6:0] shi1 ,
output wire [6:0] bai1 ,
//后三个数码管显示频率
output wire [6:0] ge2 ,
output wire [6:0] shi2 ,
output wire [6:0] bai2
);
wire [8:0] data_in1 ;
wire [8:0] data_in2 ;
wire [10: 0] bcd1 ;
wire [10: 0] bcd2 ;
//key1和key2 控制输入的频率
ctrl ctrl_inst
(
.sys_clk (sys_clk) ,
.sys_rst_n (sys_rst_n) ,
.sw_in (sw_in) ,
.key_in1 (key_in1) ,
.key_in2 (key_in2) ,
.data_in1 (data_in1) ,
.data_in2 (data_in2)
);
//开关输入的二进制数,转换为BCD码用于数码管显示
binTobcd binTobcd_inst1
(
.bin (data_in1), // binary
.bcd (bcd1)
);
binTobcd binTobcd_inst2
(
.bin (data_in2), // binary
.bcd (bcd2)
);
//led的输出
breath_led breath_led_inst1
(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n),
.data (data_in1),
.led_out (led_out[4:0] )
);
breath_led breath_led_inst2
(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n),
.data (data_in2),
.led_out (led_out[9:5] )
);
//数码管显示
seg seg_int1
(
.sys_clk (sys_clk) ,
.sys_rst_n (sys_rst_n) ,
.sw0 (sw_in[0]) ,
.bcd (bcd1) ,
.ge (ge1) ,
.shi (shi1) ,
.bai (bai1)
);
seg seg_int2
(
.sys_clk (sys_clk) ,
.sys_rst_n (sys_rst_n) ,
.sw0 (sw_in[0]) ,
.bcd (bcd2) ,
.ge (ge2) ,
.shi (shi2) ,
.bai (bai2)
);
module breath_led
(
input wire sys_clk , //系统时钟50Mhz
input wire sys_rst_n , //key3全局复位
input wire [8:0] data ,//获得控制权寄存的数据
output reg [4:0] led_out //led的输出
);
reg [9:0] cnt_1s ;