1.写在前面
很早就想写这么篇短文,和大家交流学习的些许经验和心得。但一直有各种干扰,致使一拖再拖,这阵子赶上米国佬过圣诞,咱也忙里偷闲,赶紧把这篇短文码掉。。嘿嘿。
2.为什么要写
群里时常有新人呈周期性的问诸如,“我该如何学HDL?”,“非阻塞和阻塞有啥区别?”之类的问题。在此,笔者扯两句自己的学习体会,对这些问题一并予以回答。
3.English required
英文资料不一定能培养出优秀的FPGA工程师,但拒绝英文资料的工程师至多是个合格的工程师。
如图所示,纵轴代表综合水平,横轴代表时间,理论决定了由经验带动的水平提升的上限。而如果能经常参考英文资料,上限可以适当提高,如图中的虚线。
在一开始便强调英文的重要性是因为学习FPGA第一手的资料是大量的官方资料,如tutorial,user guide,cock book,handbook,application note,white paper等。
读者不能指望永远参考翻译的二手资料吧,何况很多还都严重脱节行业发展现状。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
上面说到FPGA的结构是漂白粉,这节承接上文继续:
时序逻辑的敏感列表为啥只能有时钟和复位?如下:
always@(posedge clk or negedge rst_n)
而不能再加个使能:
always@(posedge clk or negedge rst_n or posedge CE)
也不能双沿触发:
always@(posedge clk or negedge clk)
也不能沿触发 + 电平触发:
always@(posedge clk or gated_logic)
这一切究竟是为啥呢。。
无他,结构如此。下图是cycloneII的一个基本单元LE(logic element):
右下角那个寄存器看到了吧,单沿触发,异步复位,同步使能。所谓结构决定HDL也。
顺便再看一下寄存器的复位端有个小圆圈,表示低电平复位,所以我们这样写:
always@(posedge clk or negedge rst_n)
再截个spartan3E的:
看出点名堂了吧。xilinx的寄存器是高电平复位,所以如果你是xilinx用户,那就要这样写:
always@(posedge clk or posedge rst_n)
再来说一个经典的模型:FSM。为什么FSM推荐使用one-hot编码?如果读者有兴趣,可以做一个实验,会发现one-hot的解码电路一般都是小于4输入,也就是能用一个4输入LUT搞定。假设FPGA中的LUT是100输入,那即使解码电路再复杂点也能hold住了不是。
推荐阅读:
a) 设计与验证:Verilog HDL。
b) Verilog HDL 程序设计与应用 王伟编
c) Clifford E. Cummings的论文,http://www.sunburst-design.com/papers/
d) 大唐电信FPGACPLD数字电路设计经验分享
一周热门 更多>