HDL FPGA 学习 - IP 模块收集,推荐书目,参考

目录

2 模块收集(不定期更新)

2.5 数字电路设计实用技术

3 参考


编辑整理 by Staok,始于 2021.2 且无终稿。转载请注明作者及出处。整理不易,请多支持。

本文件是“瞰百易”计划的一部分,尽量遵循“二项玻”定则,致力于与网络上碎片化严重的现象泾渭分明!

本文系广泛撷取、借鉴和整理,适合刚入门的人阅读和遵守,已经有较多经验的人看一看图个乐,如有错误恭谢指出!本文已经是长期积累和堆叠而形成一定规模,不必按照从前到后的顺序去看,可以挑感兴趣的章节去看。

本文为简述风格,本意即记录要点和便于快速拾起。

本文对应的 Github/Gitee 仓库地址,本文最新的原文 和 一些源码、备查手册等等 均放在里面。


2 模块收集

p.s 以下为列举日常项目中用到的可以开源的部分模块源码(Verilog or VHDL)或者实现思想(就是留个坑,但还没写)。

  • Github 上有哪些优秀的 Verilog/FPGA 项目? 有很多好的推荐项目和回答!

  • WangXuan95 (WangXuan95) / Repositories (github.com) 开源了许多 Verilog IP。

  • Alex Forencich 的 GitHub 主页 开源了许多 Verilog IP,Verilog IP cores - Alex Forencich。

  • FreeCores (github.com) A home for open source hardware cores。

  • pConst / basic_verilog 的常用代码。

    文件位置:./pConst 的 basic_verilog-master.zip

  • Analog Devices, Inc。

  • OpenCores。在这个网站上可以看到各种经过工程师验证过的内核,比如8051、OpenRisc、AVR、MIPS32等。

  • 李锐博恩 Verilog编程实例。

  • NingHeChuan 的 ip_lib ——构建自己的IP库,搭建起你的数字积木。

    文件位置:./FPGA学习和规范 的参考源码/NingHeChuan 的 ip_lib/

  • 类MCU的时间片轮询实现,晶振时钟通过PLL IP得到准确时钟,每个PLL有五个输出,分别分频得到运行周期为 10MHz、5MHz、1MHz、1KHz、100Hz的程序的入口,把不同功能的程序直接放在想要按照某个周期运行的程序入口即可。这个直接写到模板的Top文件即可,不用作为一个模块。

  • 根据寄存器或者外部引脚的电平组合等信息,可以在运行时任设或者有限改动FPGA内部逻辑的输出引脚,就像STM32的外设引脚切换或者K10的FPIOA一样允许用户将255个内部功能映射到芯片外围的48个自由IO上。

  • 按键消抖

    思想:当“按键可以检测标志位”有效时,按下的边沿触发启动一计数器,同时标记“按键可以检测标志位”失效,当计数器计数到一定值后,再检测按键是否处于按下状态,如果是则标记“按键有效”标志位做输出,如果不是则停止计数,同时标记“按键可以检测标志位”有效,同时清空计数值。

    sopc 读取外部按键设计思路,引脚输入后先在FPGA的逻辑上先实现一个去抖,然后把无毛刺的稳定的信号传给 nios ii 输入脚,然后 nios ii 里面实现一个外部引脚沿中断。

    文件位置:./FPGA学习和规范 的参考源码/按键消抖/

  • 特定序列检测与发送

    思想:用 case 语句实现简单的一段状态机即可。

  • PWM信号产生

    思想:占空比值与一个向上计数器计数值比较,当占空比值比计数值大时输出高电平,小时输出低电平。

    参考“小梅哥 AC620V2开发板配套资料”的无源蜂鸣器章节和例程。

  • I2C模块

    小梅哥 FPGA进阶 第十六章 IIC协议详解+UART串口读写EEPROM

  • SPI模块

    择时更新,交流可催更

  • UART模块 看《FPGA设计-实战演练(逻辑篇)》 吴厚航 的随书源码。(@TODO 不过这个程序的最外层还不够明朗,需要再整理简化使用)

  • 状态机

    注意点:

    • 关键是画好状态图;
    • 状态完备;
    • 组合逻辑条件完备;
    • 不能进入死循环;
    • 不能进入非预知状态。
    • 需要穷举所有状态对应的输出动作,或者使用 default 来定义未定义状态动作。
    • 推荐都使用三段式状态机。

    参考:

    • 文件位置:./FPGA学习和规范 的参考源码/fsm/
    • 三种状态机 基于FPGA的有限状态机浅析
    • 三段式状态机 万物基于状态机——状态机大法好
    • 三段式状态机 【BUG记录】三段式状态机编写问题及三段式状态机各部分功能分析

