03-组合逻辑电路设计之译码器——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线——普利斯队长精心奉献
课程目标: 1. 再次熟悉Quartus II工程的建立以及完整的FPGA开发流程
2. 以译码器为例学会简单组合逻辑电路设计
实验平台:无
实验原理:
组合逻辑,其任一时刻的稳态输出,仅仅与该时刻的输入变量的取值有关,而与该时刻以前的输入变量取值无关。这种电路跟时序逻辑电路相反,时序逻辑电路的输出结果是依照目前的输入和先前的输入有关系。从电路结构分析,组合电路由各种逻辑门组成,网络中无记忆元件,也无反馈线。与组合逻辑对应的就是时序逻辑,时序逻辑将在下一讲详细描述。
译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本节设计的是通用译码器,数字显示译码器会在后面数码管章节中涉及。
以三八译码器为例,即将3种输入翻译成8种输出状态,其真值表如表3-1所示,其中ABC为数据输入,OUT为输出数据。
|
A |
B |
C |
OUT |
|
0 |
0 |
0 |
0000_0001 |
|
0 |
0 |
1 |
0000_0010 |
|
0 |
1 |
0 |
0000_0100 |
|
0 |
1 |
1 |
0000_1000 |
|
1 |
0 |
0 |
0001_0000 |
|
1 |
0 |
1 |
0010_0000 |
|
1 |
1 |
0 |
0100_0000 |
|
1 |
1 |
1 |
1000_0000 |
表3-1 3-8译码器真值表
实验步骤:
按照02章所讲,建立工程子文件夹后,新建一个以名为my3_8的工程保存在prj下,并在本工程目录的rtl文件夹下新建verilog file文件在此文件下输入以下内容并以my3_8.v保存。由于此处已经将case中的所有情况穷举,因此可以不用书写defalut。{}为位拼接操作符,always@()括号内为敏感信号列表。
|
module my3_8(a,b,c,out); input a;//输入端口A input b;//输入端口B input c;//输入端口C output [7:0]out;//输出端口 reg [7:0]out; always@(a,b,c)begin case({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 |
进行分析和综合直至没有错误以及警告。
为了测试仿真编写测试激励文件,新建my3_8_tb.v文件保存到testbench文件夹下,输入以下内容再次进行分析和综合直至没有错误以及警告。
|
`timescale 1ns/1ns 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 |
设置好仿真脚本后进行功能仿真,可以看到如图3-1所示的波形文件,可以分析得出符合既定的设计要求。至此功能仿真结束。

图3-1 功能仿真波形
进行全编译来实现布局布线,再进行后仿真也就是时序仿真。这是点击RTL viewer,可以看到图3-2的电路结构,可以看出符合预期目的。

图3-2 3-8译码器RTL视图
在图3-3中可以观察发现整体数据均存在一定的延迟现象。

图3-3 时序仿真波形
放大0ns处在图3-4可以看出,刚开始上电时由于输入数据需要等待一段时间才会到达输出端口,因此存在一定时间的未知态,并在0000_0001到0000_0010转换中出现了0000_0011这一数据。这是由于门电路在上面两个状态转换中,启实际转换过程为0000_0001---0000_0011---0000_0010或者0000_0001---0000_0000---0000_0010。对于转换过程中出现的错误数据只能在后期进行数据筛选而没有办法避免。

图3-4 局部放大波形
至此,就完成了一个基本的组合逻辑,3-8译码器的设计。请以此为基础自行设计4-16译码器或者更高位数译码器,并进行仿真。
03-组合逻辑电路设计之译码器——小梅哥FPGA设计思想与验证方法视频教程配套文档的更多相关文章
- 04-时序逻辑电路设计之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:以计数器为例学会简单的时序逻辑电路设计 实验平台:芯航线FPGA核心板 实验原理: 时序逻辑电路是指电路任何时刻的稳态输出不仅取决于当前的输入,还与前一时刻输入 ...
- 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...
- 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...
- 02-FPGA设计流程介绍——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线——普利斯队长精心奉献 课程目标: 1.了解并学会FPGA开发设计的整体流程 2.设计一个二选一选择器并进行功能仿真.时序仿真以及板级验证 实验平台:芯航线FPGA开发板.杜邦线 实验内容: 良 ...
- 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...
- 09B-独立按键消抖实验02——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.复习按键的设计 2.用模块化设计的方式实现每次按下按键0,4个LED显示状态以二进制加法格式加1,每次按下按键1,4个LED显示状态以二进制加法格式减 ...
- 07-阻塞赋值与非阻塞赋值原理分析——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:掌握阻塞赋值与非阻塞赋值的区别 实验平台:无 实验原理: 阻塞赋值,操作符为"=","阻塞"是指在进程语句( ...
- 05-IP核应用之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯顿队长精心奉献 实验目的:了解FPGA的IP核相关知识并以计数器IP核为例学会基本IP使用的流程 实验平台:无 实验原理: IP核(Intellectual Propert ...
- 06-BCD计数器设计与应用——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:1.掌握BCD码的原理.分类以及优缺点 2.设计一个多位的8421码计数器并进行验证 3.学会基本的错误定位以及修改能力 ...
随机推荐
- 【资源】mp3的外链资源
做开发有时候会遇到需要mp3外链来进行程序的调试,但是自己搭建服务器比较麻烦,而主流的音乐平台都不提供外链音乐.晚上偶得一外链mp3的网站,标记之: http://9hok.com/
- C++ substr() 和 Java substring() 区别
Java和C++中都有关于子字符串的操作,C++中是substr(),Java中是substring(),两者的用法上稍有些区别,首先针对只有一个参数的情况: s.substr(start) 和 s. ...
- Aidl的使用步骤
先说说Aidl传递参数类型 1.基本数据类型(除short类型) 2.String.charSequence 3.List,map 4.parcelable 第1步:定义一个*.aidl文件,ecli ...
- Daily Scrum 10.29
今天大家的工作做的还算不错,但是晚些时候遗憾的得知我们的吴文会同学生病住院了,所以她明天的任务暂时保留,再做调整.希望大家在努力学习工作的同时一定要注意身体啊! 下面是今天的Task统计:
- php目录下的ext目录中,执行的命令
php的目录下的ext目录,如果你只需要一个基本的扩展框架的话,执行下面的命令: ./ext_skel --extname=module_name module_name是你自己可以选择的扩展模块的名 ...
- 关于svn的使用
svn听课笔记 1. 下载并安装svn2. 将svn安装目录中bin目录添加到用户path变量中.3. 创建svn根目录svnroot4. 启动svn服务 在dos启动命令: svnserve -d ...
- Codeforces Round #375 (Div. 2) A B C D F
A 数轴上有三个人要到一个点去过年 使三个人走路距离的和最小 让两边的人都走到中间那个点即可 B 给出一个字符串 其中有_ ( ) 三种字符和英文字母 连续的英文字母是一个单词 括号对中不会套括号对 ...
- javascript大神修炼记(7)——OOP思想(多态)
读者朋友们大家好,今天我们就接着前面的内容讲,前面我们已经讲到了继承,今天我们就来讲OOP目前最后一个体现,那就是多态,因为javascript语言的灵活性,所以我们是没有办法使用接口的,所以这也给j ...
- mysql查询结果添加编号
第一种方法: select (@i:=@i+1) as i,table_name.* from table_name,(select @i:=0) as it 第二种方 ...
- mysql5.5 修改字符集
对于使用者来说,一般推荐使用utf8编码来存储数据.而要解决乱码问题,不单单是MySQL数据的存储问题,还和用户的程序文件的编码方式.用户程序和MySQL数据库的连接方式都有关系. 首先,MySQL有 ...