求Verilog语言编写的循环彩灯控制器
语言:VerilogHDL开发软件:Max+PlusII具体要求:输入key(取1或0)控制开始与暂停输入端style(取1或0)控制循环方案(共两种,见下)输出端为3盏...
语言:Verilog HDL
开发软件:Max+PlusII
具体要求:
输入key(取1或0)控制开始与暂停
输入端style(取1或0)控制循环方案(共两种,见下)
输出端为3盏彩灯(可用Light表示).
循环方案一:3盏灯从左到右依次亮起
循环方案二:3盏灯从右到左依次亮起 展开
开发软件:Max+PlusII
具体要求:
输入key(取1或0)控制开始与暂停
输入端style(取1或0)控制循环方案(共两种,见下)
输出端为3盏彩灯(可用Light表示).
循环方案一:3盏灯从左到右依次亮起
循环方案二:3盏灯从右到左依次亮起 展开
2个回答
展开全部
// test10.v
module light1(clock,key,style,light);
input clock,key,style ; //端口定义
output [2:0]light;
reg [2:0] light =3'b111 ;
reg clk = 1;
parameter cnt = 24000000;
reg [24:0]count;
always @ (posedge clock) //分频计数
begin
if (count < cnt)
count = count + 25'b1;
else
begin
count = 0;
clk = ~ clk;
end
end
always @ (posedge clk) //LED灯输出
begin
if (!key) //key键被按下
light = light; //暂停
else
begin
if (!style) //style被按下
begin
if (light==0)
light=3'b111; //LED灯全部点亮时,重新熄灭再准备下次循环
else
light =light>>1; //LED灯右移
end
else
begin
if (light ==3'b000) //LED灯全部点亮时,重新熄灭再准备下次循环
light =3'b111;
else
light = light<<1; //LED灯左移
end
end
end
endmodule
这个程序我已经在Actel板上烧过了,没问题。如果还有什么问题应该是你的板不同或者工具不同,我是在libero_8.5上做的
module light1(clock,key,style,light);
input clock,key,style ; //端口定义
output [2:0]light;
reg [2:0] light =3'b111 ;
reg clk = 1;
parameter cnt = 24000000;
reg [24:0]count;
always @ (posedge clock) //分频计数
begin
if (count < cnt)
count = count + 25'b1;
else
begin
count = 0;
clk = ~ clk;
end
end
always @ (posedge clk) //LED灯输出
begin
if (!key) //key键被按下
light = light; //暂停
else
begin
if (!style) //style被按下
begin
if (light==0)
light=3'b111; //LED灯全部点亮时,重新熄灭再准备下次循环
else
light =light>>1; //LED灯右移
end
else
begin
if (light ==3'b000) //LED灯全部点亮时,重新熄灭再准备下次循环
light =3'b111;
else
light = light<<1; //LED灯左移
end
end
end
endmodule
这个程序我已经在Actel板上烧过了,没问题。如果还有什么问题应该是你的板不同或者工具不同,我是在libero_8.5上做的
展开全部
//
test10.v
module
light1(clock,key,style,light);
input
clock,key,style
;
//端口定义
output
[2:0]light;
reg
[2:0]
light
=3'b111
;
reg
clk
=
1;
parameter
cnt
=
24000000;
reg
[24:0]count;
always
@
(posedge
clock)
//分频计数
begin
if
(count
<
cnt)
count
=
count
+
25'b1;
else
begin
count
=
0;
clk
=
~
clk;
end
end
always
@
(posedge
clk)
//LED灯输出
begin
if
(!key)
//key键被按下
light
=
light;
//暂停
else
begin
if
(!style)
//style被按下
begin
if
(light==0)
light=3'b111;
//LED灯全部点亮时,重新熄灭再准备下次循环
else
light
=light>>1;
//LED灯右移
end
else
begin
if
(light
==3'b000)
//LED灯全部点亮时,重新熄灭再准备下次循环
light
=3'b111;
else
light
=
light<<1;
//LED灯左移
end
end
end
endmodule
这个程序我已经在Actel板上烧过了,没问题。如果还有什么问题应该是你的板不同或者工具不同,我是在libero_8.5上做的
test10.v
module
light1(clock,key,style,light);
input
clock,key,style
;
//端口定义
output
[2:0]light;
reg
[2:0]
light
=3'b111
;
reg
clk
=
1;
parameter
cnt
=
24000000;
reg
[24:0]count;
always
@
(posedge
clock)
//分频计数
begin
if
(count
<
cnt)
count
=
count
+
25'b1;
else
begin
count
=
0;
clk
=
~
clk;
end
end
always
@
(posedge
clk)
//LED灯输出
begin
if
(!key)
//key键被按下
light
=
light;
//暂停
else
begin
if
(!style)
//style被按下
begin
if
(light==0)
light=3'b111;
//LED灯全部点亮时,重新熄灭再准备下次循环
else
light
=light>>1;
//LED灯右移
end
else
begin
if
(light
==3'b000)
//LED灯全部点亮时,重新熄灭再准备下次循环
light
=3'b111;
else
light
=
light<<1;
//LED灯左移
end
end
end
endmodule
这个程序我已经在Actel板上烧过了,没问题。如果还有什么问题应该是你的板不同或者工具不同,我是在libero_8.5上做的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询