top down 的写法之流水呼吸灯综合

这里写图片描述

流水灯的编写:
module liushui1(
input wire clk ,
input wire rst_n ,
output reg[3:0] led

);
reg[26:0] cnt_s;
reg flag ;
parameter CNT_MAX=100000000-1;

//cnt_s
always@(posedge clk or negedge rst_n)
if(rst_n==0)
cnt_s <= 0;
else if(cnt_s==CNT_MAX)
cnt_s <= 0;
else
cnt_s <= cnt_s +1;

//flag
always@(posedge clk or negedge rst_n)
if(rst_n==0)
flag <= 0;
else if(led==4’b1000)
flag <= 1;
else if(led==4’b0001)
flag <= 0;

//led
always@(posedge clk or negedge rst_n)
if(rst_n==0)
led <= 4’b0001;
else if(flag==0&&cnt_s==CNT_MAX)
led <= {led[2:0],led[3]};
else if(flag==1&&cnt_s==CNT_MAX)
led <= {led[0],led[3:1]};

endmodule

呼吸灯:
module huxi1(
input wire clk ,
input wire rst_n,
input wire[3:0] led_o,
output reg[3:0] led

);
reg[5:0] cnt_us;
reg[9:0] cnt_ms;
reg[9:0] cnt_s ;
reg flag ;
reg flag_cnt_us;
reg flag_cnt_ms;
reg flag_cnt_s ;
parameter CNT_US_MAX = 49;
parameter CNT_MS_MAX = 999;
parameter CNT_S_MAX = 999;
//cnt_us
always@(posedge clk or negedge rst_n)
if(rst_n==0)
cnt_us <= 0;
else if(cnt_us==CNT_US_MAX )
cnt_us <= 0;
else
cnt_us <= cnt_us + 1;

//flag_cnt_us
always@(posedge clk or negedge rst_n)
if(rst_n==0)
flag_cnt_us <= 0;
else if(cnt_us==CNT_US_MAX )
flag_cnt_us <= 1;
else
flag_cnt_us <= 0;

//cnt_ms
always@(posedge clk or negedge rst_n)
if(rst_n==0)
cnt_ms <= 0;
else if(cnt_ms==CNT_MS_MAX &&flag_cnt_us==1)
cnt_ms <= 0;
else if(flag_cnt_us==1)
cnt_ms <= cnt_ms + 1;

//flag_cnt_ms
always@(posedge clk or negedge rst_n)
if(rst_n==0)
flag_cnt_ms <= 0;
else if(cnt_ms==CNT_MS_MAX&&flag_cnt_us==1 )
flag_cnt_ms <= 1;
else
flag_cnt_ms <= 0;

//cnt_s
always@(posedge clk or negedge rst_n)
if(rst_n==0)
cnt_s <= 0;
else if(cnt_s==CNT_S_MAX &&flag_cnt_ms==1)
cnt_s <= 0;
else if(flag_cnt_ms==1)
cnt_s <= cnt_s + 1;

//flag_cnt_s
always@(posedge clk or negedge rst_n)
if(rst_n==0)
flag_cnt_s <= 0;
else if(cnt_s==CNT_S_MAX&&flag_cnt_ms==1 )
flag_cnt_s <= 1;
else
flag_cnt_s <= 0;

//flag
always@(posedge clk or negedge rst_n)
if(rst_n==0)
flag <= 0;
else if(flag_cnt_s==1 )
flag <= ~flag;

always@(posedge clk or negedge rst_n)
if(rst_n==0)
led <= 0;
else if(cnt_ms<=cnt_s&&flag==0)
led <= led_o;
else if(cnt_ms>cnt_s&&flag==0)
led <= 0;
else if(cnt_ms>=cnt_s&&flag==1)
led <= led_o;
else if(cnt_ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值