zoukankan      html  css  js  c++  java
  • 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_00010000_0010转换中出现了0000_0011这一数据。这是由于门电路在上面两个状态转换中,启实际转换过程为0000_0001---0000_0011---0000_0010或者0000_0001---0000_0000---0000_0010。对于转换过程中出现的错误数据只能在后期进行数据筛选而没有办法避免。

    3-4 局部放大波形

        至此,就完成了一个基本的组合逻辑,3-8译码器的设计。请以此为基础自行设计4-16译码器或者更高位数译码器,并进行仿真。

  • 相关阅读:
    Centos7安装部署openstack--Keystone认证服务
    Centos7安装部署openstack----基础服务安装
    Centos7 k8s dns
    集中式存储3apr
    Centos7 k8s部署dahsboard
    Centos7 k8s tomcat-app项目持久化
    Centos7 k8s 容器的网络访问service
    Centos 7 k8s Deployment新副本控制器
    模型层中模型的基本了解
    程序员必知必会Git的小知识
  • 原文地址:https://www.cnblogs.com/xiaomeige/p/5500918.html
Copyright © 2011-2022 走看看