当前位置: 首页 > news >正文

萌新的FPGA学习绪论-1

萌新的FPGA学习绪论-1

其实很多的课和内容都是相通的
我在跑完单周期的RiscV时候 虽然最后还差点意思但是基本的逻辑实现没有特别大的问题
过两天写一个Spec文档说明一下
由于开始一个新的设计 所以对于RiscV的设计暂时放到一边希望我能在接下来的时间内尽快完成
暂时不说这个了 先开始讲述 最近要实现的SOC设计 将SD卡内的文件读取到FPGA板子上 再通过内部的逻辑完成功能 其实有很多关键的技术节点
比如在SD卡上如何用C语言控制串口 作为一个简单的MCU发送数据
而在FPGA上如何通过verilog实现电路的连接和功能模块的编写
对于初学者的我是一个很大的考验。
上面的絮絮叨叨结束 ,接下来开始讲述。 我先通读一遍参考手册,因为我没用过FPGA的板子 也是从头学起。

1、顶层文件对象+功能+top比如:video_oneline_top
2、逻辑控制文件介于顶层和驱动层文件之间对象+ctr比如:ddr_ctr.v
3、驱动程序命名对象+功能+dri比如:lcd_dri.v、uart_rxd_dri.v
4、参数文件命名对象+para比如:lcd_para.v
5、模块接口命名:文件名+u比如 lcd_dir lcd_dir_u(…)
6、模块接口命名:特征名+文件名+u比如 mcb_read c3_mcb_read_u
8、端口注释input Video_vs_i,//输入场同步入
9、信号命名命名总体规则:对象+功能(+极性)+特性
10、时钟信号 对象+功能+特性比如:phy_txclk_i、sys_50mhz_i
11、复位信号对象+功能+极性+特性比如:phy_rst_n_i、sys_rst_n_i
12、延迟信号对象+功能+特性 1+特征 2比如:fram_sync_i_r0、fram_sync_i_r1
13、特定功能计数器 对象+cnt比如:line_cnt、div_cnt0、div_cnt1功能+cnt比如:wr_cnt、rd_cnt
14、一般计数器cnt+序号用于不容易混淆的计数比如:cnt0、cnt1、cnt2
15、 时序同步信号对象+功能+特性比如:line_sync_i、fram_sync_i
16、 使能信号功能+en比如:wr_en、rd_en对象+功能+en比如:fifo_wr_en、mcb_wr_en
编写逻辑

module detect_3( input clk_i, input rst_n_i,  output out_o ); reg out_r; 
//状态声明和状态编码 
reg [1:0] Current_state;reg [1:0] Next_state;parameter [1:0] S0=2'b00;parameter [1:0] S1=2'b01;parameter [1:0] S2=2'b10;parameter [1:0] S3=2'b11;  
//时序逻辑:描述状态转换 
always@(posedge clk_i)begin if(!rst_n_i)Current_state<=0;else Current_state<=Next_state;end  //组合逻辑:描述下一状态always@(*)begincase(Current_state) S0:  
Next_state = S1; 
S1:
Next_state = S2; 
S2:Next_state = S3;S3:Next_state = Next_state; 
default :Next_state = S0; 
endcase end //输出逻辑:让输出 out,经过寄存器 out_r 锁存后输出,消除毛刺always@(*)begin 
case(Current_state) 
S0,S2:  out_r<=1'b0; 
S1,S3:  out_r<=1'b1; 
default : out_r<=out_r; 
endcase 
end 
assign out_o=out_r; 

三段式状态机在第一个 always 模块采用同步时序逻辑方式描述状态转移,第二个 always 模块采用组合逻辑方
式描述状态转移规律,第三个 always 描述电路的输出。通常让输出信号经过寄存器缓存之后再输出,消除电路毛
刺。这种状态机也是比较推崇的,主要是由于维护方便,组合逻辑与时序逻辑完全独立。

我其实不太会写tb文件 我觉得tb好难啊

