不能被综合的Verilog语言——非静态循环
2016-04-29 20:24
274 查看
Verilog语言是硬件描述语言,需要综合成硬件电路。不是所有的行为描述都可以综合成硬件电路的。 比如下面的这段代码:功能很简单,完成统计输入的并行数据中‘1’计数。
module test( output reg [2:0] bit_count, input [7:0] data, input clk, input reset ); reg [2:0] count,index; reg [7:0] temp; always@(posedge clk)begin if(reset)begin count = 0; bit_count = 0; end else begin count = 0; temp = data; for(index=0;|temp;index=index+1)begin if(temp[0]) count = count+1; temp = temp>>1; end bit_count = count; end end endmodule
下面来分析一下上面的例子:用C编程的话思路没有任何问题。程序通过将输入数据保存到temp寄存器中,然后对其循环右移。判断temp的LSB来确定是否对bit_count加一。对数字‘1’的计数任务原则上应该是组合逻辑完成的任务。但是组合逻辑却不能在一个循环内完成多个循环任务。而且对不同的数据输入循环的次数是不确定的。但是上面的代码仿真是可以通过的,波形也可以达到预期的结果。但是代码是不可被综合。
总结:当在一个行为模块里嵌入for循环的组合逻辑,或着当循环的此次不能被确定时,不能被综合成硬件电路。
材料来源:Verilog高级数字设计
相关文章推荐
- 你应该学习哪种编程语言?
- 康诺云推出三款智能硬件产品,为健康管理业务搭建数据池
- [转]我们需要一种其他人能使用的编程语言
- C#语言主要特性总结
- C语言中static的作用及C语言中使用静态函数有何好处
- PHP检测用户语言的方法
- JavaScipt基本教程之JavaScript语言的基础
- 各种语言、服务器301跳转代码全集
- 查看Java所支持的语言及相应的版本信息
- 使用php判断浏览器的类型和语言的函数代码
- php实现获取及设置用户访问页面语言类
- GO语言类型转换和类型断言实例分析
- C语言单链表的实现
- php根据用户语言跳转相应网页
- Java基础知识之Java语言概述
- python获取各操作系统硬件信息的方法
- Python获取电脑硬件信息及状态的实现方法
- ThinkPHP中的常用查询语言汇总