verilog实战01:万年流水灯

module flow_led(
    input               sys_clk  ,  //系统时钟
    input               sys_rst_n,  //系统复位,低电平有效
	 
    output  reg  [3:0]  led         //4个LED灯
    );

//reg define
reg [23:0] counter;

//*****************************************************
//**                    main code
//***************************************************** 
                                                                                                                                                                                                                         
//计数器对系统时钟计数,计时0.2秒
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 24'd0;
    else if (counter < 24'd1000_0000)
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end

//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 4'b0001;
    else if(counter == 24'd1000_0000) 
        led[3:0] <= {led[2:0],led[3]};
    else
        led <= led;
end

endmodule 

移位操作讲解
rst时对LED进行赋值 0001
然后将在counter == 24’d1000_0000时通过以下代码将高位移到末尾;

led[3:0] <= {led[2:0],led[3]};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Verilog语言可以用来编写流水灯,下面是一个简单的例子: module flow_light (input clk, output reg [2:0] led); always @ (posedge clk) begin led <= led + 1'b1; end endmodule ### 回答2: 流水灯是一种常见的电子零件实验,可以用来展示LED的闪烁效果。在Verilog语言中,可以通过以下方式来实现一个简单的流水灯: ```verilog module shift_register( input wire clk, // 时钟信号 input wire rst, // 复位信号 output wire [7:0] led // LED灯输出 ); reg [7:0] shift_reg; // 移位寄存器,用来存储LED灯的状态 always @(posedge clk or posedge rst) begin if (rst) begin // 如果复位信号为高电平,则将移位寄存器清零 shift_reg <= 8'b00000000; end else begin // 否则根据时钟信号依序移位 shift_reg <= {shift_reg[0], shift_reg[7:1]}; end end assign led = shift_reg; // 将移位寄存器的值赋给LED灯输出 endmodule ``` 以上代码定义了一个名为shift_register的模块,其中包含一个时钟输入信号`clk`、一个复位输入信号`rst`,以及一个8位的LED灯输出`led`。在`always`块中,根据时钟信号和复位信号的变化,将移位寄存器中的值右移1位或被清零。最后,将移位寄存器的值赋给LED灯输出。 通过使用类似以上代码的Verilog语言描述,我们可以在FPGA或其他支持Verilog开发板上搭建一个简单的流水灯实验。 ### 回答3: 流水灯是一种常见的基本电路设计,在Verilog语言中实现也非常简单。以下是一个用Verilog语言写的流水灯设计: module flow_light ( input wire clk, // 时钟输入信号 output wire [7:0] led // 输出到LED的信号 ); reg [2:0] state; // 记录流水灯的状态 reg [7:0] pattern; // 用于存储流水灯的模式 // 定义流水灯的模式 parameter [7:0] pattern1 = 8'b11111110; parameter [7:0] pattern2 = 8'b11111101; parameter [7:0] pattern3 = 8'b11111011; parameter [7:0] pattern4 = 8'b11110111; parameter [7:0] pattern5 = 8'b11101111; parameter [7:0] pattern6 = 8'b11011111; parameter [7:0] pattern7 = 8'b10111111; parameter [7:0] pattern8 = 8'b01111111; // 状态机及流水灯模式切换规则 always @ (posedge clk) begin case (state) 0: begin pattern <= pattern1; state <= 1; end 1: begin pattern <= pattern2; state <= 2; end 2: begin pattern <= pattern3; state <= 3; end 3: begin pattern <= pattern4; state <= 4; end 4: begin pattern <= pattern5; state <= 5; end 5: begin pattern <= pattern6; state <= 6; end 6: begin pattern <= pattern7; state <= 7; end 7: begin pattern <= pattern8; state <= 0; end default: begin pattern <= 8'b11111111; state <= 0; end endcase end // 将流水灯的模式输出到LED assign led = pattern; endmodule 以上代码描述了一个简单的八种模式的流水灯设计,通过时钟信号的上升沿触发状态机进行状态切换,并将对应模式输出到LED灯。在流水灯的状态机中,通过每个状态选择不同的流水灯模式,实现了流水灯效果的循环切换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值