【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器

3/8译码器一般用于资源扩展,如驱动led阵列时,即使是FPGA,IO资源也明显不足,借此可以扩展出更多的IO口,通过实现 3/8译码器,记录一下FPGA开发的基本步骤

1.代码编写

module decoder3_8
(
input wire in1 , //输入信号 in1
input wire in2 , //输入信号 in2
input wire in3 , //输入信号 in3

output reg [7:0] out //输出信号 out
);

//out:根据 3 个输入信号选择输出对应的 8bit out 信号
always@(*)
//使用"{}"位拼接符将 3 个 1bit 数据按照顺序拼成一个 3bit 数据
if({in1, in2, in3} == 3'b000)
out = 8'b0000_0001;
else if({in1, in2, in3} == 3'b001)
out = 8'b0000_0010;
else if({in1, in2, in3} == 3'b010)
out = 8'b0000_0100;
else if({in1, in2, in3} == 3'b011)
out = 8'b0000_1000;
else if({in1, in2, in3} == 3'b100)
out = 8'b0001_0000;
else if({in1, in2, in3} == 3'b101)
out = 8'b0010_0000;
else if({in1, in2, in3} == 3'b110)
out = 8'b0100_0000;
else if({in1, in2, in3} == 3'b111)
out = 8'b1000_0000;
else

out = 8'b0000_0001;

endmodule

2.分析综合

(1)分析综合
【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器_第1张图片
(2)查看RTL视图
【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器_第2张图片
3.编写仿真代码

`timescale 1ns/1ns
module tb_decoder3_8();

//reg define
reg in1;
reg in2;
reg in3;
//wire define
wire [7:0] out;

//初始化输入信号
initial begin
in1 <= 1'b0;
in2 <= 1'b0;
in3 <= 1'b0;
end

//in1:产生输入随机数,模拟输入端 1 的输入情况
always #10 in1 <= {$random} % 2;

//in2:产生输入随机数,模拟输入端 2 的输入情况
always #10 in2 <= {$random} % 2;

//in3:产生输入随机数,模拟输入端 3 的输入情况
always #10 in3 <= {$random} % 2;

//------------------------------------------------------------
initial begin
$timeformat(-9, 0, "ns", 6);
$monitor("@time %t:in1=%b in2=%b in3=%b out=%b",$time,in1,in2,in3,out);
end
//------------------------------------------------------------

//-------------decoder3_8_inst----------------
decoder3_8 decoder3_8_ins
(
 .in1(in1), //input in1
 .in2(in2), //input in2
 .in3(in3), //input in3

 .out(out) //output [7:0] out
);

endmodule

4.波形仿真

(1)波形输出
在这里插入图片描述
(2)数值输出
【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器_第3张图片
5.引脚约束
【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器_第4张图片
FPGA分配策略参照:https://wenku.baidu.com/view/394b592c6137ee06eef9182b.html

6.全编译
【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器_第5张图片

7.下载到板

你可能感兴趣的:(FPGA,fpga,译码器,仿真器)