题解 | 格雷码计数器

二分频题目没说

`timescale 1ns/1ns

module gray_counter(
   input   clk,
   input   rst_n,

   output  reg [3:0] gray_out
);

reg [3:0] cnt;
reg       falg;

    always @(posedge clk or negedge rst_n)           
        begin                                        
            if(!rst_n) begin
                falg <= 'd0;                           
            end                                  
            else begin
                falg <= ~falg;  
            end                            
        end

    always @(posedge clk or negedge rst_n)           
        begin                                        
            if(!rst_n) begin
                cnt <= 'd0;                           
            end                                  
            else if(falg) begin
                cnt <= cnt + 1'b1;  
            end                            
        end

    always@(*)
        begin                                        
            if(!rst_n) begin                         
                gray_out = 'd0; 
            end                                  
            else begin
                gray_out = cnt ^ (cnt >> 1);   
            end                            
        end

endmodule

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务