题解 | #边沿检测#

边沿检测

http://www.nowcoder.com/practice/fed4247d5ef64ac68c20283ebace11f4

简析

对输入信号a打一拍得到a0,然后根据aa0的值就可以判断出边沿类型。
我最开始写的代码如下:

    reg a0;
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) begin
            rise <= 1'b0;
            down <= 1'b0;
        end
        else begin
            rise <=  a & ~a0;  // !!!
            down <= ~a &  a0;  // !!!
        end
    end
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            a0 <= 0;
        else
            a0 <= a;
    end

然而会报错。分析了波形后发现Testbench的a长时间都是不确定状态,如下图。这会使得risedown也成为不确定值。if-else方法则可以避免这种错误。
alt

代码

`timescale 1ns/1ns
module edge_detect(
	input clk,
	input rst_n,
	input a,
	
	output reg rise,
	output reg down
);
	reg a0;
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) begin
            rise <= 1'b0;
            down <= 1'b0;
        end 
        else begin
            if(a & ~a0) begin
                rise <= 1;
                down <= 0;
            end 
            else if (~a & a0) begin
                rise <= 0;
                down <= 1;
            end else begin
                rise <= 0;
                down <= 0;
            end
        end
    end
    
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) 
            a0 <= 0;
        else 
            a0 <= a;
    end
endmodule
Verilog篇题解 文章被收录于专栏

本人对牛客网verilog篇题目一些理解

全部评论
if-else语句中0,x,z按照‘假’处理,所以避免了不确定状态,学习到了
3 回复 分享
发布于 2023-02-12 20:54 四川
从verilog语法上讲,if-else可以避免x态传播,但是真实工作中,仿真器也会让if()中的x传播下去。所以还是得确保a进入这段逻辑前先初始化。
点赞 回复 分享
发布于 2023-09-17 16:15 上海
我一上手就写了第一个错误答案
点赞 回复 分享
发布于 2023-07-31 23:37 湖南
好像没有考虑到一种情况:在一个时钟周期内,a的状态发生了两次翻转。
点赞 回复 分享
发布于 2023-04-16 17:55 广东
激励有问题
点赞 回复 分享
发布于 2023-01-08 15:15 广东
请问为什么会出现不确定呢状态呢
点赞 回复 分享
发布于 2022-06-20 10:50

相关推荐

不愿透露姓名的神秘牛友
昨天 15:27
点赞 评论 收藏
分享
04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
45
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务