题解 | #格雷码计数器#

格雷码计数器

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


全部评论

相关推荐

点赞 评论 收藏
分享
投递长鑫存储等公司8个岗位
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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