tb用的很多都是不可综合的语句
/*----------------------------------------------------------------仿真控制语句及系统任务描述----------------------------------------------------------------*/$stop //停止运行仿真,modelsim 中可继续仿真
$stop(n) //带参数系统任务,根据参数 0,1 或 2 不同,输出仿真信息
$finish //结束运行仿真,不可继续仿真
$finish(n) //带参数系统任务,根据参数 0,1 或 2 不同,输出仿真信息//0:不输出任何信息
//1:输出当前仿真时刻和位置
//2:输出当前仿真时刻、位置和仿真过程中用到的 memory 以及 CPU 时间的统计
$random //产生随机数
$random % n //产生范围-n 到 n 之间的随机数
{$random} % n //产生范围 0 到 n 之间的随机数/*----------------------------------------------------------------仿真终端显示描述----------------------------------------------------------------*/
$monitor //仿真打印输出,大印出仿真过程中的变量,使其终端显示/
*$monitor($time,,,"clk=%d reset=%d out=%d",clk,reset,out);*/
$display //终端打印字符串,显示仿真结果等/*
$display(” Simulation start ! ");
$display(” At time %t,input is %b%b%b,output is %b",$time,a,b,en,z);
$time //返回 64 位整型时间
$stime //返回 32 位整型时间
$realtime //实行实型模拟时间

基本的知识讲述完毕 接下来讲述的是
单个简单的设计
我们现在先确定一下vivado的基本功能
在这里插入图片描述

关键的部分是
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

添加管教约束文件
管教约束文件就是.xdc文件
管脚约束文件,即.xdc 文件,一般情况,生成后会放在 Miz_sys.srcs\constrs_1 文件夹中,这里的“Miz_sys”对应的是创建工程的名称。添加管脚约束有三种方法,分别是手动新建 XDC PIN 脚约束文件、直接加入已经写好的约束文件、综合后添加管脚约束,用户根据实际情况选择其中一种方法,可以提高工作效率。

如何编译并产生bit文件
在这里插入图片描述
在这里插入图片描述
我们对于程序的固化的一个准备
如果我们想要固化一个ZYNQ程序,以及为这个程序做一个镜像文件该如何处理? 对于这个问题 我想到了之前的SOC任务 在PL PS端的实现
在这里插入图片描述
我们准备固化ZYNQ的程序
确定PL部分的bit的文件 PS部分的elf文件
我们在此处介绍一下zynq从SD卡的启动过程
zynq和大多数arm启动过程一样,分为三个阶段 阶段0 阶段1 阶段2
阶段 0:即传统的 BootROM 过程。ZYNQ 芯片 ROM 里面固化了一段不可修改的程序,只要 ZYNQ 一上电,这
段程序就会执行。它将对 ZYNQ 的 NAND、NOR、SD 等基本外设控制器进行初始化。把 SD 卡这类易失的存储器
件初始化后,就会把其中的程序拷贝到 ZYNQ 的 OCM(On-chip memory)。这个被拷贝到片上 RAM 执行的程序
就是我们今天要制作的文件——BOOT.bin。
阶段 1:BOOT.bin 加载到 OCM 上开始执行。 BOOT.bin 由 FSBL.elf+该工程.bit+该工程.elf 构成。阶段 1 要做的
就是:首先配置 PS 部分,PS 完成初始化后,会去配置 PL 部分,最后去加载阶段 2 的代码。
阶段 2:这一阶段是可选的,主要是为了完成 Linux 系统启动过程。本次实验暂时不需要。

关于ZYNQ启动模式的选择
这里有个疑问,众所周知 ZYNQ 具有多种启动方式:NOR, NAND, Quad-SPI, SD Card 以及 JTAG 。ZYNQ 如何判断到底从哪里启动呢?实际上,当上电后,ZYNQ 会根据模式管脚的设定,选用 boot 的方式。
我拿在手里的板子是米联客 他有两种启动方式 一种是在SD中启动
另一种是QSPI FLASH启动 开发板通过拨码开关对管教进行约束 改变启动模式

相关文章:

萌新的FPGA学习绪论-1

萌新的FPGA学习绪论-1 其实很多的课和内容都是相通的 我在跑完单周期的RiscV时候 虽然最后还差点意思但是基本的逻辑实现没有特别大的问题 过两天写一个Spec文档说明一下 由于开始一个新的设计 所以对于RiscV的设计暂时放到一边希望我能在接下来的时间内尽快完成 暂时不说这个…...

目标检测算法改进系列之Backbone替换为EMO

EMO&#xff1a;结合 Attention 重新思考移动端小模型中的基本模块 近年来&#xff0c;由于存储和计算资源的限制&#xff0c;移动应用的需求不断增加&#xff0c;因此&#xff0c;本文的研究对象是端侧轻量级小模型 (参数量一般在 10M 以下)。在众多小模型的设计中&#xff0…...

Laravel一些优雅的写法

1. 新增操作 // 原则&#xff0c;所有服务类只有一个public入口,或者多个public入口&#xff0c;但是他们做都是同一件事情 Class CreateService {// 创建类的入口, 根据dto去新建public function create(Dto $dto){// 先构建model对象, 不要在事务期间构建&#xff0c;减少事务…...

vue+three.js中使用Ammo.js

直接通过npm i ammo.js安装进webpack的项目里调用时&#xff0c;会出现如下报错&#xff1a; ERROR in ./node_modules/ammo.js/ammo.js 1:1683-1696 Mo…...

【k8s】kubectl命令详解

文章目录 命令行工具 kubectl在slave下配置kubectl资源操作创建对象 API概述类型访问控制认证授权 废弃API说明 资源管理资源管理介绍资源管理方式命令式对象管理命令式对象配置创建yaml文件创建资源查看资源删除资源 声明式对象配置 kebectl在node节点上运行查看每种资源的可配…...

Centos 7 部署SVN服务器

一、安装SVN 1、安装Subversion sudo yum -y install subversion2、验证是否安装成功&#xff08;查看svn版本号&#xff09; svnserve --version二、创建版本库 1、先建立目录&#xff0c;目录位置可修改 mkdir -p /var/svn cd /var/svn2、创建版本库&#xff0c;添加权限…...

SEO方案尝试--Nuxtjs项目基础配置

Nuxtjs 最新版 Nuxt3 项目配置 安装nuxtjs 最新版 Nuxt3 参考官网安装安装插件安装ElementPlus页面怎么跳转&#xff0c;路由怎么实现404页面该怎么配置配置 网页的title 安装nuxtjs 最新版 Nuxt3 参考官网安装 安装插件 安装ElementPlus 安装 Element Plus 和图标库 # 首先&…...

【算法分析与设计】动态规划(上)

目录 一、学习要点二、算法总体思想三、动态规划基本步骤四、矩阵连乘问题4.1 完全加括号的矩阵连乘积4.2 穷举法4.3 动态规划4.3.1 分析最优解的结构4.3.2 建立递归关系4.3.3 计算最优值4.3.4 用动态规划法求最优解 五、动态规划算法的基本要素5.1 最优子结构5.2 重叠子问题5.…...

Java多线程篇(6)——AQS之ReentrantLock

文章目录 1、管程2、AQS3、ReentrantLock3.1、lock/unlock3.1.1、lock3.1.2、unlock 3.2、一些思考 1、管程 什么是管程&#xff1f; 管理协调多个线程对共享资源的访问&#xff0c;是一种高级的同步机制。 有哪些管程模型&#xff1f; hansen&#xff1a;唤醒其他线程的代码…...

【计算机网络】IP协议第二讲(Mac帧、IP地址、碰撞检测、ARP协议介绍)

IP协议第二讲 1.IP和Mac帧2.碰撞检测2.1介绍2.2如何减少碰撞发生2.3MTU2.4一些补充 3.ARP协议3.1协议介绍3.2报文格式分析 1.IP和Mac帧 IP&#xff08;Internet Protocol&#xff09;和MAC&#xff08;Media Access Control&#xff09;帧是计算机网络中两个不同层次的概念&am…...

TouchGFX界面开发 | 按钮控件应用示例

按钮控件应用示例 按钮是最常见的部件之一&#xff0c;有了按钮就可以点击&#xff0c;从而响应事件&#xff0c;达到人机交互的目的。TouchGFX Designer内置了七种按钮部件&#xff1a; 下压按钮&#xff1a;能够在被释放时发送回调&#xff0c;按下和释放状态都关联了图像标…...

BSVD论文理解:Real-time Streaming Video Denoising with Bidirectional Buffers

BSVD是来自香港科技大学的一篇比较新的视频去噪论文&#xff0c;经实践&#xff0c;去噪效果不错&#xff0c;在这里分享一下对这篇论文的理解。 论文地址&#xff1a;https://arxiv.org/abs/2207.06937 代码地址&#xff1a;GitHub - ChenyangQiQi/BSVD: [ACM MM 2022] Real…...

共同见证丨酷雷曼武汉运营中心成立2周年

酷雷曼武汉运营中心2周年 全国合作商齐贺武汉公司2周年庆 2021年 作为酷雷曼辐射全国版图的又一重要据点 酷雷曼武汉运营中心 在“中国光谷”正式成立 沉浸式参观酷雷曼武汉公司 2年时间 尽管历经诸多客观因素的挑战 但后浪扬帆&#xff0c;依然交出了不斐的成绩 解决…...

一种单键开关机电路图

我们设计产品时&#xff0c;通常需要设计单键开关机功能。 单键开关机&#xff0c;通常需要单片机的两个IO完成&#xff0c;一个IO用于保持开机状态。另外&#xff0c;一个IO用于判定关机状态。 下面就是一种单键开关机电路原理图&#xff1a; 此单键开关电路已经在S2W-M02、S2…...

设计模式2、抽象工厂模式 Abstract Factory

解释说明&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定他们具体的类。 简言之&#xff0c;一个工厂可以提供创建多种相关产品的接口&#xff0c;而无需像工厂方法一样&#xff0c;为每一个产品都提供一个具体工厂 抽象工厂&#xff08;Abstra…...

C++ 32盏灯,利用进制和 与 或 进行设计

一共32盏灯&#xff0c;设计一个灯光控制系统&#xff0c;其中 台球部8盏灯 桌游区8盏灯 酒吧区8盏灯 休息区8盏灯 满足以下功能 1、能够独立控制每一盏灯 2、能够一次性打开或关闭一个区域的全部灯光 3、能够获取各个区域的灯光打开关闭情况 4、能够一次性关闭打开的灯&#x…...

Ffmpeg-(1)-安装:ubuntu系统安装Ffmpeg应用

1、下载源码压缩包 https://ffmpeg.org/download.html 点击Download Source Code下载即可 解压&#xff1a; tar -xvjf ffmpeg-snapshot.tar.bz2 得到&#xff1a;ffmpeg目录 cd ffmpeg 或者&#xff1a;直接下 wget http://www.ffmpeg.org/releases/ffmpeg-5.1.tar.gztar -zx…...

系统集成|第十一章(笔记)

目录 第十一章 项目人力资源管理11.1 项目人力资源管理的定义及有关概念11.2 主要过程11.2.1 编制项目人力资源管理计划11.2.2 组建项目团队11.2.3 建设项目团队11.2.4 管理项目团队 11.3 现代激励理论11.4 项目经理所需具备的影响力11.5 常见问题 上篇&#xff1a;第十章、质量…...

二叉树题目:二叉树剪枝

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉树剪枝 出处&#xff1a;814. 二叉树剪枝 难度 4 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root&#xff0c;返回移除了所有…...

JAVA中使用CompletableFuture进行异步编程

JAVA中使用CompletableFuture进行异步编程 1、什么是CompletableFuture CompletableFuture 是 JDK8 提供的 Future 增强类&#xff0c;CompletableFuture 异步任务执行线程池&#xff0c;默认是把异步任 务都放在 ForkJoinPool 中执行。 在这种方式中&#xff0c;主线程不会…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...