洗衣机控制器设计Verilog代码Quartus仿真

名称:洗衣机控制器设计Verilog代码Quartus仿真(文末获取)

软件:Quartus

语言:Verilog

代码功能:

洗衣机控制器

1)设计一个电子定时器,控制洗衣机作如下运转:定时启动正转20秒暂停10秒反转20秒暂停10秒定时未到回到“正转20秒暂停10秒....,定时到则停止

2)若定时到,则停机发出音响信号;

3)用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤过程由“开始”信号开始;

4)、三只LED灯表示“正转”、“反转”、“暂停”三个状态

要求.jpg

1. 工程文件

2. 程序文件

3. 程序编译

4. Testbench

5. 仿真图

部分代码展示:

module washing_machine(clk_in, dataout,en,reset_n, start_key, led, end_beep);
   input        clk_in;//50MHz--时钟
   input        reset_n;//复位按下低电平
   input        start_key;//启动按下低电平
   
   output [2:0] led;//正反转灯   
   output       end_beep;//定时结束报警
   
output[7:0] dataout;//数码管段选
output[3:0] en;//COM使能输出
   
   
   reg [1:0]    state;
   reg [2:0]    led;   
   reg [7:0]    washing_time;   
   reg          end_beep_buf;
   reg [7:0]    second_cnt;
   reg          min_en;   
   reg          second_en_1s;
   reg [31:0]    second_div_cnt;
   
reg [31:0] beep_cnt=32'd0;   
   always @(posedge clk_in or negedge reset_n)
if(!reset_n)
state<=2'b00;//空闲状态
else
         case (state)
            2'b00 ://空闲状态
               if (start_key == 1'b0)
                  state <= 2'b01;
               else
                  state <= 2'b00;
            2'b01 ://倒计时状态
               if (washing_time > 8'b00000000)
                  state <= 2'b01;
               else
                  state <= 2'b10;
            2'b10 ://结束
state <= 2'b10;
            default :
               state <= 2'b00;
         endcase
 
   always @(posedge clk_in)      
      begin
         if (state == 2'b10)//结束计数
            beep_cnt <=beep_cnt+ 1'b1;
      end   
   
   always @(posedge clk_in)      
      begin
         if (state == 2'b10)//结束
            end_beep_buf <= 1'b1;
         else
            end_beep_buf <= 1'b0;
      end
  reg [31:0] beepclk_cnt=32'd0;
  reg beepclk=0;
   always @(posedge clk_in)      
      begin
if(beepclk_cnt>=32'd10)begin//仿真时将25_000改小为10
beepclk_cnt<=0;
beepclk<=~beepclk;
end
else begin
beepclk_cnt<=beepclk_cnt+1;
beepclk<=beepclk;
end
      end
  
   assign end_beep = end_beep_buf & beepclk;
   
   
   always @(posedge clk_in)
if(state!=2'b01)//非倒计时状态清零
begin
            second_div_cnt <= 32'd0;
            second_en_1s <= 1'b0;
end
else//倒计时状态计时
      begin
         if (second_div_cnt >= 32'd50)//50_000_000--50M计数50000000为1s,仿真将计数器改小为50
         begin
            second_div_cnt <= 32'd0;
            second_en_1s <= 1'b1;//50MHz分频为1Hz
         end
         else
         begin
            second_div_cnt <= second_div_cnt + 32'd1;
            second_en_1s <= 1'b0;
         end
      end
   
   always @(posedge clk_in)     
      begin
         if (state!=2'b01)//非倒计时状态清零
            second_cnt <= 8'b00000000;
         else if (second_en_1s == 1'b1)//倒计时状态计时
         begin
            if (second_cnt >= 8'd59)//59s
               second_cnt <= 8'd0;
            else
               second_cnt <= second_cnt + 8'd1;
         end
         else
            second_cnt <= second_cnt;
      end
  
   always @(posedge clk_in)
      
      begin
         if (second_en_1s == 1'b1 && second_cnt == 8'd59)
            min_en <= 1'b1;//分钟信号
         else
            min_en <= 1'b0;
      end

源代码

点击下方的公众号卡片获取

基于FPGA(Field-Programmable Gate Array)的彩灯流水灯控制器设计通常涉及到硬件描述语言Verilog或 VHDL 的编程。下面是简化的Verilog代码示例,用于控制八个LED灯的流水灯效果: ```verilog module led_controller ( input wire clk, // 主时钟 input wire rst, // 重启信号 input wire[7:0] data_in, // 输入数据,表示LED灯的状态 output reg [7:0] led_out // 输出驱动LED状态 ); reg [7:0] counter; always @(posedge clk or posedge rst) begin if (~rst) begin counter <= 0; // 重置计数器 led_out <= 8'b0; // 清除所有LED end else if (clk'event and clk.posedge) begin counter <= counter + 1; // 计数器加一 led_out[counter % 8] = data_in; // 更新对应位置的LED end end // LED驱动部分,假设每个LED占用一个IO口 assign led[0:7] = led_out; endmodule ``` 在这个例子中: - `clk`是系统时钟输入; - `rst`是一个复位信号,当有效时清零计数器和LED输出; - `data_in`是输入的数据,每一位代表一个LED的状态; - `led_out`是模拟的LED输出,通过模运算更新LED的状态。 接下来是Vivado仿真步骤: 1. 导入项目:在Vivado环境中,创建新项目并导入Verilog文件。 2. 设计输入:配置仿真所需的时钟频率、复位时间和输入数据序列。 3. 创建波形视图:设置触发事件,比如时钟上升沿,以便观察计数器和LED的变化过程。 4. 运行仿真:点击“Run Simulation”按钮开始模拟,在波形视图中查看LED是否按照预期流水移动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值