题解 | #格雷码计数器#

格雷码计数器

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 
最高位一致,其他位等于二进制的错位异或。


全部评论

相关推荐

10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务