四种亮灯方式自由切换的跑马灯(用verilog hdl语言编写的跑马灯程序)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//产生四种亮灯方式的跑马灯

module zmk(mclk,reset,type,ledout);

input mclk,reset;

input[1:0] type;

output [5:0] ledout;

reg [5:0] ledout;

reg [24:0] count;

reg [4:0] state;

wire clk;

//分频器

always@(posedge mclk)

count=count+1;

assign clk=count[23];

//当type变化的时候对state进行清零

reg[1:0] type_delay;

wire type_change;

always @ (posedge clk)

type_delay <= type;

assign type_change=(type!=type_delay)?1:0;

always @ (posedge clk )

begin

if(reset==0) //初始化语句begin ledout=6'b000000;state<=0;end

else

if(type_change)//对state进行清零

state<=4'b1;

else

if(type==2'b00)

begin

case(state)

4'b0001:ledout=6'b011111;//第一个灯亮

4'b0010:ledout=6'b101111;//第二个灯亮

4'b0011:ledout=6'b110111;//第三个灯亮

4'b0100:ledout=6'b111011;//第四个灯亮

4'b0101:ledout=6'b111101;//第五个灯亮

4'b0110:ledout=6'b111110;//第六个灯亮

4'b0111:ledout=6'b111101;//第五个灯亮

4'b1000:ledout=6'b111011;//第四个灯亮

4'b1001:ledout=6'b110111;//第三个灯亮

4'b1010:ledout=6'b101111;//第二个灯亮

default :ledout=6'b000000;

endcase

state=state+1; //计数器产生state的各种状态if(state==4'b1011)state=5'b00001;

end

else

if(type==2'b01)

begin

case(state)

4'b0001:ledout=6'b101010;

4'b0010:ledout=6'b010101;

default :ledout=6'b000000;

endcase

state=state+1;

if(state==4'b0011)state=5'b00001;

end

else

if(type==2'b10)

begin

case(state)

4'b0001:ledout=6'b110011;

4'b0010:ledout=6'b101101;

4'b0011:ledout=6'b011110;

4'b0100:ledout=6'b101101;

default :ledout=6'b000000;

endcase

state=state+1;

if(state==4'b0101)state=5'b00001;

end

else

if(type==2'b11)

begin

case(state)

5'b00001:ledout=6'b111110;

5'b00010:ledout=6'b111101;

5'b00011:ledout=6'b111011;

5'b00100:ledout=6'b110111;

5'b00101:ledout=6'b101111;

5'b00110:ledout=6'b011111;

5'b00111:ledout=6'b001111;

5'b01000:ledout=6'b010111;

5'b01001:ledout=6'b011011;

5'b01010:ledout=6'b011101;

5'b01011:ledout=6'b011110;

5'b01100:ledout=6'b011100;

5'b01101:ledout=6'b011010;

5'b01110:ledout=6'b010110;

5'b01111:ledout=6'b001110;

5'b10000:ledout=6'b000110;

5'b10001:ledout=6'b001010;

5'b10010:ledout=6'b001100;

5'b10011:ledout=6'b001000;

5'b10100:ledout=6'b000100;

5'b10101:ledout=6'b001000;

5'b10110:ledout=6'b000000;

5'b10111:ledout=6'b111111;

5'b11000:ledout=6'b000000;

5'b11001:ledout=6'b111111;

5'b11010:ledout=6'b000000;

default :ledout=6'b000000;

endcase

state=state+1;

if(state==5'b11011)state=5'b00001; end

end

endmodule

相关文档
最新文档