(2)FPGA仿真——3-8译码器设计

这篇具有很好参考价值的文章主要介绍了(2)FPGA仿真——3-8译码器设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3-8译码器设计

译码是编码的逆过程,在编码时,每一种二进制代码,都赋予了特定的含义,即都表示了一个确定的信号或者对象。把代码状态的特定含义翻译出来的过程叫做译码,实现译码操作的电路称为译码器。或者说,译码器是可以将输入二进制代码的状态翻译成输出信号,以表示其原来含义的电路。
译码器(decoder)是一类多输入多输出组合逻辑电路器件,其可以分为:变量译码和显示译码两类。变量译码器一般是一种较少输入变为较多输出的器件,常见的有 n 线-2^n线译码和 8421BCD 码译码两类;显示译码器用来将二进制数转换成对应的七段码,一般其可分为驱动 LED 和驱动 LCD 两类。

这里主要讲解变量译码,最常见的变量译码器为 3-8 译码器,主要用于端口的扩展。在数字电路当中常用来做地址译码。假设译码器的输入为ABC,输出则为Y0-Y7,则3-8译码器的真值表如下

A B C Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
0 0 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0
1 0 1 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 0 0 1 0
1 1 1 0 0 0 0 0 0 0 1

Y0=A’B’C’,Y1=A’B’C,Y2=A’BC’,Y3=A’BC,Y4=AB’C’,Y5=AB’C,Y6=ABC’,Y7=ABC(‘表示反变量)
用门电路设计一般为下图所示,且3-8译码器一般还会有3个附加控制端,这里没有给出。

译码器设计,fpga开发

封装好的芯片如74LS138芯片管脚图如下图所示
译码器设计,fpga开发
这里实现方式有两种:一种为if-else语句实现,判断输入ABC的情况,对应输出即可。另一种为case语句(推荐)实现。另外也会给出二者的RTL视图,读者二择一即可。

如果不记得软件的操作和仿真设置可以点击下边链接查看。

软件的使用和仿真设置看这里

代码实现和仿真波形

