FPGA/Verilog HDL/AC620 Aprendizaje introductorio básico cero: experimento de contador de código gris

Requisitos experimentales

La función del módulo debe incluir partes lógicas tales como la generación de contadores de códigos binarios, la generación de códigos Gray a partir de códigos binarios y la conversión de los códigos Gray generados en códigos binarios.
El proyecto consta de un módulo funcional y un banco de pruebas. Las señales de puerto de los módulos funcionales se muestran en la siguiente tabla
inserte la descripción de la imagen aquí

Tabla de códigos grises

binario codigo gris
0000 0000
0001 0001
0010 0011
0011 0010
0100 0110
0101 0111
0110 0101
0111 0100
1000 1100
1001 1101
1010 1111
1011 1110
1100 1010
1101 1011
1110 1001
1111 1000

Contador gris

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

resultado de salida

inserte la descripción de la imagen aquí

forma de onda general

inserte la descripción de la imagen aquí

forma de onda parcial

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_42887663/article/details/130386814
Recomendado
Clasificación