qilinab 2023-09-03 15:52 采纳率: 100%
浏览 1
已结题

触摸按键fpga每行注释

module touch_led(// input sys_clk, input sys_rst_n, input touch_key, output reg led );reg touch_key_d0;reg touch_key_d1;reg switch;wire touch_en;//assign touch_en = (~touch_key_d1) & touch_key_d0;//always @ (posedge sys_clk or negedge sys_rst_n) begin if(sys_rst_n == 1'b0) begin touch_key_d0 <= 1'b0; touch_key_d1 <= 1'b0; end else begin touch_key_d0 <= touch_key; touch_key_d1 <= touch_key_d0; end end//always @ (posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n == 1'b0) switch <= 1'b0; else begin if (touch_en) switch <= ~switch; else switch <= switch; endend//always @ (posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n == 1'b0) led <= 1'b1; else begin if (switch) led <= 1'b0; else led <= 1'b1; endendendmodule

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-03 16:08
    关注

    引用 皆我百晓生 小程序回复内容作答:

    // input sys_clk, input sys_rst_ntouch_led模块的输入端口,sys_clk为系统时钟,sys_rst_n为系统复位信号

    // input touch_key, output reg ledtouch_led模块的输入输出端口,touch_key为触摸按键输入信号,led为LED输出信号

    reg touch_key_d0;reg touch_key_d1;reg switch;wire touch_en;定义了几个寄存器和一个线,分别为touch_key_d0、touch_key_d1、switch和touch_en

    //assign touch_en = (~touch_key_d1) & touch_key_d0;使用逻辑运算符,将触摸按键信号经过处理后赋值给touch_en

    //always @ (posedge sys_clk or negedge sys_rst_n) begin一段always块,表示在系统时钟上升沿发生或系统复位信号下降沿发生时执行以下操作

    if(sys_rst_n == 1'b0) begin如果系统复位信号为低电平(复位状态)
    
        touch_key_d0 <= 1'b0; touch_key_d1 <= 1'b0;将touch_key_d0和touch_key_d1设置为低电平
    
    end else begin如果系统复位信号为高电平(正常工作状态)
    
        touch_key_d0 <= touch_key; touch_key_d1 <= touch_key_d0;将touch_key赋值给touch_key_d0,将之前的touch_key_d0值赋值给touch_key_d1
    
    end end
    

    //always @ (posedge sys_clk or negedge sys_rst_n) begin另一个always块,表示在系统时钟上升沿发生或系统复位信号下降沿发生时执行以下操作

    if (sys_rst_n == 1'b0) switch <= 1'b0;如果系统复位信号为低电平(复位状态),将switch设置为低电平
    
    else begin如果系统复位信号为高电平(正常工作状态)
    
        if (touch_en) switch <= ~switch;如果touch_en为高电平(触摸按键有效),将switch取反
    
        else switch <= switch;否则,保持switch的原值不变
    
    end
    

    end

    //always @ (posedge sys_clk or negedge sys_rst_n) begin另一个always块,表示在系统时钟上升沿发生或系统复位信号下降沿发生时执行以下操作

    if (sys_rst_n == 1'b0) led <= 1'b1;如果系统复位信号为低电平(复位状态),将led设置为高电平
    
    else begin如果系统复位信号为高电平(正常工作状态)
    
        if (switch) led <= 1'b0;如果switch为高电平,将led设置为低电平
    
        else led <= 1'b1;否则,将led设置为高电平
    
    end
    

    end

    endmodule结束一个模块的定义

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月11日
  • 已采纳回答 9月3日
  • 创建了问题 9月3日

悬赏问题

  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数