热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

fpga编程语言VHDL_vhdl和fpga

fpga编程语言VHDL_vhdl和fpga硬件新手疑问1:大家都在争硬件开发是选择单片机,DSP,ARM还是FPGA呢?以我个人经验,我也是在硬件方面做了几年的老油条了,大学时玩

硬件新手疑问1:大家都在争硬件开发是选择单片机,DSP,ARM还是FPGA呢?

以我个人经验,我也是在硬件方面做了几年的老油条了,大学时玩过单片机,也就是大家常说的C51,C52,单片机驱动个流水灯还行,但是研究生阶段遇到的很多问题,单片机就有心无力了。至于ARM,DSP or FPGA,由于研一做无人机做了DSP的项目,鄙人觉得DSP入手比较难,但是DSP主攻方向是算法研究的,用于算法处理,绝对是ARM,FPGA替代不了的。但是DSP也有他的局限性,他不利于做硬件系统的驱动控制芯片,通常起着硬件系统控制模块的还是是ARM和FPGA,对比ARM和FPGA,我建议学一种,学精就行,不要三期两道!但是我比较推崇FPGA,因为其应用前景相比于ARM更为广阔,与此同时,FPGA正在朝着算法研究的方向发展,也就是说它有趋势会替代DSP。但目前,一块好的信号处理板的模式通常是DSP+FPGA或者DSP+ARM,所以学习DSP和FPGA结合开发的技术尤为重要!

fpga编程语言VHDL_vhdl和fpga

硬件新手疑问2:既然我选择了学习FPGA,那我用什么编程语言来编程呢?VHDL OR Verilog?

鄙人之前也是纠结了很久,摸爬滚打了老久,那么首先来看看两者编程风格:

1)实体部分

//verilog

module AD9517_Cfg
(
i_9517cfg_CfgClk , // 数据时钟                      
i_9517cfg_CfgClk180 ,       // 配置时钟,与数据时钟反向180度 
i_9517cfg_Arst_n , // 全局复位

o_9517cfg_SpiClk , // 输出SPI时钟
o_9517cfg_SpiDat , // 输出SPI数据
o_9517cfg_Cs_n , // 输出片选
o_9517cfg_Sync_n // 9517各通道间输出同步控制信号

);

input i_9517cfg_CfgClk ;
input i_9517cfg_CfgClk180 ;
input i_9517cfg_Arst_n ;
output o_9517cfg_SpiClk ;
output o_9517cfg_SpiDat ;
output o_9517cfg_Cs_n              ;

output o_9517cfg_Sync_n ;

—————-VHDL

entity gesignal is
port(clk:in std_logic;
–cmd:in std_logic_vector(1 downto 0);
reset:in std_logic;

–cnout3:out std_logic_vector(5 downto 0);
–go:out STD_LOGIC;
–flag:out STD_LOGIC;

–ackrout:out STD_LOGIC;
ODB:out STD_LOGIC;
IAG1,IAG2:out STD_LOGIC;
SAG1,SAG2:out STD_LOGIC;
SRG1,SRG2:out STD_LOGIC;
CMG:out STD_LOGIC;
ACK:out STD_LOGIC
);
end entity gesignal;

不难发现两者语法的实体都很精简,只是定义管脚Verilog在实体外,VHDL在实体内。

2)进程

//verilog

always @( posedge i_9517cfg_CfgClk, negedge i_9517cfg_Arst_n )
begin
    if( ! i_9517cfg_Arst_n )
        int_Cs_n <= 1&#8217;b1;
    else if ((int_CsWidthCnt_5b > 7) && (!int_CfgDone))
    int_Cs_n <= 1&#8217;b0;
    else
    int_Cs_n <= 1&#8217;b1;

end

&#8212;&#8212;&#8212;&#8211;VHDL

ge_cn3:process(read_flag,clk,iACKT)
begin
if(iACKT=&#8217;1&#8242;)then
cn3<=(others=>&#8217;0&#8242;);
else
if(clk&#8217;event and clk=&#8217;1&#8242;)then
if(read_flag=&#8217;1&#8242;)then
cn3<=cn3+&#8217;1&#8242;;
end if;
end if;
end if;
end process ge_cn3;

很显然两者都是固定形式编写,只是Verilog偏C语言一点,常用always作为进程,VHDL常用process来写进程。

就以上两个例子,可以看出,其实VHDL与Verilog的语法是很固定且很简单的,对于编程有经验的人来说并不会纠结选Verilog和VHDL,两种语言完全是相通的,如果放开点说完全是一模一样的,换汤不换药。因此,对于FPGA编程,VHDL能完成的任务,Verilog也一定能完成,Verilog能完成的任务,VHDL也一定能完成,不存在谁优于谁的问题,就在于你对那个编的顺手,哪个感兴趣。

但是当你掌握了其中任意一门语言,就可以很容易转换到另一门编程语言的!就我个人而言,常用的是VHDL,但是也完全能看懂Verilog代码,我并未系统学习Verilog,但是学懂VHDL之后,Verilog也就无师自通啦!因此,硬件编程的老油条做工程时,常常会混合编程,即VHDL和Verilog都会用到的。

结论语

做纯FPGA,学纯VHDL没有一点用!我之前也学过java等语言,搞过软件开发!若是单独学软件编程的JAVA或者硬件开发的FPGA,顶多混到一个研发工程师的级别!所以,,,编程的灵魂还是在于算法和编程思维,fpga里或者java里融合不了算法和编程思维,代码就毫无意义!代码毫无意义就一文不值!所以,我建议多学学算法,算法可以在任何开发平台上运行!比如同步定位算法可以用java编写做成app,也可以用VHDL编写嵌入到硬件系统中跟踪目标!      所以,多学点算法,多学点编程思维总是好的!!!

纯手工输入,转载请注明地址,还有博主非常愿意与各位道友交流项目开发经验!!!!


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
author-avatar
haha20101030
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有