2.5 数字电路设计实用技术

《硬件架构的艺术:数字电路的设计方法与技术》,该书的译者序:“…实用且有效…作者系统打造出一栋由实用技术组成的大厦……一切从解决问题出发,解释怎么做,并给出原理图和代码,以及解决方案……本书主要内容涉及时钟和复位、多时钟域设计、时钟分频器、低功耗设计技术、流水线技术、字写顺序、消抖技术和电磁兼容性等内容”。该书针对以上方面给出了很多设计策略和实用方法,或者说对很多模块的设计给出了推荐的 HDL 和电路,适合当作工具书手办阅读。该书罗列了很多应该避免的有隐患的(甚至仿真的时候不容易发现而实际运行时候容易出问题的种种情况)综合后的数字逻辑电路,并由此给出了很多应该避免的 HDL 写法,以及查看综合后电路是否有已知的隐患;并也给出了推荐的数字电路形式。该书在网上容易下载到电子版。


3 参考

p.s 本文一部分来自自己总结的经验,一部分来自参考。参考不是照搬,是选择我认为的精髓,每个人不同,所以推荐看一下这些参考,TA们都提供了很好的技巧。当然也许还有很多更好的资料,可以留言推荐。

p.s 正文中某些段落内容的旁边已经加注了参考和引用源,这里列出剩下的引用源。

  • 《FPGA设计-实战演练(逻辑篇)》 吴厚航 在“资源下载”栏可下载随书课件和源码。
  • 知乎 硅农。
  • Verilog设计的原则和技巧和IP核的使用。
  • 《基于FPGA的嵌入式开发与应用(徐光辉 程东旭 等编著)》。
  • 还可以参考但还没看的:
    • 《FPGA设计-实战演练(高级技巧篇)》王敏志。

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

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

相关文章

【Redis】搞懂过期删除策略和内存淘汰策略

1、过期删除策略 1.1、介绍 Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。 每当我们对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个过期字典…

独孤思维:做副业被起诉了

01 前些年,独孤做桃子虚拟。 带了一个学员。 她上架的宝贝,因为版权问题,不太合适,建议她下架。 但是无奈卖得好,她不舍得下架。 就这样,过了三个月,收到了起诉。 所以,做虚拟…

【Web】CTFSHOW 常用姿势刷题记录(全)

目录 web801 web802 web803 web804 web805 web806 web807 法一:反弹shell 法二:vps外带 web808 web809 web810 web811 web812 web813 web814 web815 web816 web817 web818 web819 web820 web821 web822 web823 web824 web825…

软考45-上午题-【数据库】-数据操纵语言DML

一、INSERT插入语句 向SQL的基本表中插入数据有两种方式: ①直接插入元组值 ②插入一个查询的结果值 1-1、直接插入元组值 【注意】: 列名序列是可选的,若是所有列都要插入数值,则可以不写列名序列。 示例: 1-2、插…

yolov8学习笔记(一)网络结构

一、yolov8.yaml YOLOv8详解 【网络结构代码实操】: YOLOv8详解 【网络结构代码实操】-CSDN博客文章浏览阅读10w次,点赞559次,收藏2.9k次。YOLOv8 算法的核心特性和改动可以归结为如下:提供了一个全新的 SOTA 模型,包…

Java实战:SpringBoot实现参数绑定与校验注解

本文将详细介绍Spring Boot中参数绑定与校验注解的使用,以提高RESTful API的安全性和用户体验。我们将探讨Spring Boot参数绑定的基本概念,以及如何使用Spring Boot的校验注解来验证请求参数。此外,我们将通过具体的示例来展示如何在Spring B…

PyMC运行过程中的一些warning信息处理

我在一开始运行一个简单的PyMC程序,遇到来了下面3个warning WARNING (pytensor.configdefaults): g not available, if using conda: conda install m2w64-toolchain WARNING (pytensor.configdefaults): g not detected! PyTensor will be unable to compile C-imp…

