题解 | #格雷码计数器#

格雷码计数器

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


全部评论

相关推荐

牛客57020934...:说实话小厂应该也挺喜欢你这种的,看起来能干活,学历不是那种硕博溢价很高,大厂学历卡死了,但社招和中厂可以多试试。
点赞 评论 收藏
分享
2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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