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

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

  • 38
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
FPGA(可编程逻辑门阵列)是一种灵活的集成电路设备,由一系列可编程逻辑门和可编程连线组成。在大学期末考试中,FPGA可能作为一个重要的考题或者考点。 首先,FPGA的基础知识是必须掌握的。学生需要了解FPGA的组成部分、内部结构以及工作原理。他们需要了解可编程逻辑门和连线的基本概念,如AND、OR、NOT等,并且能够理解和解释这些概念之间的关联。 其次,学生需要掌握FPGA编程语言和开发工具。常用的FPGA编程语言包括VHDL和Verilog,而开发工具则有Xilinx ISE和Altera Quartus等。学生需要了解这些语言和工具的基本语法和使用方法,并且能够通过它们来设计和实现简单的电路功能。 此外,学生还需要具备FPGA电路设计和调试的能力。他们需要学会画出电路图、设计逻辑电路,并能够通过仿真和测试来验证电路的正确性。在调试过程中,他们需要有足够的耐心和逻辑思维能力,能够分析和解决可能出现的问题。 最后,学生还需要了解FPGA在实际应用中的一些常见问题和挑战。这包括时序约束、时钟分配、资源利用等方面的内容。他们需要知道如何针对这些问题进行优化和改进,以实现更好的电路性能和效果。 总之,对于FPGA大学期末考试,学生需要全面掌握FPGA的基础知识、编程语言和开发工具,具备电路设计和调试的能力,以及对FPGA应用中的常见问题和挑战有一定的了解。通过系统的学习和实践,学生可以更好地应对和解决与FPGA相关的考试问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值