FPGA/Verilog HDL/AC620零基础入门学习——格雷码计数器实验

该文描述了一个Verilog模块GrayCounter,它实现了二进制码到格雷码的转换,并能将格雷码再转换回二进制码。模块包含输入时钟clk_50M、复位信号rst_n以及两个输出:gray_dout(格雷码输出)和gray_count(二进制计数器输出)。在testbench中,对模块进行了仿真,展示了波形输出,包括整体和部分波形视图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验要求

模块功能应包括二进制码计数器的产生、由二进制码产生格雷码、所产生的格雷码再次转换为二进制码等逻辑部分。
该项目由一个功能模块和一个testbench组成。其中功能模块的端口信号如下表所示
在这里插入图片描述

格雷码表

二进制格雷码
00000000
00010001
00100011
00110010
01000110
01010111
01100101
01110100
10001100
10011101
10101111
10111110
11001010
11011011
11101001
11111000

GrayCounter

module GrayCounter(
 input clk_50M,
 input rst_n,
 output reg[3:0]gray_dout,
 output reg[3:0]gray_count
);

 always@(posedge clk_50M or negedge rst_n)
 if(!rst_n) begin 
	gray_dout <= 4'b0000;
	 gray_count <= 4'b0000; // 复位计数器
end
 else begin
  case(gray_dout)
   4'b0000 : begin
	gray_dout <= 4'b0001;
	gray_count <=4'b0001;
	end
   4'b0001 : begin
	gray_dout <= 4'b0011;
	gray_count <=4'b0010;
	end
	4'b0011 : begin
	gray_dout <= 4'b0010;
	gray_count <=4'b0011;
	end
	4'b0010 : begin
	gray_dout <= 4'b0110;
	gray_count <=4'b0100;
	end
	4'b0110 : begin
	gray_dout <= 4'b0111;
	gray_count <=4'b0101;
	end
	4'b0111 : begin
	gray_dout <= 4'b0101;
	gray_count <=4'b0110;
	end
	4'b0101 : begin
	gray_dout <= 4'b0100;
	gray_count <=4'b0111;
	end
	4'b0100 : begin
	gray_dout <= 4'b1100;
	gray_count <=4'b1000;
	end
	4'b1100 : begin
	gray_dout <= 4'b1101;
	gray_count <=4'b1001;
	end
	4'b1101 : begin
	gray_dout <= 4'b1111;
	gray_count <=4'b1010;
	end
	4'b1111 : begin
	gray_dout <= 4'b1110;
	gray_count <=4'b1011;
	end
	4'b1110 : begin
	gray_dout <= 4'b1010;
	gray_count <=4'b1100;
	end
	4'b1010 : begin
	gray_dout <= 4'b1011;
	gray_count <=4'b1101;
	end
	4'b1011 : begin
	gray_dout <= 4'b1001;
	gray_count <=4'b1110;
	end
	4'b1001 : begin
	gray_dout <= 4'b1000;
	gray_count <=4'b1111;
	end
	4'b1000 : begin
	gray_dout <= 4'b0000;
	gray_count <=4'b1111;
	end
	default:begin
	gray_dout <= 4'bx;
	gray_count <= 4'bx;
	end
  endcase
 end

endmodule 

GrayCounter_tb

`timescale 1 ns/ 1 ns
module GrayCounter_tb();
reg clk_50M;
reg rst_n;                                             
wire [3:0]  gray_dout;
wire [3:0]  gray_count;

                         
GrayCounter i1 (
  
	.clk_50M(clk_50M),
	.gray_dout(gray_dout),
	.rst_n(rst_n),
	.gray_count(gray_count)
);
initial 
begin 
	rst_n = 0;
	clk_50M = 0;
	#5 rst_n = 1;
	#100 $stop;
end

always #5 clk_50M = ~clk_50M;

initial $monitor($time,"-> \t now state of gray is : %b,now state of bin_count is:%b",gray_dout,gray_count);
endmodule

输出结果

在这里插入图片描述

整体波形

在这里插入图片描述

部分波形

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sol-itude

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值