一、if-else语句实现

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 @ (*)
	begin//使用"{}"位拼接符将 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_0010;
		else if({in1,in2,in3}==3'b111)
			out=8'b1000_0000;
		else 
			out=8'b0000_0001;
	end
//最后一个 else 对应的 if 中的条件只有一种情况,还可能产生以上另外的 7 种情况
//如果不加这个 else 综合器会把不符合该 if 中条件的上面另外 7 种情况都考虑进去
//会产生大量的冗余逻辑并产生 latch(锁存器),所以在组合逻辑中最后一个 if
//后一定要加上 else,并任意指定一种确定的输出情况

endmodule

RTL视图

译码器设计,fpga开发

二、case语句实现(推荐)

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

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

//out:根据输入的 3bit in 信号选择输出对应的 8bit out 信号
always@(*) case({in1, in2, in3})
	3'b000 : out = 8'b0000_0001; //输入与输出的 8 种译码对应关系
	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;
//因为 case 中列举了 in 所有可能输入的 8 种情况,且每种情况都有对应确定的输出
//所以此处 default 可以省略,但是为了以后因不能够完全列举而产生 latch
//所以我们默认一定要加上 default,并任意指定一种确定的输出情况
	default: out = 8'b0000_0001;
endcase

endmodule

RTL视图

译码器设计,fpga开发

三、仿真代码

`timescale  1ns/1ns
module  tb_decoder3_8();
wire    [7:0]   out;
reg             in1;
reg             in2;
reg             in3;

//初始化输入信号
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  decoder3_8_inst(
	.in1(in1),  //input             in1
	.in2(in2),  //input             in2
	.in3(in3),  //input             in3

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

波形图

译码器设计,fpga开发
Transcipt视图

译码器设计,fpga开发文章来源地址https://www.toymoban.com/news/detail-713909.html

下节内容——半加器

到了这里,关于(2)FPGA仿真——3-8译码器设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA_38译码器

    本文来自《小梅哥FPGA视频》的笔记整理 不要眼高手低,一定一定要实践,自己动手去敲一遍!!! 在数字电路中可以根据电路功能的不同分为,组合逻辑电路与时序逻辑电路。 组合逻辑 电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状

    2023年04月11日
    浏览(42)
  • Verilog 编程实现 3-8 译码器 FPGA

    Verilog 编程实现 3-8 译码器 FPGA FPGA 是一种可重构的数字电路芯片,可用于实现各种逻辑电路。在 FPGA 中,我们可以使用 Verilog HDL(硬件描述语言)来编写数字电路设计。本篇文章将为您介绍如何使用 Verilog 实现基本的数字电路,即 3-8 译码器。 3-8 译码器是一种常用的数字电路

    2024年02月07日
    浏览(44)
  • 【FPGA】译码器、计数器及数码管显示

    写在前面 万万没想到秋招春招找工作以C++为主、FPGA为辅,最后去了FPGA岗位 也算是不忘初心,回归了从研一就开始学的FPGA老本行 但之前学FPGA的时候并没有养成写笔记的习惯,导致后面有些东西都比较模糊,因此打算从今天开始从头来过,把之前基础知识和新学到的FPGA相关

    2024年02月11日
    浏览(48)
  • 北邮22级信通院数电:Verilog-FPGA(7)第七周实验(2):BCD七段显示译码器(关注我的uu们加群咯~)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.verilog代码 1.1 decoder_led.v 1.2 decoders.v 二.管脚分配 三.效果展示 四

    2024年02月04日
    浏览(50)
  • 用译码器来设计组合逻辑电路

     三线到八线:输入端只有三个所以只能是三变量  我们先来看书上的一个例子  设计的过程第一步 将函数表达式整理成最小项和的形式 我们用来举例,不是最小项的形式 三变量函数可以用三变量的最小项来表示  为了看的更清楚,我们写成 最小项的编号 ,这样子更好看

    2024年02月08日
    浏览(48)
  • 【Multisim仿真】74LS47译码器驱动共阳数码管显示(0-8)数字显示

    🎬Multisim仿真演示 📑74ls47引脚功能 LT: 试灯输入,是为了检查数码管各段是否能正常发光而设置的。当LT=0时,无论输入A3,A2,A1,A0 为何种状态,译码器输出均为低电平,也就是七段将全亮,若驱动的数码管正常,是显示8。 BI: 灭灯输入,是为控制多位数码显示的灭灯所

    2024年02月17日
    浏览(276)
  • Verilog 3线-8线译码器设计

    任务描述 相关知识 3线-8线译码器的功能 case语句 编程要求 说明  源代码 设计一个3线-8线译码器。运用Verilog HDL进行设计,完善译码器的功能描述风格代码,具备组合逻辑电路的设计仿真和测试的能力。 需要掌握: 1.3线-8线译码器的功能; 2.如何用case语句进行逻辑功能的描

    2024年02月08日
    浏览(50)
  • EDA实验-----3-8译码器设计(QuartusII)

    目录 一. 实验目的 二. 实验仪器 三. 实验原理及内容 1.实验原理 2.实验内容 四.实验步骤 五. 实验报告 六. 注意事项  七. 实验过程 1.创建Verilog文件,写代码 ​编辑 2.波形仿真 3.连接电路图 4.烧录操作 学会Verilog HDL的case语句应用。 学会Verilog HDL的if语句应用。 学会使用Ver

    2024年02月05日
    浏览(57)
  • 数字逻辑与部件设计基础实验——3-8译码器

    用连续值 或者always语句实现3-8译码器74138 了解3-8译码器的功能,锻炼根据功能表实现硬件功能的能力 熟悉上板操作的步骤和流程 74138的器件手册中的Function Tables: 用verilog语言在vivado环境下编写源文件,实现3-8译码器。经综合、实现、生成bitstream文件后,将bit文件下载到NE

    2024年02月02日
    浏览(39)
  • 设计分享|74LS138译码器实现流水灯

    具体实现功能: 74LS138译码器实现流水灯的控制。 设计介绍 51单片机简介 51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 51系列单片机具有以下标准功能: 8k字节Flash,512字节RAM,

    2024年02月06日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包