前言

大家都知道HDL是逻辑设计的语言,FPGA开发是一种硬件开发的行为,但由于我们平时也使用某种类似软件的方式管理项目,并且类似软件的行为来编码,大多数人还是会误会?你是不是在搞软件?

对于这种问题,我从来都是尴尬一笑,我是做逻辑的。或者说我是做FPGA开发的?但貌似这种回答并不能说明什么问题?我明明看到你在写代码,你三个大屏幕上都是密密麻麻的代码,这是做硬件或者这是设计电路?

于是,这就有必要说一下,FPGA开发是硬件行为还是软件行为?HDL语言是硬件语言还是软件

注:本文首发地址https://www.ebaina.com/articles/140000010029

HDL:软件还是硬件?

尽管FPGA开发(数字设计)不是软件开发,但过程和管理工具却非常相似。这两项任务实质上是在创建令人难以置信的复杂逻辑结构。

Verilog示例:

always@(posedge sysclk or posedge reset) beginif(reset) beginigq_reg <= 1'b0;endelse beginigq_reg <= igg_in;end
end

同样逻辑的VHDL示例:

p_igq_reg : process( sysclk )
beginif( rising_edge ( sysclk ) )thenif( reset = '1 ')thenigq_reg <= '0 ';elseigq_reg <= igg_in ;end if;
end process;

软件的定义是制造完成后可以更改的任何内容。由于可以在完成电路板制造后更改FPGA设计,因此有时将其误称为软件。但是,VHDL和Verilog不是编程语言。HDL的中文名叫硬件描述语言,英文全称为:Hardware Description Language,可见,它的名字就告诉我们,它是为了描述硬件而存在的语言。它们并不是我们在使用软件一词时所想到的东西。

HDL的应用场合有两种,一种是定制芯片,使用HDL设计完成芯片需要实现的功能,芯片制造完成流片后不可更改。另一种应用场合是FPGA设计,使用FPGA这种器件(FPGA本质上也是一种芯片,只不过它是可编程的),在其内部使用HDL语言描述各种逻辑功能的电路,并且可以随时更改设计,相比于芯片更加的灵活。

软件语言可以运行于CPU中,CPU中软件语言的运行,大家都知道,是通过执行指令顺序执行命令。

相对于CPU,下面有必要对FPGA进行简单对比:

我们可以将FPGA看作是大量未连接的数字组件的集合。这包括诸如多路复用器和逻辑门之类的基本组件,以及诸如DSP内核之类的更复杂的组件。在对FPGA进行编程时,实际上是在这些不同组件之间创建连接以创建一个复杂的系统。所有这些意味着我们在创建基于FPGA的设计时从根本上设计硬件。结果,我们可以设计出许多彼此并行运行的电路。这意味着FPGA能够同时执行大量不同的操作。与必须由CPU顺序运行的软件方法相比,这是一个主要优势。

此外,我们还可以在FPGA中对设计时序进行更多控制。我们可以估计在几纳秒内完成一个FPGA需要多长时间。同样,如果我们使用CPU来实现我们的设计,我们将无法做到这一点。这些功能的结果是,FPGA设计比微控制器中的等效实现要快得多。

缺点是它们往往更难以使用。就像我们将要看到的,这不是因为设计FPGA本质上比较困难。主要的区别是开发FPGA的人群要小得多。因此,我们可以使用的库和开放源代码要少得多。

什么是VHDL和Verilog?

VHDL或Verilog同样都是用于描述数字设计的基于文本的语言。 二者同属于HDL,即硬件描述语言,HDL使设计人员无需实际设计硬件即可描述硬件的功能。它们使设计人员可以将行为与实现在各个抽象级别上分开。他们可以准确地描述逻辑门或描述计数器的行为。

既然都是描述硬件的语言,那么该如何选择呢?关于这个问题,我在博文中也曾经有过介绍:FPGA/ASIC初学者应该学习Verilog还是VHDL?

文章中对此进行数据上的介绍,可以一看。

许多人在学习FPGA设计时遇到的第一个问题是他们应该学习VHDL还是Verilog。对于有志于成为专业FPGA设计人员的任何人,学习这两种语言将是有益的。因此,在这种情况下,一个更重要的问题是首先要学习哪种语言。

虽然这两种语言确实存在许多差异,但是对于初学者来说,这些差异可能太微妙了,无法完全欣赏。实际上,即使对于专业工程师而言,很多时间也将取决于个人喜好或公司内部已有的政策。当涉及到RTL建模时,地理通常是选择学习语言的主要决定因素。Verilog是加利福尼亚大型科技公司最常用的语言。因此,对于希望在那里工作的任何人来说,首先学习Verilog都是有意义的。在欧洲,VHDL被更广泛地使用,从这种语言开始是有意义的。

