0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习笔记

FPGA设计论坛 ? 来源:FPGA设计论坛 ? 2025-03-27 09:34 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1.名词解释:

FPGA:现场可编程门阵列,一般工艺SRAM(易失性),所以要外挂配置芯片。

CPLD:复杂可编程逻辑器件,一般工艺Flash(不易失)。

ASIC:专用集成电路

SOC:片上系统

SOPC:片上可编程系统

2.Verilog语法类:

①Verilog两大数据类型:一类是线网类型,另一类是寄存器类型。

线网类型表示硬件电路元件之间实际存在的物理连线,有很多种:wire、tri、wor等等,当然日常使用wire最多,其他的都没遇到过。

寄存器类型表示一个抽象的数据存储单元,只能在initial或always内部被赋值,并且变量的值将从一条赋值语句保持到下一条赋值语句。有5种:reg、time(64位无符号的时间变量)、integer(32位带符号的整数型变量)、real/realtime(64位带符号的实数型变量)。reg用的最多。

②Verilog建模方式:结构化描述方式、数据流描述方式、行为描述方式、混合描述方式。

结构描述是指通过调用逻辑原件,描述它们之间的连接来建立逻辑电路的verilog HDL模型。这里的逻辑元件包括内置逻辑门、自主研发的已有模块、商业IP模块。

数据流描述是指根据信号之间的逻辑关系,采用持续赋值语句描述逻辑电路的方式。通过观察是否使用assign赋值语句可以判断是否有数据流描述。

行为描述是指只注重实现的算法,不关心具体的硬件实现细节。这与C语言编程非常类似。通过观察是否使用initial 或always语句块可以判断是否有行为描述。

混合描述是指以上几种描述方法都存在的一种描述方式。具体在一个工程中,不可能只是用单独哪一种描述方式,一般都是各种描述方式的混合。

3.VHDL相对于Verilog不能描述的层级?

网上有段话说的是:Verilog在其门级描述的底层,即晶体管开关级的描述方面比VHDL更强一些,所以即使使用VHDL的设计环境,在底层实质上也会由Verilog描述的器件库所支持。

Verilog较为适合系统级、算法级、RTL级、门级、开关级的设计,而对于特大型(千万门级以上)的系统设计,则VHDL更为适合。(VHDL比较严谨,而Verilog可以花式编码)

所以,VHDL不能描述开关级。

4.阻塞与非阻塞的区别:

对于代码:

 1 //blocking;
 2 begin
 3     B = A;
 4     C = B + 1;
 5 end
 6 //non-blocking;
 7 begin
 8     B <= A;
 9     C <= B + 1;
10 end

在always语句内部过程赋值语句有两种,阻塞赋值语句与非阻塞赋值语句。

两者主要区别是完成赋值操作的时间不同,阻塞赋值语句的赋值操作是立即执行的,即执行后一句的时候,前一句的赋值已经完成;而非阻塞赋值语句的赋值操作到结束顺序语句块时才完成赋值操作,即赋值操作完成后,语句块的执行也就结束了。即阻塞是串行执行,非阻塞是并行执行的。对于上述代码,阻塞赋值中相当于C = A + 1;非阻塞赋值中B先前的值被A替代,但C的值是B先前值加1。

5.亚稳态是什么怎么解决亚稳态?

触发器输入端口的数据在时间窗口内发生变化,会导致时序违例。触发器的输出在一段时间内徘徊在一个中间电平,既不是0也不是1。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。

触发器由于物理工艺原因,数据并不是理想化的只要触发沿时刻不变即可。触发器有固定的建立时间,保持时间。

建立时间:在时钟有效沿到来前数据需要稳定的时间。

保持时间:在时钟有效沿之后数据还需要保持不变的时间。

5e3ed67a-0886-11f0-9310-92fbcf53809c.png

后果:会给设计带来致命的功能故障。

一般来说,信号是在异步信号,跨时钟域,复位电路中产生亚稳态。

解决方式:

1.单比特信号:

①采用同步器同步,低速设计打两拍,高速设计可能需要打三拍。

5e4cc6cc-0886-11f0-9310-92fbcf53809c.png

低速到高速时钟域,低速信号一般能被高速时钟域采到甚至多次。但高速时钟域到低速时钟域就不太好办了:

