学习FPGA必须要知道的要点
FPGA技术联盟 2023-03-17

  1. FPGA不是编程语言,而是一种可综合的硬件描述语言,我们再描述的时候一定要明白所要设计的是一个怎样的电路。

  2. Verilog 支持两种进程initial和always进程,前者只能用在TB(TestBench)中,后者才是可综合的。

  3. 阻塞与非阻塞指都是相对于进程本身而言的,简单来讲,阻塞用在描述组合逻辑电路,而非阻塞用于时序逻辑电路。

  4. 使用进程模块的电路类型:
    组合电路-----对组合逻辑中使用的所有输入敏感
    例子:
    always@(a or b or sel)
    时序电路-----仅对时钟和控制信号敏感
    例子:
    always @(posedge clk or negedge clr)

    always既可以描述组合逻辑,也可以描述时序逻辑。

  5. 可以用case语句完成多路选择器的功能,但是列举的情况一定要考虑全,否则会产生Latch。

  6. verilog中有两类子程序:
    函数和任务
    函数-----根据输入返回一个值
    -----产生组合逻辑
    -----用在表达式中:assign mult_out=mult(ina,inb);
    -----函数是组合逻辑,不能含有任何延时,事件,或者时序控制声明,至少有一个输入变量
    总是返回一个变量
    -----可以调用函数,但是不能调用任务。
    任务-----可以是组合或者寄存器
    -----以声明的形式调用任务:stm_out(nxt,first,sel,filter);
    -----与其他编程语言中的任务相似
    -----与函数不同任务不需要传递参数,而函数要传递参数
    -----可以调用任务和函数。
    ----- 可以含有任何延时,事件,或者时序控制声明
    -----返回零个或者多个数值

    可综合的verilog语法子集是指用硬件可以实现的语法。力求用最简单的语言实现最复杂的硬件电路。

  7. 硬件都有相应的输入输出的接口,或者是输入或者是输出,或者是输入输出。

  8. reg型是指时序逻辑里面的一个寄存数据,wire是组合逻辑里面的一条连线。

  9. define定义了一个参数,在整个工程里面都是有效地。parameter定义的一个参数只在这个文件里面进行适用的。

  10. 各种逻辑操作符,移位操作符,算术操作符大多是可综合的。

  11. assign一般是只针对于组合逻辑,而always语句既可以用于组合逻辑又可以用于时序逻辑,always模块的敏感表,如果是电平,则为组合逻辑,如果是沿信号posedge或者negedge 则为时序逻辑。

  12. begin----end和C语言里面的{}是类似的。

  13. for 语句-----循环因为综合出来的结果可能比较浪费资源,所以就一般用的比较少,但是在一些特定的设计中可以起到事半功倍的效果。

  14. Total logic element总共消耗的逻辑单元。

  15. 行为级仿真可以理解为功能仿真(前仿真);布局布线后仿真可以理解为时序仿真(后仿真)。

  16. 时序逻辑中时钟和复位信号是必须的。

  17. 注意wire赋值的一个问题如下:
    wire[2:0] key_an=key_rst_r&(~key_rst)
    其相当于如下的一个赋值语句
    wire[2:0] key_an;
    assign key_an=key_rst_r&(~key_rst);其实现的效果是一样的。

    此种方法为:  脉冲边沿检测法。

  18. 实际工作中,除了描述仿真测试激励(Testbench)时使用for循环语句外,极少在RTL级编码中使用for循环,这是因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,不能有效的复用硬件逻辑资源,造成巨大的浪费。一般常用case语句代替。

  19. FPGA一般触发器资源比较丰富,而CPLD组合逻辑资源更丰富。


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • FPGA
  • 可编程
  • PLC
  • verilog
下载排行榜
更多
评测报告
更多
广告