对于爱好者来说,verilog也是一个不错的选择,因为它通常不太冗长。对于门级建模,Verilog比VHDL更为流行。

这主要是由于它具有定义原语行为的固有能力。这意味着我们可以使用一种称为用户定义原语的语言功能来定义FPGA内单元的行为。这对于必须开发定义其芯片中单元行为的库的芯片供应商尤其有用。

与基于VHDL的同类产品相比,使用基于Verilog的模型进行的仿真也往往具有更快的执行时间。

其实对于HDLs:软件还是硬件这样的问题?这是一个错误的问题。VHDL可以用来描述硬件或编写软件。一个测试台可能包含文件访问例程和文本解析器。这些都是用VHDL编写的软件功能。描述数字设计的HDL只是数字电路设计,是一种硬件技能。关键的一点是,FPGA设计就是数字电路设计。为FPGA编写可靠的、可综合的、高效的、同步的VHDL,需要掌握数字设计技术。不管是HDL形式还是原理图形式,数字设计还是数字设计。

软件和硬件差异

软件是由一个或多个处理器执行的指令列表。源代码被编译为目标代码,但是它仍然是指令列表。数字设计是将逻辑电路放置在集成电路上。 VHDL被合成为逻辑电路,然后被放置在FPGA中并与布线资源连接在一起。 VHDL永远不会执行。电路的相对位置对性能至关重要。

尽管HDL语言通常被称为编程语言,但它们与传统语言几乎没有共同之处。当使用诸如C或Java之类的语言时,我们正在编写一种抽象算法或描述程序行为。CPU实际实现此程序的方式对我们来说不太可能真正有意义。相反,当我们编写HDL代码时,我们是在描述数字电路的行为。在设计FPGA时,请记住这种不同的方法,这一点很重要。

实际上,我们已经用RTL进行一次简单的RTL建模实践。我们从一个基本电路开始,然后写了一些描述电路行为的HDL。

使用RTL方法的设计由描述FPGA内部寄存器之间的数据流的代码组成。

这意味着我们编写了用触发器,逻辑门,有限状态机和RAM明确描述FPGA行为的代码。

让我们考虑下面的示例电路来演示此概念。

例如,这个电路:


在该电路的RTL模型中,我们将编写描述两个D型触发器和非门的行为的代码。

使用VHDL对其描述为:

dff1_d <= not dff2_q;dff1:
process (clock) is
beginif rising_edge(clock) thendff1_q <= dff1_d;end if;
end process dff1;dff2:
process (clock) is
beginif rising_edge(clock) thendff2_q <= dff1_q;end ill
end process dff2;

使用Verilog对其描述为:

assign dff1_d = ~dff2_q;always@(posedge clk) begin:dff1dff1_q <= dff1_d;
endalways@(posedge clk) begin:dff2dff2_q <= dff1_q;
end

在此代码中,第一行对非门的行为进行建模。

使用VHDL或Verilog流程对标记为dff1和dff2的触发器进行建模。

只要时钟出现上升沿,这些过程就会锁存输入的值。这符合D型触发器的预期行为。

从该示例中可以看到,我们如何描述设计中组件的行为以及它们之间的互连。

与其他类型的建模(仅定义组件之间的连接)相比,这是RTL建模的定义功能。

软件和硬件的相似性

FPGA中的数字设计每天可以改变很多次,这增加了令人难以置信的灵活性,但代价是有很大的混淆可能性。这意味着对修订控制的强烈需求。关键点:HDL和仿真器使人们很容易用行动代替思想。摒弃这种诱惑,先设计,再编码。

为什么硬件或软件问题很重要?

为了描述数字设计,您无需完全选择。使用综合工具认可的标准语法来编码数字设计非常重要。始终要记住这样一个问题。综合工具将从这些代码中建立什么?

