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

news2024/11/14 15:09:16

文章目录

    • 1. 设计输入
    • 2. 分析综合
    • 3. 功能仿真
    • 4. 板爷调试

  • 继续熟悉基于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啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/932104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

天津Java培训班怎么选? Java适合什么人学?

Java在许多移动和桌面应用程序中都容易学习和使用,还有很多Java工具可以让开发人员和初学者轻松使用,如果你考虑从事计算机领域的工作,或者希望提高编程技能,那么学习Java是一个好选择。 为什么推荐学Java 需求量大:…

【C++初阶】模拟实现list

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

Minio如何禁止桶遍历

说明:Minio是文件资源服务器,相当于免费的OSS,安装参考:Minio使用及整合起步依赖; 如果你的桶(Bucket)权限设置的是“Private”,那么可能会有数据泄露的风险。像别有用心的用户&…

BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(上)

文章目录 文章引入IO模型及概念梳理BIO简单介绍代码样例压测结果 NIO(单线程模型)简单介绍与BIO的比较代码样例压测结果 多路复用器问题引入 文章引入 如果你对BIO、NIO、多路复用器有些许疑惑, 那么这篇文章就是肯定需要看的, 本文将主要从概念, 代码实现、发展历程的角度去突…

基于FPGA的Lorenz混沌系统verilog开发,含testbench和matlab辅助测试程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将vivado的仿真结果导入到matlab显示三维混沌效果: 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 testbench如下所…

怎么对App进行功能测试

测试人员常被看作是bug的寻找者,但你曾想过他们实际是如何开展测试的吗?你是否好奇他们究竟都做些什么,以及他们如何在一个典型的技术项目中体现价值?本文将带你经历测试人员的思维过程,探讨他们测试app时的各种考虑. …

MyBatis-Plus框架技术总结

MybatisPlus 1、概述 MybatisPlus是一款Mybatis增强工具,用于简化开发,提高效率。 它在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 ​ 官网: https://mp.baomidou.com/ 2、快速入门 2.0、准备工作 ①准…

PROFIBUS主站转MODBUS TCP网关

1.产品功能 YC-DPM-TCP网关在Profibus总线侧实现主站功能,在以太网侧实现ModbusTcp服务器功能。可将Profibus DP从站接入到ModbusTcp网络;通过增加DP/PA耦合器,也可将Profibus PA从站接入ModbusTcp网络。YC-DPM-TCP网关最多支持125个Profibu…

wireshark 流量抓包例题重现

目录 要求 黑客攻击的第一个受害主机的网卡IP地址黑客对URL的哪一个参数实施了SQL注入第一个受害主机网站数据库的表前缀 第一个受害主机网站数据库的名字 要求 (1)黑客攻击的第一个受害主机的IP地址 (2)黑客对URL的某一参数实…

在服务器上搭建Jenkins

目录 1.服务器要求 2.官方文档 3.在服务器上下载Jenkins 3.1 下载war包 3.2 将war包上传到服务器的一个目录下 3.3 启动jenkins 3.3.1 jdk版本升级 1)下载jdk17 2)解压到当前文件夹 3)配置路径 4.jenkins配置 4.1 填写初始密码&a…

直线模组在搬运行业的应用

近几年,国内直线模组的研发发展非常快,直线模组应用的范围也在一直在扩大,发展到今天,已经被广泛应用到各种设备中,尤其是在搬运行业中,是搬运行业中必不可少的传动元件之一。 直线模组在搬运中的应用&…

算法笔记(一):时间复杂度

省略的技巧 已知 f ( n ) f(n) f(n) 来说,求 g ( n ) g(n) g(n) 表达式中相乘的常量,可以省略,如 f ( n ) 100 ∗ n 2 f(n) 100*n^2 f(n)100∗n2 中的 100 100 100 多项式中数量规模更小(低次项)的表达式&#…

vue create -p dcloudio/uni-preset-vue my-project创建文件报错443

因为使用vue3viteuniappvant4报错,uniapp暂不支持vant4,所以所用vue2uniappvant2 下载uni-preset-vue-master 放到E:\Auniapp\uni-preset-vue-master 在终端命令行创建uniapp vue create -p E:\Auniapp\uni-preset-vue-master my-project

mysql profiling profiles profile

要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 MySQL 5.1正式版中已经可以非常容易做到了&a…

云计算中的数据安全与隐私保护策略

文章目录 1. 云计算中的数据安全挑战1.1 数据泄露和数据风险1.2 多租户环境下的隔离问题 2. 隐私保护策略2.1 数据加密2.2 访问控制和身份验证 3. 应对方法与技术3.1 零知识证明(Zero-Knowledge Proofs)3.2 同态加密(Homomorphic Encryption&…

cublas_v2.h没有那个文件和目录,解决

我的是orin,使用的cuda11.4,后来发现通过sudo jetson_release看到的CUDA是没有安装的。 定位到问题是: 使用ls /usr/local/ -lha查看软连接,如下: 能够发现cuda这个软连接是有问题的,他链接的是cuda10.2 …

几种在JavaScript中创建对象的方式!

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 字面量方式⭐ 构造函数方式⭐ Object.create()方式⭐ 工厂函数方式⭐ ES6类方式⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门…

Python分享之redis(2)

Hash 操作 redis中的Hash 在内存中类似于一个name对应一个dic来存储 hset(name, key, value) #name对应的hash中设置一个键值对(不存在,则创建,否则,修改) r.hset("dic_name","a1","aa&quo…

java八股文面试[多线程]——sleep wait join yield

sleep和wait有什么区别 sleep 方法和 wait 方法都是用来将线程进入阻塞状态的,并且 sleep 和 wait 方法都可以响应 interrupt 中断,也就是线程在休眠的过程中,如果收到中断信号,都可以进行响应并中断,且都可以抛出 In…

ServiceManger Binder的处理流程

陌生知识点如下: BinderProxy:是将Native层的BpBinder对象进行封装后传给Java层使用的Binder对象android_util_binder: Binder在JNI层的相关注册,处理,转换封装接口BpBinder:Binder驱动在Native层的封装。IPCThreadState&#xf…