FPGA入门之我见

2020-01-26 17:27发布

1.写在前面
很早就想写这么篇短文,和大家交流学习的些许经验和心得。但一直有各种干扰,致使一拖再拖,这阵子赶上米国佬过圣诞,咱也忙里偷闲,赶紧把这篇短文码掉。。嘿嘿。

2.为什么要写
群里时常有新人呈周期性的问诸如,“我该如何学HDL?”,“非阻塞和阻塞有啥区别?”之类的问题。在此,笔者扯两句自己的学习体会,对这些问题一并予以回答。

3.English required
英文资料不一定能培养出优秀的FPGA工程师,但拒绝英文资料的工程师至多是个合格的工程师。

如图所示,纵轴代表综合水平,横轴代表时间,理论决定了由经验带动的水平提升的上限。而如果能经常参考英文资料,上限可以适当提高,如图中的虚线。
在一开始便强调英文的重要性是因为学习FPGA第一手的资料是大量的官方资料,如tutorial,user guide,cock book,handbook,application note,white paper等。
读者不能指望永远参考翻译的二手资料吧,何况很多还都严重脱节行业发展现状。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
星星之火红
2020-01-27 07:50
6.掌握主动权

由于综合器的算法限制,只有当我们的HDL满足一定的coding style,才能映射出我们想要的东西,比如前面说的对寄存器的建模对敏感列表的限制和要求。而有些复杂元件要求的coding style则更复杂,比如memory、乘法器。

这时更好的选择是直接调用软件提供的各种module,altera使用megawizard,xilinx使用core generator。这样不但直接告诉综合器我想要的是什么,把解释权掌握在设计人员自己手里,而且由于这些module一般都是经过优化(基于器件)后的网表,性能上会比自己写的更好,更灵活。

当然调用module也意味着在不同vendor之间转换将成为一个额外的问题。所以有些设计为了兼容各家的产品而故意不使用module。

到这里为止,经常是新人止步的地方,即所有的精力和视野都放在数字前端。要成为高手,后端的内容具有一票否决权。



7.综合(synthesis)与映射(mapping)

由于synplify廉颇老矣,外加两家vendor,altera有了自己的Qis,xilinx有了自己的XST,使得整个设计流程都已经高度集成化。集成化带来了方便,相对的也容易使刚入门的人犯晕。在此笔者不多做解释,直接上图比较,相信能说明问题。


***************************************************

module training(clk, rst_n, ce, ina, inb, outa);

input clk;

input rst_n;

input ce;

input ina;

input inb;

output outa;

reg ina_reg1;

reg ina_reg2;

reg ina_reg3;

reg inb_reg1;

reg inb_reg2;

reg inb_reg3;

reg outa;

always@(posedge clk)

begin

   ina_reg1 <= ina ;

   ina_reg2 <= ina_reg1 ;

   ina_reg3 <= ina_reg2 ;

   inb_reg1 <= inb ;

   inb_reg2 <= inb_reg1 ;

   inb_reg3 <= inb_reg2 ;

outa <= ina_reg3 & inb_reg3;

end

endmodule

***************************************************

在altera中综合后:



映射后:



而同样的code在xilinx中综合后:



映射后:



可以看出两家vendor综合的结果是一样的,这时还没对应到具体的FPGA底层上,只是RTL级的网表。

但映射后就明显不同了,altera使用的是多个常规的寄存器,而xilinx使用的是SRL16移位寄存器(当然不是说xilinx就更好,只是这个特列更利于xilinx特性的发挥而已);并且出现了buffer和LUT,说明映射后的网表已经对应到FPGA的底层结构上了,这时才真正具有FPGA特 {MOD}。

从映射开始便进入了非新人(不一定是高手,但一定不是刚入门的)的专属领域,即数字后端。

推荐阅读:

a) 逻辑综合器的故事

一周热门 更多>