设计一个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
标签:200,FPGA,always,reg,002,拼接,信号,译码器,out
From: https://www.cnblogs.com/little55/p/17837418.html