②闭环解决方案:采用握手反馈信号,这会导致延时开销大。

③开环解决方案:把信号展宽,至少为采样T的1.5倍。这样至少能采到一次。

2.多比特信号:

传递多比特信号,普通同步器就没啥卵用了,因为多比特信号偶发数据变化歪斜,导致采到的不一定是正确数据。

①多比特信号融合:把多比特信号转换为单比特信号,再用同步器同步。

②多周期路径规划:数据不需要同步,至需要同时传递一个同步的使能信号到接收时钟域即可,使能信号没被同步到接收时钟域并被识别之前数据不被采集。即在信号某个沿产生同步脉冲指示信号。

③异步fifo。

6.竞争冒险是什么,怎么解决竞争冒险?

在组合电路中,当输入信号改变状态时,输出端可能出现虚假信号(过渡干扰脉冲),这对电路来说是不利的。

数字电路中,任何一个门电路只要有两个输入信号同时向相反方向变化(由01变成10,或者相反),其输出端就可能产生干扰脉冲。

信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,英文名Race;由于竞争现象所引起的电路输出发生瞬间错误的现象,就称之为冒险,英文名Hazard或者Risk。

有竞争不一定有冒险,但出现了冒险就一定存在竞争。

如下图的简单电路,由于门电路的延时,A非相对于A信号会滞后一丢丢(时间由工艺决定),这就会导致输出产生一个干扰脉冲。

5e58e254-0886-11f0-9310-92fbcf53809c.png

更现实一点,对于一个与门:

5e6086bc-0886-11f0-9310-92fbcf53809c.png

解决方式:

1.引入封锁脉冲:引入负脉冲,在输入信号发生竞争的时间内,把可能产生的干扰脉冲的门锁住。

封锁脉冲的宽度不应小于过渡时间且与输出信号转换同步。

缺点:脉冲宽度和产生时间有严格要求。

5e708cec-0886-11f0-9310-92fbcf53809c.png

2.引入选通脉冲:在电路状态稳定后,再选通输出。

缺点:脉冲宽度和产生时间有严格要求。

5e828e74-0886-11f0-9310-92fbcf53809c.png

3.引入滤波电容:输出端并接一个不大的滤波电容

缺点:输出波形边沿变坏。

5e8d88d8-0886-11f0-9310-92fbcf53809c.png

4.修改逻辑设计,增加冗余项:

对于给定的逻辑 Y=AB+?C,当BC都为1的时候,若A值改变,则会发生竞争。所以可以添加冗余项:

Y=AB+?C+BC

分析有无竞争冒险:画出函数的卡诺图,检查有无几何相邻的逻辑项,有则可能产生竞争冒险。

7.你使用的器件名称含义?

5e9ff702-0886-11f0-9310-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1646

    文章

    22069

    浏览量

    619709
  • 集成电路
    +关注

    关注

    5430

    文章

    12139

    浏览量

    368940
  • Verilog
    +关注

    关注

    29

    文章

    1367

    浏览量

    112417
  • 触发器
    +关注

    关注

    14

    文章

    2041

    浏览量

    62230
  • 可编程逻辑器件

    关注

    5

    文章

    145

    浏览量

    30649

