weixin_50223517 2021-09-08 16:25 采纳率: 0%
浏览 33
已结题

verilog边沿检测实现触摸控制小灯翻转

img

img

img

img

1和2为一组图 3和4为一组图
为什么tmp的赋值要单独用一个always块 才能实现延一拍的效果

  • 写回答

1条回答 默认 最新

  • 老皮芽子 2021-09-08 17:17
    关注

    在3/4 中tmp的赋值单独用一个always块 ,这么做比较好理解,逻辑也比较清晰。
    你在 1/2 中 可以这么改

    module touch_ctrl led
    (
        input wire touch_key, //松开输出低电平 触摸时输出高电平 1ed高电平点亮
        input wire sys_clk,
        input wire sys_rst_n,
        output reg led
    );     
        reg flag;
        reg tmp = 0;    //在FPGA 中这么定义赋初始值是允许的,在一些 芯片设计中是不能这么做的。
    
        always @(posedge sys_clk or negedge sys_rst_n) begin
        tmp<= touch key;
        if(sys_rst_n== 1'b0)
        begin
            flag    <=1'b0;
    //        tmp        <=1'b0;    //这个地方会覆盖上面 tmp 的值,逻辑会比较乱,将这行去掉。    
        end
        else if(tmp && (~touch_key))
            flag 1'b1;
        else
            flag<=1'b0;
        end
    
        always @(posedge sys_clk or negedge sys_rst_n) begin
        if(sys_rst_n = 1'b0)
            1ed    <= 1'b0;
        else if(flag==1'b1)
            led <= ~led;
        else
            led <= led;
        end
    endmodule
    
    

    也可以这么改

    module touch_ctrl led
    (
        input wire touch_key, //松开输出低电平 触摸时输出高电平 1ed高电平点亮
        input wire sys_clk,
        input wire sys_rst_n,
        output reg led
    );     
        reg flag;
        reg tmp;
    
        always @(posedge sys_clk or negedge sys_rst_n) begin
    //    tmp<= touch key;
        tmp <= sys_rst_n == 0 ? 0:touch_key;     
        if(sys_rst_n== 1'b0)
        begin
            flag    <=1'b0;
    //        tmp        <=1'b0;    //这个地方会覆盖上面 tmp 的值,逻辑会比较乱,将这行去掉。    
        end
        else if(tmp && (~touch_key))
            flag 1'b1;
        else
            flag<=1'b0;
        end
    
        always @(posedge sys_clk or negedge sys_rst_n) begin
        if(sys_rst_n = 1'b0)
            1ed    <= 1'b0;
        else if(flag==1'b1)
            led <= ~led;
        else
            led <= led;
        end
    endmodule
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月3日
  • 创建了问题 9月8日

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办