#LLM入门|Prompt#1.8_聊天机器人_Chatbot

聊天机器人设计 以会话形式进行交互,接受一系列消息作为输入,并返回模型生成的消息作为输出。原本设计用于简便多轮对话,但同样适用于单轮任务。 设计思路 个性化特性:通过定制模型的训练数据和参数,使机器人拥有特…

【ES】--Elasticsearch DSL的简单查询

目录 一、前言二、DSL的简单查询1、相关字段的设置2、match查询3、match_all查询4、term/terms等值查询5、wildcard、prefix、fuzzy查询6、正则(regexp)查询7、组合(bool)查询8、query_string查询9、match_phrase查询10、match_pharse_prefix查询11、match_bool_prefix查询12、…

蛇形矩阵3

题目描述 把数1,2,3,4,5,…,N*N按照“蛇形3”放入N*N矩阵的中,输出结果。 下面是N6的蛇形3的图示 输入格式 第一行1个正整数:N,范围在[1,100]。 输出格式 N行&#x…

Git笔记——3

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、合并模式和分支策略 二、bug分支 三、强制删除分支 四、创建远程仓库 五、克隆远程仓库_HTTPS和_SSH 克隆远程仓库_HTTPS 克隆远程仓库_SSH 六、向远程仓库…

【黑马程序员】3、TypeScript常用类型_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址:【黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 3、TypeScript常用类型 3.1 类型注解 …

【统计分析数学模型】聚类分析: 系统聚类法

【统计分析数学模型】聚类分析: 系统聚类法 一、聚类分析1. 基本原理2. 距离的度量(1)变量的测量尺度(2)距离(3)R语言计算距离 三、聚类方法1. 系统聚类法2. K均值法 三、示例1. Q型聚类&#x…

四六级成绩爬取代码原创

在六级成绩刚发布时,只需要通过学生姓名和身份证号便可以查询到成绩 据此,我们可以利用selenium框架对学生的成绩进行爬取 首先我们要建立一个excel表格,里面放三列(多几列也无所谓),第一列列名取为学生姓…

阿里妈妈按关键字或网址搜索商品 API(alimama.item_search)

alimama.item_search API是用于在阿里妈妈广告平台上按关键字或网址搜索商品的。这个API可以帮助广告主在投放广告时,根据关键词找到相关的商品信息,以便更精准地定位广告受众。 要使用这个API,你需要遵循以下步骤: 注册阿里妈妈…

LeetCode 2433.找出前缀异或的原始数组

给你一个长度为 n 的 整数 数组 pref 。找出并返回满足下述条件且长度为 n 的数组 arr : pref[i] arr[0] ^ arr[1] ^ … ^ arr[i]. 注意 ^ 表示 按位异或(bitwise-xor)运算。 可以证明答案是 唯一 的。 示例 1: 输入&#xf…

亿级用户在线状态查询:Redis高效解决方案

在拥有10亿用户的场景中,使用UUID作为用户标识符来统计在线状态是一个很好的选择,因为它可以确保每个用户的唯一性。针对UUID和在线状态统计,结合Redis,您可以采用以下策略: 1. 使用Redis的哈希表(Hashes&…

Python世界之运算符

一、算术运算符 以下假设变量: a10,b20: 运算符 描述 实例 加 - 两个对象相加 a b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结…

Seata Server 服务搭建

概述 Seata 分布式事务需要 Seata Seaver 支持,Seata Server在 架构中扮演着 事务管理器的角色。Seata 服务需要往 Nacos 注册中心注册、以及读取配置文件,因此 Seata 启动前需要部署 Nacos 环境。 安装包下载 下载地址: https://download.csdn.net/dow…

【《高性能 MySQL》摘录】第 2 章 MySQL 基准测试

文章目录 2.1 为什么需要基准测试2.2 基准测试的策略2.2.1 测试何种指标 2.3 基准测试方法2.3.1 设计和规划基准测试2.3.2 基准测试应该运行多长时间2.3.3 获取系统性能和状态2.3.4 获得准确的测试结果2.3.5 运行基准测试并分析结果2.3.6 绘图的重要性 2.4 基准测试工具…