FPGA的设计艺术(10)HDL是软件还是硬件?相关推荐

  1. FPGA的设计艺术(8)最佳的FPGA开发实践之严格遵循过程

    文章目录 前言 如何花费更少的时间去调试? 为什么使用过程? 需要多少过程? 最小的过程 明确需求 数字设计方案 逻辑设计 功能仿真 板上验证 版本控制 编码指南:简短的技术组合,可最大程度地减少错误 ...

  2. FPGA的设计艺术(9)FPGA开发技巧与工程管理

    文章目录 前言 设计技巧和常见错误 PCB设计 数字设计 同步设计计数器示例:纹波计数器 减少编码时的不确定性. Verilog/VHDL编码 仿真 为什么仿真? 工程管理 管理工程师 前言 阅读一段 ...

  3. FPGA的设计艺术(17)如何搭建一个简易的逻辑测试平台?

    前言 提到FPGA逻辑的仿真,一般指的是行为仿真或者功能仿真,还有人会称为前仿,不包含时间延迟信息,只验证逻辑功能.对于小模块的仿真,需要写一个测试文件,英文是testbench,即测试平台.在tes ...

  4. FPGA的设计艺术(11)FPGA的构建过程

    前言 本文讨论FPGA的构建过程,由于FPGA的过程太多了,恐怕会有歧义,这个过程,不是开发过程,不是开发流程,而是实实在在的FPGA编译的过程,使用编译恐怕不是太合适,但是大家都叫习惯了,也知道FP ...

  5. FPGA的设计艺术(6)STA实战之SmartTime时序约束及分析示例(I)

    前言 FPGA进行时序分析通常使用厂家的编译工具,进行时序分析,但是万变不离其宗,时序分析的知识通常都是通用的,原理都是一致的.下面根据SmartTime的资料来看下时序分析的实际操作是如何的,这在其 ...

  6. FPGA的设计艺术(5)STA实战之时钟偏斜对建立保持时间的影响以及时序报告分析

    前言 本文首发:FPGA的设计艺术(5)STA实战之时钟偏斜对建立保持时间的影响以及时序报告分析. STA回顾 70年代的时序是通过Spice仿真执行的.80年代的时序包括在Verilog仿真中,以确 ...

  7. FPGA的设计艺术(3)静态时序分析

    前言 本文首发:FPGA的设计艺术(3)静态时序分析,我的易百纳技术社区专栏. 同行邀请消息:FPGA/IC Technology Exchange 什么是静态时序分析(STA)? 静态时序分析介绍 ...

  8. FPGA的设计艺术(2)FPGA开发流程

    前言 注:本文首发易百纳技术社区,文章链接:FPGA的设计艺术(2)FPGA开发流程 本文介绍整个FPGA设计流程以及设计FPGA所需的各个步骤-从一开始到可以将设计下载到FPGA的阶段.但是在此之前 ...

  9. FPGA的设计艺术(7)STA实战之SmartTime时序约束及分析示例(II)

    前言 本文续FPGA的设计艺术(6)STA实战之SmartTime时序约束及分析示例(I),分析了时钟的不确定性,多周期路径,以及门控时钟的STA分析方法.可以使用各大厂家的时序分析工具,大多数都自带 ...

最新文章

  1. SQL点滴12—SQL Server备份还原数据库中的小把戏
  2. Hdu 4738 Caocao's Bridges (连通图+桥)
  3. tensorflow l2_loss函数
  4. 三极管共射、共集、共基分析及比较
  5. ads s参数拟合_ADS S参数仿真介绍
  6. 歌谣对自己的“自勉“
  7. mysql与groupconcat相反的_MySQL中GROUP_CONCAT的反义词是什么?
  8. 最短路(HDU-2544)
  9. css3 position: fixed 居中问题,移动端,旁边留白的情况fixed不能居中的问题;
  10. 就算会用python画颗心,可你依然还是只单身狗
  11. 如何用 JavaScript 下载文件
  12. 【Java从0到架构师】MyBatis - 缓存_构造方法
  13. 十个Android Material Design库
  14. GitHub开源推荐 | 一套绝佳的图标字体库
  15. 360卸载方法(最全面)
  16. tplink迷你路由器中继模式_tplink迷你型无线路由器怎么中继模式
  17. django基础入门之搭建博客系统
  18. python词云代码手机_【云计算】爬取淘宝手机品牌词云分析(python)
  19. ubuntu下配置host的方法
  20. 杨建荣的学习笔记排行榜(r2笔记100天)

热门文章

  1. 惠普Indigo加强版软件包
  2. 3D建模的培训机构一般多少钱?
  3. CSS-鼠标划过时的样式
  4. CentOS(宝塔)部署安装发布Scratch3.0
  5. 视频RTU 视频数采仪 数据采集传输仪
  6. [UE4]条件融合动画: Blend Posed by int
  7. 四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)
  8. latex 制作个人简历,CV
  9. 龙芯1C300B主板V3.4嵌入式开发学习笔记二
  10. Harris 角点检测原理及实现