FPGA基础知识关键点摘要

一.组合逻辑和时序逻辑的区别:
组合逻辑与输入直接实时相关,时序逻辑还必须在时钟上升沿出发后输出新值,有没有时钟输入是他们最大的区别!
组合时序容易出现竞争冒险现象出现亚稳态,时序逻辑不会出现,且更容易达到时序收敛
所以必须很好的掌握时序逻辑
设置不使用的 IO 为 为 in-tri 状态

RTL,Register Transfer Level,直译为寄存器转换级,顾名思义,也就是在这个级别下,要描述各级寄存器(时序逻辑中的寄存器),以及寄存器之间的信号的是如何转换的(时序逻辑中的组合逻辑)。
RTL 级代码

综合 逻辑电路

布局布线

电路

可综合的语法就是那些可以在电路上实现的语法…
行为级语法就是不能够实现在电路里面,却可以作为仿真验证的高层次语法!

reg型和wire型信号有什么本质的区别?
此问题较大,需常百度查查!

二.阻塞和非阻塞赋值:
=,<=
区别与联系?
在输入输出GPIO口电路中,用到assign,它的详细用法如下:
1.被assign赋值的信号定义为wire型,被always@(*)结构块下的信号定义为reg型,值得注意的是,这里的reg并不是一个真正的触发器,只有敏感列表为上升沿触发的写法才会综合为触发器,在仿真时才具有触发器的特性。

2.另外一个区别则是更细微的差别:举个例子,

wirea;

regb;

assigna = 1'b0;

always@(*)

b= 1'b0;

在这种情况下,做仿真时a将会正常为0,但是b却是不定态。这是为什么?verilog规定,always@(*)中的*是指该always块内的所有输入信号的变化为敏感列表,也就是仿真时只有当always@(*)块内的输入信号产生变化,该块内描述的信号才会产生变化,而像always@(*)b = 1'b0;

这种写法由于1'b0一直没有变化,所以b的信号状态一直没有改变,由于b是组合逻辑输出,所以复位时没有明确的值(不定态),而又因为always@(*)块内没有敏感信号变化,因此b的信号状态一直保持为不定态。事实上该语句的综合结果有可能跟assign一样(本人没有去尝试),但是在功能仿真时就差之千里了。

3.always@(*)描述组合逻辑时,begin和end之间是串行,一条一条语句执行;

而用assign则是并行,相当于描述的是连线
fifo.数据缓存!很重要!

时间单位:
1s=1000ms=1000000微秒=1000000000纳秒=1000000000000皮秒=10^15飞秒=10^18啊秒=10^21仄秒=10^24幺秒
波形窗口的时间单位是软件的设置项 和仿真时间单位没有关系
可以通过波形窗口菜单tools/windows preferences/grid & timeline中的time units进行修改

三.testbench的输入输出数据类型正好与被测模块相反??原因如下:
1、被测module中,输入为wire,输出为reg
输入信号是由模块外部决定的,输入数据的状态是变化的,与外部模块是通过线连接,所以用wire,不用reg
2、testbench中,输入为reg,输出为wire
所谓寄存器类型就是暂存一个数据,保持数据不变。
在testbenchb里定义的A,B输出给被测模块
因此对于testbench来说,A,B是输出,数据需要存储才能输出给被测module,用reg型
在testbenchb里定义的result用来接收从被测模块中输入的数据
因此对于testbenchb来说,result是输入,用导线与被测模块连接,用wire型
也就是说,tb的输出对应着被测模块的输入;tb的输入对应着被测模块的输出

注意:只要是always块内部的变量输出,都用reg型

四:寄存器打拍:

“打一拍”的目的很简单,就是为了FPGA中时序的正确性!!!!(了保证FPGA输入输出接口的时序,一般会要求将输入管脚首先打一拍再使用,输出接口也要打一拍再输出FPGA。将信号打一拍的方法是将信号通过一次寄存器,而且必须在IOB里面的寄存器中打一拍。因为,从FPGA的PAD到IOB里面的寄存器是有专用布线资源的,而到内部其他寄存器没有专用的布线资源。使用IOB里面的寄存器可以保证每次实现的结果都一样,使用内部其他寄存器就无法保证每次用的都是同一个寄存器且采用同样的布线。同时,为了使用输入输出延迟功能(Input / Output delay),也必须要求信号使用IOB里面的寄存器。)
“打一拍”具体是怎么通过FPGA实现的呢?如下

