告诉你真正的verilog执行顺序,纠正你的思路偏差.doc

告诉你真正的verilog执行顺序,纠正你的思路偏差.doc

ID:27903057

大小:72.00 KB

页数:4页

时间:2018-12-06

告诉你真正的verilog执行顺序,纠正你的思路偏差.doc_第1页
告诉你真正的verilog执行顺序,纠正你的思路偏差.doc_第2页
告诉你真正的verilog执行顺序,纠正你的思路偏差.doc_第3页
告诉你真正的verilog执行顺序,纠正你的思路偏差.doc_第4页
资源描述:

《告诉你真正的verilog执行顺序,纠正你的思路偏差.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、告诉你真正的verilog执行顺序,纠正你的思路偏差  和C/C++一类编程语言不同,HDL用于电路描述,代表着门电路和触发器的组合。任何时刻,只要上电后,FPGA就等价于一堆数字电路,每个电路按照自己的条件执行,不会因为某个模块放在代码前面,就会先工作。这就需要设计人员,按照每个模块并行工作的思路来调整设计。这给软件开发人员入门带来了难度,但是同时也是FPGA的价值所在,正因为FPGA能够并行执行,所以很多算法和设计可以在低频时钟下高实时性,快速出结果。这是FPGA的优势,也是火起来的一个重要原因,所以希望大家好好去理解。  同时

2、大家要明白verilog不是不能实现顺序执行,而是实现顺序执行并不像语法那么直观,最简单的顺序执行方法就是用状态机去控制每一个寄存器的跳变,C/C++编程也可以认为本质上就是大型的一个状态机,verilog要做到那样也只是做成状态机去模拟他的工作。只要是数字电路能够实现的,FPGA都可以做到。  模块内部的执行顺序比较复杂,优秀的设计中,模块内部是并行工作的,即使是beginend语句内部,这里很多读者会问,beginend不是串行语句块吗?下面详细解释这个问题。  beginend之间存在阻塞赋值和非阻塞赋值2种赋值方法,如果使用

3、不当不仅仅会出现竞争冒险,还会导致你的理解和编译器理解不一样,最终生成的电路和自己想的天差地别,导致一些难修正的错误。所以必须按照以下两条执行准则使用赋值语句:  描述组合逻辑的always块里面用阻塞式赋值  描述时序逻辑的always块里面用非阻塞赋值  在组合逻辑中,阻塞赋值只和电平有关,往往和触发边沿没有关系,可以看成是并行运行的组合逻辑电路。而时序逻辑中,非阻塞赋值是本身就是并行执行的。因此,优秀的设计,其beginend内部也是并行执行的。大家为了加深理解,可以去看看实例说明里面的例子。  ·实例说明·  modulep

4、ara_demo(clk,reset,a,b);  inputclk;  inputreset;  input[3:0]a;  output[3:0]b;  reg[3:0]tempa1,tempa2,b;  always@(posedgeclk)  begin  if(!reset)begin  tempa1<=0;  tempa2<=0;  b<=0;  end  elsebegin  tempa1<=a+1;  tempa2<=tempa1+1;  b<=tempa2+1;  end  end  endmodule  上述代码

5、的RTL级图如下,可以看出代码最终实现是一个3级累加结构,每级累加结构中间有一个触发器打拍。也就是说这是典型的流水线结构。每一级都在一直工作,运行顺序没有先后,但是数据到达时间有先后,处理顺序有先后。    大家再看仿真图,tempa2并不是等到a+1的结果给到tempa1后才执行的tempa1+1,而是执行a+1的同时也在执行tempa1+1。三句累加都是同时进行,看下图就知道都是对前一个数值基础上加1。所以tempa1和tempa2相等,而不是相差1。    看此文之前请千万很熟悉verilog语法,能区分可综合,不可综合语句。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。