大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
硬件新手疑问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编写嵌入到硬件系统中跟踪目标! 所以,多学点算法,多学点编程思维总是好的!!!
纯手工输入,转载请注明地址,还有博主非常愿意与各位道友交流项目开发经验!!!!
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191016.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...