题解 | #格雷码计数器#

格雷码计数器

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

`timescale 1ns/1ns

module gray_counter(
   input   clk,
   input   rst_n,

   output  reg[3:0] gray_out
);
//格雷码转二进制
wire [3:0]bin_wire;
assign bin_wire={gray_out[3],gray_out[2]^bin_wire[3],gray_out[1]^bin_wire[2],gray_out[0]^bin_wire[1]};
//二进制相加
reg [3:0]bin;
always@(posedge clk or negedge rst_n)
begin if(!rst_n)
      bin<=0;
      else bin<=bin_wire+1;
end
//二进制转格雷码
always@(posedge clk or negedge rst_n)
begin if(!rst_n)
gray_out<=0;
else  gray_out<={bin[3],bin[2]^bin[3],bin[2]^bin[1],bin[0]^bin[1]};
end

endmodule

全部评论

相关推荐

自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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