题解 | #格雷码计数器#

格雷码计数器

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

在我理解中格雷码计数器是指输入是格雷码,输出也是格雷码。 1️⃣以二进制计算器为例,cnt<=cnt+1;输入可以理解为上一态的二进制cnt,输出可以理解为下一态二进制的cnt,可以看出输入输出都为二进制。这里可有构成一个反馈,也就是上一态的cnt输出,就是下一态的输入 2️⃣根据别人的回答,该题答案是两个周期变化一次,于是我设计了如下电路图,一个组合电路:格雷码转二进制,两个时序电路:二进制计数器和二进制码转格雷码 alt `timescale 1ns/1ns

module gray_counter( input clk, input rst_n,

output reg [3:0] gray_out ); wire [3:0] bin_out; reg [3:0] s1_bin_out;

//格雷码转二进制码
assign bin_out[3]=gray_out[3];
genvar i;
generate
    for(i=2;i>=0;i=i-1)
        begin : gray2bin
            assign bin_out[i] = bin_out[i+1]^gray_out[i];
        end
endgenerate

//二进制计数器+1
always@(posedge clk or negedge rst_n)
    if(!rst_n)
        s1_bin_out <= 0;
    else
        s1_bin_out <= bin_out+1;
//二进制转格雷码寄存一拍
always@(posedge clk or negedge rst_n)
    if(!rst_n)
        gray_out <= 0;
    else
        gray_out <= s1_bin_out^(s1_bin_out>>1);    

endmodule

全部评论

相关推荐

09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
4 1 评论
分享
牛客网
牛客企业服务