萌新的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:结合 Attention 重新思考移动端小模型中的基本模块 近年来,由于存储和计算资源的限制,移动应用的需求不断增加,因此,本文的研究对象是端侧轻量级小模型 (参数量一般在 10M 以下)。在众多小模型的设计中࿰…...
Laravel一些优雅的写法
1. 新增操作 // 原则,所有服务类只有一个public入口,或者多个public入口,但是他们做都是同一件事情 Class CreateService {// 创建类的入口, 根据dto去新建public function create(Dto $dto){// 先构建model对象, 不要在事务期间构建,减少事务…...
vue+three.js中使用Ammo.js
直接通过npm i ammo.js安装进webpack的项目里调用时,会出现如下报错: 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、验证是否安装成功(查看svn版本号) svnserve --version二、创建版本库 1、先建立目录,目录位置可修改 mkdir -p /var/svn cd /var/svn2、创建版本库,添加权限…...
SEO方案尝试--Nuxtjs项目基础配置
Nuxtjs 最新版 Nuxt3 项目配置 安装nuxtjs 最新版 Nuxt3 参考官网安装安装插件安装ElementPlus页面怎么跳转,路由怎么实现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、管程 什么是管程? 管理协调多个线程对共享资源的访问,是一种高级的同步机制。 有哪些管程模型? hansen:唤醒其他线程的代码…...
【计算机网络】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(Internet Protocol)和MAC(Media Access Control)帧是计算机网络中两个不同层次的概念&am…...
TouchGFX界面开发 | 按钮控件应用示例
按钮控件应用示例 按钮是最常见的部件之一,有了按钮就可以点击,从而响应事件,达到人机交互的目的。TouchGFX Designer内置了七种按钮部件: 下压按钮:能够在被释放时发送回调,按下和释放状态都关联了图像标…...
BSVD论文理解:Real-time Streaming Video Denoising with Bidirectional Buffers
BSVD是来自香港科技大学的一篇比较新的视频去噪论文,经实践,去噪效果不错,在这里分享一下对这篇论文的理解。 论文地址:https://arxiv.org/abs/2207.06937 代码地址:GitHub - ChenyangQiQi/BSVD: [ACM MM 2022] Real…...
共同见证丨酷雷曼武汉运营中心成立2周年
酷雷曼武汉运营中心2周年 全国合作商齐贺武汉公司2周年庆 2021年 作为酷雷曼辐射全国版图的又一重要据点 酷雷曼武汉运营中心 在“中国光谷”正式成立 沉浸式参观酷雷曼武汉公司 2年时间 尽管历经诸多客观因素的挑战 但后浪扬帆,依然交出了不斐的成绩 解决…...
一种单键开关机电路图
我们设计产品时,通常需要设计单键开关机功能。 单键开关机,通常需要单片机的两个IO完成,一个IO用于保持开机状态。另外,一个IO用于判定关机状态。 下面就是一种单键开关机电路原理图: 此单键开关电路已经在S2W-M02、S2…...
设计模式2、抽象工厂模式 Abstract Factory
解释说明:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 简言之,一个工厂可以提供创建多种相关产品的接口,而无需像工厂方法一样,为每一个产品都提供一个具体工厂 抽象工厂(Abstra…...
C++ 32盏灯,利用进制和 与 或 进行设计
一共32盏灯,设计一个灯光控制系统,其中 台球部8盏灯 桌游区8盏灯 酒吧区8盏灯 休息区8盏灯 满足以下功能 1、能够独立控制每一盏灯 2、能够一次性打开或关闭一个区域的全部灯光 3、能够获取各个区域的灯光打开关闭情况 4、能够一次性关闭打开的灯&#x…...
Ffmpeg-(1)-安装:ubuntu系统安装Ffmpeg应用
1、下载源码压缩包 https://ffmpeg.org/download.html 点击Download Source Code下载即可 解压: tar -xvjf ffmpeg-snapshot.tar.bz2 得到:ffmpeg目录 cd ffmpeg 或者:直接下 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 常见问题 上篇:第十章、质量…...
二叉树题目:二叉树剪枝
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:二叉树剪枝 出处:814. 二叉树剪枝 难度 4 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root,返回移除了所有…...
JAVA中使用CompletableFuture进行异步编程
JAVA中使用CompletableFuture进行异步编程 1、什么是CompletableFuture CompletableFuture 是 JDK8 提供的 Future 增强类,CompletableFuture 异步任务执行线程池,默认是把异步任 务都放在 ForkJoinPool 中执行。 在这种方式中,主线程不会…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
