FPGA学习回顾

2023-11-04

最近正在重新学习FPGA开发,把之前忽略的一些点记录下来,以便日后进行查阅。
1.Output 和Output reg的区别
这个问题的回答具体可以看这篇博客:https://blog.csdn.net/crjmail/article/details/105771612
总结来说,如果在一开始module中声明的是Output,那么最终需要用assign对Output进行说明。但是如果是Output reg的话,则不需要用assign对输出端口进行说明,对这个reg进行赋值即可。
2.RAM的分类
单口与双口的区别在于,单口只有一组数据线与地址线,因此读写不能同时进行。而双口有两组数据线与地址线,读写可同时进行。双口RAM分伪双口RAM(Xilinx称为Simple two-dual RAM)与双口RAM(Xilinx称为true two-dual RAM)。伪双口RAM,一个端口只读,另一个端口只写;而双口RAM两个端口都可以读写。
3.有限状态机的分类
分为Mealy有限状态机和Moore有限状态机,Mealy有限状态机的输出不仅与当前状态有关,也与输入信号有关,在RTL中会与输入信号有连接,Moore有限状态机的输出只与当前状态有关,与输入信号无关,输入信号只影响状态的改变不影响输出。一般Mealy采用一段式的写法,程序显得比较冗长但易读性好,Moore状态机一般采用三段式的写法,写起来比较直观但个人感觉易读性差点。
4.inout的使用
一般三态门的时候可能会用到inout,比如
双向IO:

module top(en, din, dout, bio) ;  
input  din  ;  
input  en ;  
output dout ;  
inout bio ;    
assign bio = en? din : 1'bz ;  
assign dout = bio ;      
endmodule 

5.参数的传递
在一个模块中如果有定义参数,在其他模块调用此模块时可以传递参数,并可 以修改参数,在 module 后用#()表示。
例如:
定义模块如下:

module rom 
 #(    
 parameter depth =15,    
 parameter width = 8     )    
 (    
  input [depth-1:0] addr , 
  input [width-1:0] data ,  
  output result  ) ;
 endmodule

调用模块:

module top();
wire [31:0] addr ;  
wire [15:0] data ;  
wire result ;
rom
#( 
 .depth(32),
 .width(16),
)
r1
(
.addr(addr) ,
.data(data),
.result(result)
);
endmodule

6.QuartusII下查看RTL原理图的方法
Tool>>Netlist Viewers>>RTL Viewers

7.quartus II 自动生成testbench
首先在assigmeng->settings->EDA Tool Settings里设置simulation为modelsim(我用的是Lite Edition,所以不知道为什么不能用Quartus+ModelSim进行仿真)
然后processing->start->start testbench template writer,再找到并打开testbench文件(*.vt),写好激励代码
把里面**@eachvec**这行代码给注释掉
不然编译可能不能通过
剩下的把initial和always补足就可以了
记得用vt文件进行simulation,用源文件会出错。

8.精确定时

 parameter T1US=5’d20;   //产生1us定时,20MHz频率
 always @(posedge CLK or negedge RSTn) 
 	if(!RSTn) 
 		begin Count_1US<=5d0;is1US<=1‘b0;end
 	else if(Count_1US==T1US)
 		beginCount_1US<=5’d0;is1US<=1‘b1;end
 	else 
 		beginCount_1US<=Count_1US+1'b1;is1US=1’b0;end 
 assign _1US=(Count_1US==T1US) ? 1‘b1:1’b0; 

_1us被拉高时时间为0.95us
is1us被拉高时时间为1us
这就是由组合逻辑驱动和由寄存器驱动的时间差
如果用1us去驱动led的话,由于<=延后赋值的关系,时间将不是1us,所以这个时候可以考虑用_1us。

如果仅想产生1us定时,直接用(1E-6)× 20M=20,然后把计数器设为20即可,不用设置成20-1=19.

