题解 | #格雷码计数器#

格雷码计数器

http://www.nowcoder.com/practice/311754bcd45d42eb8d981eeddbdf1e43

仿真波形出来发现是计数器2个周期变一次,可以对时钟二分频得clk2。 一般这种转格雷码用在时钟域同步,将转换得到的格雷码打两拍进行同步。由于格雷码相邻两个状态只有1bit改变,这样能减少不同时钟域导致的亚稳态。

完整代码:

`timescale 1ns/1ns

module gray_counter(
   input   clk,
   input   rst_n,

   output  reg [3:0] gray_out
);
    reg[3:0] cnt;
    reg clk2;
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n)
            clk2 <= 0;
        else
            clk2 <= ~clk2;
    end
    
    always@(negedge clk2 or negedge rst_n)begin
        if(!rst_n)
            cnt <= 0;
        else 
            cnt <= cnt + 1;
    end
    
    always@(*)begin
        if(!rst_n)
            gray_out <= 0;
        else
            gray_out <= (cnt>>1)^cnt;
    end
endmodule
全部评论
上升沿检测用自己定义的时钟会不会增加延迟啊
点赞 回复 分享
发布于 2023-07-28 17:48 美国

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
评论
4
1
分享
牛客网
牛客企业服务