跑马灯verilog设计代码

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

module paomadeng(rst,clk,sel,led); //端口定义,参数列表
input rst,clk; //rst复位,clk为4Hz的时钟信号
input[1:0] sel; //sel 状态选择端口
output[15:0] led; //led 跑马灯显示

reg[15:0] led;
reg[15:0] led_r,led_r1;
reg cnt1,dir; //cnt1控制状态2 led灯的亮次数
reg[3:0] cnt2; //cnt2控制状态2 led灯的亮次数
reg[2:0] cnt3; //cnt3控制状态2 led灯的亮次数

always@(posedge clk)
begin
if(rst) begin cnt1<=0;cnt2<=0;cnt3<=0;dir<=0;end
else
case(sel)
// LED按奇数,偶数依次显示
2'b00:
begin
led_r=16'b0101010101010101;
if(cnt1==0)led<=led_r;
else led<=led_r<<1;
cnt1<=cnt1+1;
end
// LED顺序依次显示,顺序依次熄灭
2'b01:
begin
if(!dir)
begin
if(cnt2==0) begin led_r=16'b0000000000000001;led<=led_r;end
else begin led<=(led<<1)+led_r;end
if(cnt2==15) begin dir<=~dir;end
cnt2<=cnt2+1;
end
else
begin
if(cnt2==0) begin led_r=16'b1111111111111110;led<=led_r;end
else begin led<=led<<1; end
if(cnt2==15) begin dir<=~dir;end
cnt2<=cnt2+1;
end
end
// LED由两侧向中间依次显示,由中间向两侧依次熄灭
2'b11:
begin
if(!dir)
begin
if(cnt3==0) begin
led_r=16'b0000000000000001;
led_r1=16'b1000000000000000;end
else
begin led_r=(led_r<<1)|led_r;
led_r1=(led_r1>>1)|led_r1;end
led<=led_r|led_r1;
if(cnt3==7)begin dir<=~dir;end
cnt3<=cnt3+1;
end
else
begin
if(cnt3==0) begin led_r=16'b1111111111111110;
led_r1=16'b0111111111111111;end
else
begin led_r=led_r<<1;led_r1=led_r1>>1;end
led<=led_r&led_r1;
if(cnt3==7)begin dir<=~dir;end
cnt3<=cnt3+1;
end
end
default: ;
endcase
end
endmodule

相关文档
最新文档