原文标题:FPGA基础

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FPGA学习笔记:逻辑单元的基本结构

    逻辑单元在FPGA器件内部,用于完成用户逻辑的最小单元。
    的头像 发表于 10-31 11:12 ?2717次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:逻辑单元的基本结构

    Xilinx FPGA学习笔记

    方法1.通过状态机来实现,通过verilog控制FPGA,让它该快的时候快,该慢的时候慢。
    的头像 发表于 11-02 09:48 ?1205次阅读
    Xilinx <b class='flag-5'>FPGA</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    FPGA学习笔记-入门

    大概10年前,大学同学建议我学习DSP。当因为工作忙,也只是简单学习了DSP的一些基础知识,没有进一步深入学习和时间。结果现在,好像DSP已经不再是主流了,现在有了FPGA。 现在想想
    发表于 04-09 10:55

    FPGA学习笔记-关于FPGA资源

    FPGA学习。 在学习中才发现,FPGA远不是门电路那么简单。FPGA中有各种需要的资源,比如门电路、存储单元、片内RAM、嵌入式乘法器、
    发表于 05-22 18:27

    FPGA学习笔记-电源电压

    通常FPGA中会有各种资源可以使用,而每种资源都需要有电源电压支持。在单片机中,通常是使用同样的电源电压供电的,比如常见的5V、3.3V。而在FPGA中,一般需要:核心电压、I/O口电压、PLL电压
    发表于 05-22 18:42

    FPGA学习笔记---FPGA的开发流程

    与通常的单片机应用开发不同,FPGA有自己的开发流程。但具体上怎样操作,作为初学者,没有一点经验。网站奖励的清华FPGA需要的开发软件,到目前还没有安装成功。暂且先看看相关学习,慢慢积累这方面的知识
    发表于 06-23 14:47

    FPGA学习笔记---基本语法

    Verilog语法是指硬件能够实现的语法。它的子集很小。常用的RTL语法结构如下: 1、模块声明:module ... end module 2、端口声明:input, output, inout 3、信号类型:wire, reg, tri等 4、参数定义:parameter 5、运算操作符:各种逻辑操作符、移位操作符、算数操作符等 6、比较判断:if ... else, case ... default ... endcase 7、连续赋值:assign, 问号表达式(?:) 8、always模块:敏感表可以是电平、边沿信号 9、begin...end(代码块?) 10、任务定义:task...endtask 11、循环语句:for 12、赋值符号:=和<=(阻塞和非阻塞赋值) 硬件设计的精髓,力求用最简单的语言描述最复杂的硬件,这也是硬件描述语言的本质。对于做RTL级别的设计而言,掌握好上面这些语法很重要。
    发表于 06-23 14:58

    FPGA基础学习笔记--组合逻辑电路-编码器和译码器

    `FPGA基础学习笔记--组合逻辑电路-编码器和译码器编码器4输入2输出编码器代码如下module encoder (input [3:0] iA,output reg [1:0] oQ
    发表于 02-20 15:36

    FPGA基础学习笔记--组合逻辑电路-算术运算电路

    `FPGA基础学习笔记--组合逻辑电路-算术运算电路+、-、*、/、%电路(1)加法电路:每1位大约消耗1个LE,示例代码如下module arithmetic (input [7:0] iA
    发表于 02-23 16:45

    《高级FPGA设计》学习笔记:复位方案

    尽管复位方案极其重要,可是却是最被忽视的部分之一,许多设计人员认为FPGA的全局复位资源将会完全解决问题,这是完全不正确的。至于为何说复位的重要性极高,是因为复位方案不好会引起不可重复的错误,而不可
    发表于 12-05 17:09

    C.P FPGA学习笔记

    本帖最后由 普莱斯队长 于 2016-4-21 18:58 编辑 共同学习,资料部分来自于网络,再次感谢各位前辈的资料。笔记中也引用了部分资料。本代码实现功能 接收到什么再发送出去什么
    发表于 05-10 20:28

    FPGA学习笔记汇总(7.13更新)

    又有好资料跟大家分享了,再次感谢楼主@oldbeginner {:4_114:}FPGA 学习笔记01 (LCD 1602,verilog)FPGA
    发表于 06-20 10:42

    INTEL FPGA学习笔记

    INTEL FPGA学习笔记第12节:语法篇_Verilog基础语法第13节:语法篇_Verilog程序框架第14节:语法篇_Verilog高级知识点第15节:语法篇_Verilog状态机第16节
    发表于 12-31 19:54 ?15次下载
    INTEL <b class='flag-5'>FPGA</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    Xilinx FPGA学习笔记:原语BUFIO的理解

    我一直没搞明白BUFIO是干嘛用的。
    的头像 发表于 05-08 15:20 ?3424次阅读
    Xilinx <b class='flag-5'>FPGA</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:原语BUFIO的理解

    FPGA学习笔记:ROM IP核的使用方法

    ,一旦写入不能再修改或删除,断电不丢失。我们知道FPGA只有RAM,因此事实上在 FPGA 中通过 IP 核生成的 ROM 或 RAM掉电内容都会丢失。用 IP 核生成的 ROM 模块只是提前添加
    的头像 发表于 08-22 15:06 ?6903次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:ROM IP核的使用方法