OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6502|回复: 8

modelsim仿真求助

[复制链接]

34

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2013-11-21
在线时间
19 小时
发表于 2019-5-6 22:04:55 | 显示全部楼层 |阅读模式
10金钱
初学FPGA    使用 联合仿真 原子哥的FPGA例程   “按键控制蜂鸣器实验”  出来的波形和PDF上贴出来的不一样, 7OKER7A9[Y%N1V4)C%_RDAC.png key_value一直是一根红线,也没有flag信号线,这是什么情况?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

202

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
839
金钱
839
注册时间
2018-7-29
在线时间
128 小时
发表于 2019-5-6 23:38:22 来自手机 | 显示全部楼层
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-9-15
在线时间
8 小时
发表于 2019-5-7 08:37:00 | 显示全部楼层
贴上代码来看看
回复

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10543
金钱
10543
注册时间
2017-2-18
在线时间
1908 小时
发表于 2019-5-7 10:29:05 | 显示全部楼层
帮顶~~
回复

使用道具 举报

34

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2013-11-21
在线时间
19 小时
 楼主| 发表于 2019-5-7 11:13:28 | 显示全部楼层

代码跟原子哥的一样

module key_debounce(
    input            sys_clk,          //外部50M时钟
    input            sys_rst_n,        //外部复位信号,低有效
   
    input            key,              //外部按键输入
    output reg       key_flag,         //按键数据有效信号
        output reg       key_value         //按键消抖后的数据  
    );

//reg define   
reg [31:0] delay_cnt;
reg        key_reg;

//*****************************************************
//**                    main code
//*****************************************************
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n) begin
        key_reg   <= 1'b1;
        delay_cnt <= 32'd0;
    end
    else begin
        key_reg <= key;
        if(key_reg != key)             //一旦检测到按键状态发生变化(有按键被按下或释放)
            delay_cnt <= 32'd4;  //给延时计数器重新装载初始值(计数时间为20ms)
        else if(key_reg == key) begin  //在按键状态稳定时,计数器递减,开始20ms倒计时
                 if(delay_cnt > 32'd0)
                     delay_cnt <= delay_cnt - 1'b1;
                 else
                     delay_cnt <= delay_cnt;
             end           
    end   
end

always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n) begin
        key_flag  <= 1'b0;
        key_value <= 1'b1;         
    end
    else begin
        if(delay_cnt == 32'd1) begin   //当计数器递减到1时,说明按键稳定状态维持了20ms
            key_flag  <= 1'b1;         //此时消抖过程结束,给出一个时钟周期的标志信号
            key_value <= key;          //并寄存此时按键的值
        end
        else begin
            key_flag  <= 1'b0;
            key_value <= key_value;
        end  
    end   
end
   
endmodule
回复

使用道具 举报

34

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2013-11-21
在线时间
19 小时
 楼主| 发表于 2019-5-7 11:15:10 | 显示全部楼层
SunML 发表于 2019-5-6 23:38
仿真时间不够长吧

改了时长  ,好像没关系
回复

使用道具 举报

9

主题

202

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
839
金钱
839
注册时间
2018-7-29
在线时间
128 小时
发表于 2019-5-7 13:54:04 | 显示全部楼层
本帖最后由 SunML 于 2019-5-7 14:07 编辑

你应该是仿真的时候添加错信号了,仿真图里的key_value应该是key_debounce 模块的输出端口,不是仿真文件里的那个reg信号  
回复

使用道具 举报

1

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
330
金钱
330
注册时间
2018-1-3
在线时间
96 小时
发表于 2019-5-7 14:59:20 | 显示全部楼层
你会不会没有给KEY_VALUE编辑数值,你试试方针的时候每隔500ms取反一次试试看
回复

使用道具 举报

34

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2013-11-21
在线时间
19 小时
 楼主| 发表于 2019-5-7 17:08:23 | 显示全部楼层
SunML 发表于 2019-5-7 13:54
你应该是仿真的时候添加错信号了,仿真图里的key_value应该是key_debounce 模块的输出端口,不是仿真文件里 ...

1557219858(1).jpg 这两个信号倒是出来了,但是  一直是一条蓝线,好像是初始化问题,我尝试把他们改成reg型,然后在激励中初始化赋值 ,也没效果。testbence 里面只是定义了这两个信号,但是没有做任何操作,不知道怎么解决
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-26 13:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表