FPGA编程语言--VHDL OR Verilog?
硬件新手疑问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结合开发的技术尤为重要!
硬件新手疑问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'b1;
else if ((int_CsWidthCnt_5b > 7) && (!int_CfgDone))
int_Cs_n <= 1'b0;
else
int_Cs_n <= 1'b1;
end
-----------VHDL
ge_cn3:process(read_flag,clk,iACKT)
begin
if(iACKT='1')then
cn3<=(others=>'0');
else
if(clk'event and clk='1')then
if(read_flag='1')then
cn3<=cn3+'1';
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编写嵌入到硬件系统中跟踪目标! 所以,多学点算法,多学点编程思维总是好的!!!
纯手工输入,转载请注明地址,还有博主非常愿意与各位道友交流项目开发经验!!!!
FPGA编程语言--VHDL OR Verilog?相关推荐
- FPGA之道(38)VHDL与Verilog的比较
文章目录 前言 VHDL与Verilog的比较 语法比较 基本程序框架比较 端口定义比较 范围表示方法比较 元件调用与实例化比较 Process与always比较 标准逻辑类型比较 逻辑常量赋值比较 ...
- (72)FPGA模块调用(VHDL调用Verilog)
(72)FPGA模块调用(VHDL调用Verilog) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(VHDL调用Verilog) 5)结语 1.2 ...
- (68)FPGA模块调用(Verilog调用VHDL)
(68)FPGA模块调用(Verilog调用VHDL) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(Verilog调用VHDL) 5)结语 1.2 ...
- (67)FPGA模块调用(Verilog调用system Verilog)
(67)FPGA模块调用(Verilog调用system Verilog) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(Verilog调用syste ...
- (66)FPGA模块调用(Verilog调用Verilog)
(66)FPGA模块调用(Verilog调用Verilog) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(Verilog调用Verilog) 5)结 ...
- (111)FPGA面试题-介绍Verilog 块语句fork-join执行过程
1.1 FPGA面试题-介绍Verilog 块语句fork-join执行过程 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-介绍Verilog 块语句f ...
- (110)FPGA面试题-介绍Verilog块语句begin-end执行过程
1.1 FPGA面试题-介绍Verilog块语句begin-end执行过程 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-介绍Verilog块语句beg ...
- (90)FPGA面试题-使用Verilog实现可预置初值的7进制循环计数器
1.1 FPGA面试题-使用Verilog实现可预置初值的7进制循环计数器 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-使用Verilog实现可预置初 ...
- (88)FPGA面试题-使用Verilog HDL编写二进制转格雷码
1.1 FPGA面试题-使用Verilog HDL编写二进制转格雷码 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-使用Verilog HDL编写二进制 ...
- (64)FPGA面试题-在Verilog中,$display语句可以使用哪些不同的选项?
1.1 FPGA面试题-在Verilog中,$display语句可以使用哪些不同的选项? 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-在Verilog ...
最新文章
- (转)zookeeper理解
- python 中 property 属性的讲解及应用
- 零基础带你快速入门consul-难道consul还能这样用?
- PrimeTime指南——概述和基本流程
- Android之开发中用到的几个多线程解析
- 一步步编写操作系统 53 任务状态段TSS介绍
- kotlin中mainactivity无法直接调用xml中的控件_使用Kotlin高效地开发Android App(一)
- (40)不确定性约束
- [笔记]numpy中的tile与kron的用法
- 2021极术通讯-为什么智慧计算如此重要?
- 第一章 概率论基本概念(a)
- 图案设计灵感怎么写_服装设计灵感来源怎么写_服装设计理念怎么写
- innerHTML\innerText制作动态网页基础
- 2.5元组tuple
- keras实现双通道模型
- 字母大小转换及其十进制的ASCLL码值
- 中学学校计算机已装备清单,中学教育技术装备自查报告
- 408又来了!华中科技大学软件学院改考408!
- 基于 acme.sh 自动申请域名证书(群晖 Docker)
- 循环移动数组,比如移动M个位置