彩灯控制器设计。
一设计任务
设计一种彩灯控制器控制8盏灯。该彩灯控制器有6种自动切换的花样。
1. 第一种花样为彩灯从右到左,然后从左到右逐次灭,全灭全亮;
2. 第二种花样为彩灯两边同时亮一个逐次向中间移动再散开;
3. 第三种花样为彩灯两边同时亮两个逐次向中间移动再散开;
4. 第四种花样为彩灯两边同时亮三个,然后四亮四灭,四灭四亮,最后一灭一亮;
5. 彩灯右起第一第二第五第六盏灯亮,其他灯灭,然后第三第四第七第八盏灯亮,同时其他灯灭;
6. 第六种花样,彩灯先右七个亮,然后再左七个亮,最后全灭。
二程序模块分析。
1. 第一种花样为彩灯从右到左,然后从左到右逐次灭,全灭全亮;
case(flags)
0:begin //第一种花样。
case(i)
0:begin
f=8'b00000001;
i=1;end
1:begin
f =f<<1;//左移。
if (f==8'b10000000)
i=2;end
2:begin
f=f>>1;//右移。
if (f==8'b00000001)
i=3;end
3:begin
f =8'b00000000;
i=4;end
4:begin
f =8'b11111111;
i=0;flags=1;
endendcase
end2. 第二种花样为彩灯两边同时亮一个逐次向中间移动再散开;
1:begin //第二种花样。
case(i)
0:begin
f=8'b01111110;
i=1;end
1:begin
f=8'b10111101;
i=2;end
2:begin
f=8'b11011011;
i=3;end
3:begin
f=8'b11100111;
i=4;end
4:begin
f=8'b11011011;
i=5;end
5:begin
f=8'b10111101;
i=6;end
6:begin
f=8'b01111110;
i=0;flags=2;
endendcase
end3. 第三种花样为彩灯两边同时亮两个逐次向中间移动再散开;
2:begin //第三种花样。
case(i)
0:begin
f=8'b00111100;
i=1;end
1:begin
f=8'b10011001;
i=2;end
2:begin
f=8'b11000011;
i=3;end
3:begin
f=8'b10011001;
i=4;end
4:begin
f=8'b00111100;
i=0;flags=3;
endendcase
end4. 第四种花样为彩灯两边同时亮三个,然后四亮四灭,四灭四亮,最后一灭一亮;
3: begin //第四种花样。
case(i)
0:begin
f=8'b00011000;
i=1;end
1:begin
f=8'b00001111;
i=2;end
2:begin
f=8'b11110000;
i=3;end
3:begin
f=8'b10101010;
i=0;flags=4;
endendcase
end5. 彩灯右起第一第二第五第六盏灯亮,其他灯灭,然后第三第四第七第八盏灯亮,同时其他灯灭;
4:begin //第五种花样。
case(i)
0:begin
f=8'b11001100;
i=1;end
1:begin
f=8'b00110011;
i=0;flags=5;
endendcase
end6. 第六种花样,彩灯先右七个亮,然后再左七个亮,最后全灭。
5:begin //第六种花样
case(i)
0:begin
f=8'b10000000;
i=1;end
1:begin
f=8'b00000001;
i=2;end
2:begin
f=8'b11111111;
i=0;flags=0;
endendcase
end三。引脚分配。
四。系统程序。
module light ( clr,clk,f );
input clk,clr;
output [7:0] f;
reg [7:0] f;
reg[23:0]count;
reg clk1;
integer flags=0;
integer i=0;
always@(posedge clk) /分频。
beginif(!clr)
beginclk1<=0;
count<=1;
endelse
if(count==6000000)
beginclk1<=~clk1;
count=1;
endelse
count<=count+1;
endalways @(posedge clk1 ) 上升沿触发。
if(!clr)
beginf=8'b11111111; /当第一个时钟脉冲上升沿到来时,清零。
endelse
case(flags)
0:begin //第一种花样。
case(i)
0:begin
f=8'b00000001;
i=1;end
1:begin
f =f<<1;//左移。
if (f==8'b10000000)
i=2;end
2:begin
f=f>>1;//右移。
if (f==8'b00000001)
i=3;end
3:begin
f =8'b00000000;
i=4;end
4:begin
f =8'b11111111;
i=0;flags=1;
endendcase
end1:begin //第二种花样。
case(i)
0:begin
f=8'b01111110;
i=1;end
1:begin
f=8'b10111101;
i=2;end
2:begin
f=8'b11011011;
i=3;end
3:begin
f=8'b11100111;
i=4;end
4:begin
f=8'b11011011;
i=5;end
5:begin
f=8'b10111101;
i=6;end
6:begin
f=8'b01111110;
i=0;flags=2;
endendcase
end2:begin //第三种花样。
case(i)
0:begin
f=8'b00111100;
i=1;end
1:begin
f=8'b10011001;
i=2;end
2:begin
f=8'b11000011;
i=3;end
3:begin
f=8'b10011001;
i=4;end
4:begin
f=8'b00111100;
i=0;flags=3;
endendcase
end3: begin //第四种花样。
case(i)
0:begin
f=8'b00011000;
i=1;end
1:begin
f=8'b00001111;
i=2;end
2:begin
f=8'b11110000;
i=3;end
3:begin
f=8'b10101010;
i=0;flags=4;
endendcase
end4:begin //第五种花样。
case(i)
0:begin
f=8'b11001100;
i=1;end
1:begin
f=8'b00110011;
i=0;flags=5;
endendcase
end5:begin //第六种花样
case(i)
0:begin
f=8'b10000000;
i=1;end
1:begin
f=8'b00000001;
i=2;end
2:begin
f=8'b11111111;
Verilog中期作业
verilog中期作业 计数器报告。姓名 刘恒学号 2012160240 班级 微电2班。本次作业中,要实现以1hz脉冲为时钟信号的从00计数至59的计数器功能,我设计了一个由五个模块组成的工程,通过编写 写出具体功能,用顶层模块调用其余4个模块,实现在1hz从00至59的计数,复位功能。如下显示具...
verilog作业题
1 以结构描述方式实现下列逻辑 f ab acd cd的非 2 以连续赋值语句设计8位总线驱动器。3 以always语句设计8位总线驱动器。4 以always语句设计8位双向总线驱动器。1 设计一个具有低电平使能端和高电平使能端的2 4译码器。2 设计一个jk触发器。3 设计一个24分频期,要求输出...
verilog语法
第三章 verilog hdl的基本语法。前言。verilog hdl是一种用于数字逻辑电路设计的语言。用verilog hdl描述的电路设计就是该电路的verilog hdl模型。verilog hdl既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和...