题解 | #格雷码计数器#

格雷码计数器

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

1. 代码

`timescale 1ns/1ns

module gray_counter(
   input   clk,
   input   rst_n,

   output  reg [3:0] gray_out
);
    
    reg [4:0] cnt_bin;
    always @ (posedge clk&nbs***bsp;negedge rst_n) begin
        if( ~rst_n ) begin
            cnt_bin <= 5'b0;
        end 
        else begin
            cnt_bin <= cnt_bin + 5'b1;
        end 
    end 
    
    wire [3:0] bin;
    assign bin = cnt_bin[4:1];
    always @ (gray_out, bin) begin
        //gray_out = bin ^ (bin>>1);
        
        gray_out[3] = bin[3];
        gray_out[2] = bin[3] ^ bin[2];
        gray_out[1] = bin[2] ^ bin[1];
        gray_out[0] = bin[1] ^ bin[0];
       
    end 
    
endmodule

2. 问题解析

这个题会做就行了,出的有问题,二进制计数值每2个时钟才+1。
格雷码——>二进制:
gray = bin ^ (bin>>1);
或者:
gray[最高位] = bin[最高位];
for(i=最高位;i>0;i=i-1) begin
    gray[i] = bin[i] ^ bin[i-1];
end 
最高位一致,其他位等于二进制的错位异或。


全部评论

相关推荐

09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 75人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务