fpga编程语言VHDL_vhdl和fpga

2022-11-08 15:28:26 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

硬件新手疑问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编写嵌入到硬件系统中跟踪目标! 所以,多学点算法,多学点编程思维总是好的!!!

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191016.html原文链接:https://javaforall.cn

0 人点赞