题解 | #格雷码计数器#

格雷码计数器

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

`timescale 1ns/1ns

module gray_counter(
   input   clk,
   input   rst_n,

   output  reg [3:0] gray_out
);
//格雷码转二进制
reg  [3:0] gray2bin;
wire [3:0] gray;

always @(posedge clk or negedge rst_n)begin
   if(rst_n == 1'b0) begin
      gray2bin <= 4'b0;
   end
   else begin
      gray2bin[3] = gray[3];
      gray2bin[2] = gray[2]^gray2bin[3];
      gray2bin[1] = gray[1]^gray2bin[2];
      gray2bin[0] = gray[0]^gray2bin[1];
   end 
end
//二进制加一
reg [3:0] cnt;
always @(posedge clk or negedge rst_n)begin
   if(rst_n == 1'b0) begin
      cnt <= 4'b0;
   end
   else begin
      cnt <= gray2bin + 1'b1;
   end
end
//二进制转格雷码
assign gray = (cnt >> 1) ^ cnt;

always @(posedge clk or negedge rst_n)begin
   if(rst_n == 1'b0) begin
      gray_out <= 4'b0;
   end
   else begin
      gray_out <= gray;
   end
end
endmodule

全部评论

相关推荐

07-11 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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