9.时序滞后1个时钟的解决方法
1.可以把延时赋值<=改成即时赋值=。
2.倍频模块的频率,如2倍频,4倍频。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA学习回顾 的相关文章

  • FPGA面试真题解析(3)

    9 寄存器的Tsu 建立时间 是如何定义的 硬件逻辑实习岗 A 在时钟沿到来之后数据保持稳定的时间 B 在时钟沿带来前后数据都需要保持稳定的时间 C 在整个时钟周期数据保持稳定的时间 D 在时钟沿到来之前数据保持稳定的时间 解析 考察数字电
  • cdc多bit信号-握手处理

    对于多bit数据跨时钟 各个bit之间路径延迟不一样 源时钟域给的数据是2 b11 目的时钟域采样到的数据可能2 b10 因此两级触发器对于单bit数据跨时钟是可以用的 但是对于多bit数据跨时钟就会出错 握手处理的关键是利用源的时钟req
  • squirrel-foundation状态机的使用细节

    上一篇文章介绍了stateless4j spring statemachine以及squirrel foundation三款状态机引擎的实现原理 以及我为何选择squirrel foundation作为解决方案 本文主要介绍一下项目中如何使
  • Xilinx平台SRIO介绍(二)SRIO IP核基础知识

    使用SRIO IP核必须掌握的基础知识 理解了这篇 剩下的只是代码罢了 汇总篇 Xilinx平台SRIO介绍 汇总篇 目录 前言 SRIO RapidIO GT 有什么关系
  • 最详细的Vivado安装教程

    V i v a d o 安 装
  • 【Xilinx】SynchronousInterruptHandler错误排查笔记

    SynchronousInterruptHandler错误排查笔记 一 ArmV8的异常处理 二 64位lscript ld的修改 三 asm vectors S的修改 四 SynchronousInterruptHandler函数解析 五
  • Verilog的基础知识

    Verilog的基本介绍 硬件描述语言发展至今已有二十多年历史 当今业界的标准中 IEEE标准 主要有VHDL和Verilog HDL 这两种硬件描述语言 一个设计往往从系统级设计开始 把系统划分成几个大的基本的功能模块 每个功能模块再按一
  • 输入延时(Input Delay)与输出延时(Output Delay)

    一 设置输入延时 Input Delay 1 不同的路径需要使用不同的约束 2 输入延时的定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input d
  • 从零开始zynq linux AXI DMA传输

    本文从0开始叙述过程 使用的工具为vivado2016 4 sdk也是2016 4 准备工作 首先下载如下的目标文件 1 下载xilinx官方的bootloader文件 git clone https github com Xilinx u
  • 【PIPE】流水线设计中的基本模块

    大概分成以下几节 1 概述及协议 2 valid forward valid超前 3 bubble collapse 消除气爆 4 input output skid 不知中文怎么说 5 pipe halt 流水停顿 6 idle pres
  • FPGA学习笔记(一)__电平知识

    常见电平标准 文章目录 1 TTL电平标准 2 LVTTL电平标准 1 LVTTL3V3 2 LVTTL2V5 3 CMOS电平标准 4 LVCOMS电平标准 1 LVCOMS3V3 2 LVCOMS2V5 3 LVCOMS1V8 4 LV
  • Spartan-3E 上的随机数生成

    我需要在 Spartan 3E FPGA 上为我的遗传算法生成伪随机数 并且我想在 verilog 中实现它 您能给我任何关于此的指示吗 当然 Adam 的随机生成器是不可合成的 您必须显式创建一个LFSR 以下示例可能会有所帮助 它是一个
  • 基于FPGA的简易BPSK和QPSK

    1 框图 2 顶层 3 m generator M序列的生成 输出速率为500Kbps 4 S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据 就有4个象限 5 my pll是生成256M的时钟作为载波 因为s
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • VHDL门控时钟如何避免

    我收到了避免使用门控时钟的建议 因为它可能会导致松弛和时序限制问题 但我想问一下我可以认为什么是门控时钟 例如 此代码对时钟进行门控 因为 StopCount 对它进行门控 process ModuleCLK begin if rising
  • PyOpenCL 中的时间测量

    我正在 FPGA 和 GPU 中使用 PyOpenCL 运行内核 为了测量执行所需的时间 我使用 t1 time event mykernel queue c width c height block size block size d c
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • 赋值语句中的“others=>'0'”是什么意思?

    cmd register process rst n clk begin if rst n 0 then cmd r lt others gt 0 elsif clk event and clk 1 then cmd r lt end if
  • 从 OpenCV 代码到 FPGA 代码的转换是否比 Matlab 代码更容易? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想做一个关于图像处理的项目 我想知道如果我想在FPGA上实现这个项目 我应该在第一阶段选择Matla