always @ (posedge Clk) //对输入信号打三拍
begin
inputs_reg1 <= inputs;
inputs_reg2 <= inputs_reg1;
inputs_reg3 <= inputs_reg2;
if (inputs_reg2 == 1'b1 && inputs_reg3 == 1'b0)
begin
...
end

FPGA基础知识关键点摘要的更多相关文章

  1. FPGA基础知识了解

    FPGA学习的一些误区 FPGA入门必看资源 FPGA百度百科 FPGA基础知识及其工作原理 高端设计工具为少有甚是没有硬件设计技术的工程师和科学家提供现场可编程门阵列(FPGA).无论你使用图形化设 ...

  2. 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装

    高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...

  3. FPGA基础知识1

    1.乘法 在FPGA中,乘法运算可以分为 1)信号与信号之间的运算,用乘法器核实现: 2)常数与信号之间的运算,利用移位及加减法实现. A x 16 = A左移4位: A x 20 = A x 16  ...

  4. FPGA基础知识8(FPGA静态时序分析)

    任何学FPGA的人都跑不掉的一个问题就是进行静态时序分析.静态时序分析的公式,老实说很晦涩,而且总能看到不同的版本,内容又不那么一致,为了彻底解决这个问题,我研究了一天,终于找到了一种很简单的解读办法 ...

  5. FPGA基础知识,应用,ASIC、ASSP区别(四)

    一.ASIC与ASSP区别? 专用应用集成电路( ASIC) 是一种由电子组件组成的集成电路,例如 :晶体管.电容器.电阻器等,这些组件被植入到晶元上 :晶元由硅或其他半导体材料组成,并可按照特定用途 ...

  6. HTML基础知识笔记摘要

    HTML互联网三大基石:1.HTML:显示数据2.HTTP:传输数据 http传输协议3.URL:定位数据协议://ip地址或主机名:端口/网络中的内容... HTML(hyper text make ...

  7. 如何学习FPGA?FPGA学习必备的基础知识

    如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识       FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...

  8. [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识

    [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...

  9. [源码解析] PyTorch 流水线并行实现 (1)--基础知识

    [源码解析] PyTorch 流水线并行实现 (1)--基础知识 目录 [源码解析] PyTorch 流水线并行实现 (1)--基础知识 0x00 摘要 0x01 历史 1.1 GPipe 1.2 t ...

随机推荐

  1. [03]java中的方法以及控制语句

    00 Java中的语句块 语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句.块确定了局部变量的作用域.块中的程序代码,作为一个整体,是要被一起执行的.块可以被嵌套在另一个块中,但 ...

  2. 纯css 实现大白

    首先是用html 语言来搭建框架 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  3. linux条件变量使用和与信号量的区别

    近来在项目中用到条件变量和信号量做同步时,这一块一直都有了解,但也一直没有总结,这次总结一下,给大家提供点参考,也给自己留点纪念. 首先,关于信号量和条件变量的概念可以自行查看APUE,我这直接把AP ...

  4. 致Java初学者

    致Java初学者 精心整理资料点击获取 前言 ​ 能看到这篇文章的朋友,应该都或多或少的了解Java,也许你现在是个菜鸟还在成长的路上.再此期间你一定遇到了很多困惑疑虑,对未来的学习方向感到很迷惑.作 ...

  5. .NET 在云原生时代的蜕变,让我在云时代脱颖而出

    .NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展.有了开源和跨平台这两个关键优先事项,我们就可以放心了.云原生对应用运行时的不同需求,说明一个.NET Core 在云原生时 ...

  6. linux 反选删除文件

    一.背景 历史原因自动部署程序的历史版本没有自动删除脚本.导致服务器没有空间了.但是又不能将所有的备份都删除. 所以要求只保留一个备份版本,把其他的删除. 二. 要求 要求:删除 除了 2017110 ...

  7. 【C_Language】---一份程序看懂C程序printf()的几种常用用法

    闲来继续巩固我的学习之路,今天略微整理了一下,C程序中Printf()的一些常用用法,虽然自己以前好像会,但是不够系统,今天大致整理了一些,先贴上来看看,以后在看到其他,继续补充,希望能帮到一些像我一 ...

  8. Fibnoccia 数列简单题

    In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, ...

  9. JS绘图

    https://www.highcharts.com.cn/demo/highcharts/ 百度的Echarts https://www.echartsjs.com/zh/index.html

  10. .Net Core2.*学习手册

    1.net core 基础知识解析(创建一个.net core网站)(视频录制) 1.1 Startup解析(没写) 1.2 目录结构分析(没写) 1.3 使用静态文件(没写) 1.4 Control ...