# FPGA入门笔记002——译码器

发布时间 2023-11-16 22:16:00作者: Yamada_Ryo

设计一个38译码器

项目文件编写:

module my3_8(
	a,
	b,
	c,
	out
);

	input a;	//输入端口A
	input b;	//输入端口B
	input c;	//输入端口C
	
	output reg[7:0]out;	//输出端口
	
	/*
	always块:
	'()'内部为敏感信号,当a、b、c有一个信号发生变化时,执行always块中的语句
	凡是在always块中赋值的信号,必须将其定义为reg型
	*/
	always@(a,b,c)begin
		case({a,b,c})	//'{}'为多位拼接,将a、b、c三个信号拼接成一个三位的信号
			3'b000:out = 8'b0000_0001;	//'_'为占位符,不表示任何含义
			3'b001:out = 8'b0000_0010;
			3'b010:out = 8'b0000_0100;
			3'b011:out = 8'b0000_1000;
			3'b100:out = 8'b0001_0000;
			3'b101:out = 8'b0010_0000;
			3'b110:out = 8'b0100_0000;
			3'b111:out = 8'b1000_0000;
		endcase
	end
	
endmodule

语法知识:

1、always块

1、'()'内部为敏感信号,当a、b、c有一个信号发生变化时,执行always块中的语句

2、凡是在always块中赋值的信号,必须将其定义为reg型

2、多位拼接

'{}'为多位拼接,将a、b、c三个信号拼接成一个三位的信号

仿真文件编写:

`timescale 1ns/1ps

module my3_8_tb();

	reg a;
	reg b;
	reg c;
	
	wire [7:0]out;

	my3_8 u1(
		.a(a),
		.b(b),
		.c(c),
		.out(out)
	);
	
	initial begin
		a = 0;b = 0;c = 0;
		#200;
		a = 0;b = 0;c = 1;
		#200;
		a = 0;b = 1;c = 0;
		#200;
		a = 0;b = 1;c = 1;
		#200;
		a = 1;b = 0;c = 0;
		#200;
		a = 1;b = 0;c = 1;
		#200;
		a = 1;b = 1;c = 0;
		#200;
		a = 1;b = 1;c = 1;
		#200;
		$stop;
	end
	
endmodule