随机推荐

  • 【算法】高精度算法:加减乘除(全)

    看的视频在这里 题目 加法 减法 乘法 除法 高 低 加法 思想 用数组模拟高精度 算法核心 c i a i b i c i 1 c i 10 c i c i 10 注意 是c i a i b i 是累加 例题 求a b a b范围都 lt
  • 学前STEM课堂的3个入口

    在STEM活动开始前 教师要以观察性问题来吸引幼儿的注意力 引导幼儿关注 是什么 的问题 进而促使幼儿与教师开始对话和一起探索 格物斯坦小坦克带大家一起看看学前stem课堂的3个入口 是什么 的问题关注的是正发生于幼儿眼前的事情 即幼儿所注
  • 通过GetVersionEx和ntoskrnl.exe获取操作系统版本号

    include
  • selenium启动Chrome配置参数问题

    每次当selenium启动chrome浏览器的时候 chrome浏览器很干净 没有插件 没有收藏 没有历史记录 这是因为selenium在启动chrome时为了保证最快的运行效率 启动了一个裸浏览器 这就是为什么需要配置参数的原因 但是有些
  • PageHelper原理深度剖析(集成+源码)

    相信大家在开发过程中都用到过数据分页吧 那么问题来了 说出你平时用到的几种分页方式吧 而我在平时的工作中用到最多的应该属PageHelper这个分页插件了 此处附上官网地址 https pagehelper github io 首先我们来说
  • 自定义结构-Tab切换

    自定义结构 Tab切换 前言 在搭建页面的时候 可能会需要多块区域进行tab切换 这时候需要规范化封装一个结构 只需要一段js 可重复且多处使用 1 tab样式 2 js代码 function hover change on mouseen
  • 微信、微博、Facebook、Twitter等社交媒体分享方案探索

    一 Web方式 新浪微博 http service weibo com share share php count 表示是否显示当前页面被分享数量 1显示 可选 允许为空 url 将页面地址转成短域名 并显示在内容文字后面 可选 允许为空
  • 【数据结构实验】单链表实验

    实验一 单链表实验 1 实验目的 熟悉单链表的定义 单链表的建立方法及相关基本操作 理解单链表的基本思想 能够根据实际情况选择合适的存储结构 2 实验内容 1 利用头插法或尾插法建立单链表 2 对已建立的单链表实现插入 删除等基本操作 3
  • BoolToVisibility的转换器

    代码 ValueConversion typeof bool typeof Visibility public class BoolToVisibilityConverter IValueConverter static BoolToVis
  • SpringBoot 提示:Cannot construct instance of `com.... (no Creators, like default construct, exist)

    原因 在该实体类 Paymen java 中构造了一个方便实例化该类的有参构造函数 导致JVM不会添加默认的无参构造函数 而jackson的反序列化需要无参构造函数 因此报错 解决办法 在该实体类 Paymen java 中添加了一个无参构
  • 实现div里的img图片水平垂直居中

    body结构 div img src 1 jpg alt haha div 方法一 将display设置成table cell 然后水平居中设置text align为center 垂直居中设置vertical align为middle
  • 计算机PS个人规划目标,这里有一份PS个人陈述写作规划

    原标题 这里有一份PS个人陈述写作规划 本篇内容可以教你如何包装自己背景 或者说能够让自己的整个文书在众多申请者中呈现出比较不一样的色彩 前期构思 PS全称Personal Statement 个人陈述 它是我们整个文书里面的核心部分 在写
  • 帆软移动端,展示顺序混乱

    取消掉 手机重布局 也可 帆软移动端展示顺序混乱 设计器中靠下的控件 但是在界面中展示靠上 原因 设计器中body的移动端属性 展示顺序没有调整 解决办法
  • 服务器高可用实现文档 百度网盘,分布式文件系统元数据服务器高可用设计与实现...

    摘要 伴随全球数据量的飞速增长和数据密集型应用的不断增加 分布式文件系统得到越来越广泛的应用 目前主流的分布式文件系统均采用将元数据与数据分离管理的机制 将命名空间和文件元数据保存在元数据节点 而数据保存在数据节点 很显然 元数据节点的高可
  • 电脑复制粘贴快捷键_Win10小技巧:剪贴板让「复制粘贴」效率加倍

    如果需要连续复制许多文字 普遍作法都是逐一按下 Ctrl C 和 Ctrl V 重复好多次 其实只要学会使用剪贴板 就能大幅加快工作效率 以下分享 Win 10 小技巧 让你的复制粘贴更有效率 Win 10 小技巧 复制粘贴 效率加倍 在
  • navicat cannot create oci 解决

    1 新建连接 2 连接时候报错 3 解决 3 1 选择对应版本OCI 3 1 配置OCI 工具 gt 选项
  • Mask Rcnn详解

    Mask RCNN 算法详解 Mask RCNN介绍 模型结构及数据变化推理 backbone FNP RPN ROI Align 预测头 box class mask box class分支 mask分支 模型训练流程 模型推理 测试 流
  • ubuntu下载Android 源码参考网址

    清华大学开源软件镜像站 HOME EVENTS BLOG RSS PODCAST 代号 标记和细分版本号
  • A记录和CNAME记录有什么区别?

    在使用高防DNS时 会发现有A记录 CNAME等多种域名记录 他们填写的规则和作用都不相同 那么下面一起来看看什么是A记录 CNAME解析 什么是A记录 A Address 记录是用来指定主机名 或域名 对应的IP地址记录 用户可以将该域名
  • FPGA学习回顾

    最近正在重新学习FPGA开发 把之前忽略的一些点记录下来 以便日后进行查阅 1 Output 和Output reg的区别 这个问题的回答具体可以看这篇博客 https blog csdn net crjmail article detai