打印

高手求教多事件控制语句的问题

[复制链接]
3885|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
布川酷子|  楼主 | 2011-11-7 08:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有如下代码,功能是实现统计输入数据中1的个数,实现该功能可以有很多种方式,但是我看到一本书上用了这种方式,就是嵌套事件控制(embedded timing control),该书上举此例是想说明 static loop with embedded timing control were supported by the synthesis tool。此处的综合工具为Synopsys Design Compiler。
代码如下:module counter_1s
(
output reg [2:0] bit_count,
input clk,reset,
input [3:0] data
);
  reg [2:0] count;
  reg [3:0] temp;
always
begin : wrapper
@(posedge clk)
if(reset) begin count=0;bit_count=0;end
else begin :bit_counter
   count=0;
temp=data;
while(temp)
@(posedge clk)
if(reset)begin
count=2'b0;
disable bit_counter;
end
else begin
  count=count+temp[0];
  temp=temp>>1;
  end
@(posedge clk)
if(reset) begin
  count=0;
  disable bit_counter;
end
else bit_count=count;
  end
end
endmodule


而编译出错:Error (10856): Verilog HDL error at counter_1s.v(19): multiple event control statements not supported for synthesis
这是什么原因?我使用的Quartus II v10.1版本,是quartus的综合工具不支持么?

相关帖子

沙发
布川酷子|  楼主 | 2011-11-9 16:57 | 只看该作者
没有人会么?

使用特权

评论回复
板凳
chencsw| | 2011-11-10 17:33 | 只看该作者
本帖最后由 chencsw 于 2011-11-10 17:36 编辑

上面这个代码我粗略看了点。个人认为是可以用来坐仿真,但不能实现为电路吧,但DC能认,也就是说可以综合。不知道楼主这段代码的出处
暂时没想到上面描述的对应实际电路中什么单元,而且while语句只在仿真出现
楼主可以考虑根据功能,将其拆成多个always

使用特权

评论回复
地板
AIM1945| | 2011-11-13 15:04 | 只看该作者
我天,你这编码风格,典型C语言式的写法。
如楼上所说,你的代码仿真可能会通过,综合肯定是过不了
综合成电路后每个@(posedge clk)都是并行执行的,一个寄存器有多个驱动电路没法生成。

拆开,一个always 里只描述一个寄存器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

40

帖子

1

粉丝