【FPGA】 3-8译码器 —— 组合逻辑 | 熟悉语法及开发环境

  • 继续熟悉基于vivado的FPGA开发流程。。
  • 学习一些新语法
image-20220918104304305

3-8 译码器的应用我们接下来还会用到~

创建工程

观众老爷们别管了,咱板子也不一定一样~

image-20220918104611850

1. 设计输入

  • 编码
  • 画框图,vivado支持较弱
  • 使用IP,我们今天暂时不用哦~

添加Design Sources

decoder_3_8

module decoder_3_8(
    //端口列表
    a,
    b,
    c,
    out
);
    //端口定义
    input a;
    input b;
    input c;
    output[7:0] out; //位宽描述符 - 表示多位
    reg[7:0] out; //-以always块描述的信号赋值,被赋值的对象必须定义为reg类型
//    output reg[7:0] out;//或者写成这样也可
    //描述逻辑
    always@(*) 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        
//    always@(a,b,c)
endmodule

学习新语法,争做新青年 ——

  1. always块
    always@(*)
    always@(a,b,c)
  1. case - endcase块
case({a, b, c}) 
  • {}位拼接,把三个独立信号看做一个三位信号

    我们还可 ——

    wire[3:0] d;
    assign d = {a, 1'b0, b, c}; //设置为常量的值
    
  • always块描述的信号赋值,被赋值的对象必须定义为reg类型,否则会爆红

image-20220918112445772

​ 当然也可以同时定义端口方向和端口类型。

  • 8'b0000_1010:描述多位宽信号的格式限定符,当然你可以写成3'd108'o128'ha

    还有 —— b二进制;d十进制;o八进制;h十六进制

    至于使用哪种方式,我们完全以便于理解为准。

2. 分析综合

Run synthesis 检查语法错误

3. 功能仿真

添加Simulation Sources文件

decoder_3_8_tb

`timescale 1ns/1ns //步长/精度

module decoder_3_8_tb(); //测试模块不需要端口

    //激励信号
    reg s_a;
    reg s_b;
    reg s_c;
    wire[7:0] out; 
    
    decoder_3_8 decoder_3_8( //贴标签
        //连线
        .a(s_a),
        .b(s_b),
        .c(s_c),
        .out(out)
    );
    
    //产生激励
    initial begin
        s_a = 0; s_b = 0; s_c = 0;
        #200;
        s_a = 0; s_b = 0; s_c = 1;
        #200;
        s_a = 0; s_b = 1; s_c = 0;
        #200;
        s_a = 0; s_b = 1; s_c = 1;
        #200;
        s_a = 1; s_b = 0; s_c = 0;
        #200;
        s_a = 1; s_b = 0; s_c = 1;
        #200;
        s_a = 1; s_b = 1; s_c = 0;
        #200;
        s_a = 1; s_b = 1; s_c = 1;
        #200;
        
    end
    
endmodule

run synthesis 再分析综合哦吼吼,它给我分析过了

Run Simulation ——

image-20220918154839216

时序仿真跳过因为这个太简单了

4. 板爷调试

板子就是爷,因为它太贵了。。

分配IO引脚: SYSTHESIS → open Synthesized Design → IO Planning

image-20220918160739983

ctrl+s保存为XDC文件。

布局布线

IMPLEMENTATION → Run Implementation

或者你直接Generate Bitstream 那上一步自动帮你完成了,那我们以后都这么干。

连板子

Open Hardware Manager → open target → auto connect

Program device 就ok啦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮光 掠影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值