output [5:0] sum;
input [3:0] data;
input clk,reset;
reg sum;
always@(posedge clk)begin:loop
if(reset) disable loop;else sum<=data;
@(posedge clk)if(reset)disable loop;else sum<=sum+data;
@(posedge clk)if(reset)disable loop;else sum<=sum+data;
@(posedge clk)if(reset)disable loop;else sum<=sum+data;
end
endmodule
红色字体为出问题的地方。使用的XST综合(因为不太明白这段代码的含义,所以想用ISE试试,结果发现语句不规范),向大家求教这是为什么呢?

截图00.jpg



最新回复
ococ (2008-10-14 13:30:28)
ISE环境下使用VHDL每个进程里面只允许一个时钟事件的。
puma0329 (2008-10-14 13:43:56)
almer (2008-10-14 14:03:46)
ococ (2008-10-14 14:26:23)
等待寒秋 (2008-10-14 14:30:48)
always@(posedge clk)begin
@(posedge clk)sum<=1;
end
这段语句在simulation不会报错,但是综合会出错的。
你要很清楚硬件电路描述语言的定义,心中有电路,如上的描述你能想出它的电路模型?
你都不能,综合器更不能,至少ise是这样。
关键是,rtl code中是不会出现这样的语句的,写这样的语句出来本身就代表你写错了
你所说的教材也许它的目的是为了演示disabel如何使用,不过它的确误导了你
puma0329 (2008-10-14 15:08:01)
20081009191.jpg
puma0329 (2008-10-14 15:08:46)
20081009191.jpg
ouyang (2008-10-14 15:52:34)
hover_edacn (2008-10-14 16:01:45)
这段代码是可以被综合的,不过这不是一个好的代码风格,通常数据通路和控制逻辑是分开设计的。
不可否认该书的作者是个高手,不过他更多的是偏重于学术研究而非工程实践。如果说软件工程师写出诡异的代码可以减少程序存储空间还有情可原,作为ASIC工程师求追求代码的高效,除了带来更高的风险之外并不会带来任何物质利益(一次流片失败有可能毁掉一个公司)。
等待寒秋 (2008-10-14 16:24:39)
if(reset) disable loop;else sum<=data;
@(posedge clk)if(reset)disable loop;else sum<=sum+data;
@(posedge clk)if(reset)disable loop;else sum<=sum+data;
@(posedge clk)if(reset)disable loop;else sum<=sum+data;
end
去掉reset判断,其实相当于
always@(posedge clk)begin
sum<=data;
@(posedge clk)sum<=sum+data;
@(posedge clk)else sum<=sum+data;
@(posedge clk)else sum<=sum+data;
end
==如下(化为simulation时做法):
initial forever
begiin
@(posedge clk) sum<= sum+data;
@(posedge clk) sum<= sum+data;
@(posedge clk) sum<= sum+data;
@(posedge clk) sum<= sum+data;
end
==如下:
initial forever
begiin
@(posedge clk) sum<= sum+data;
end
==如下:
always @(posedge clk)sum<=sum+data
就是一个加法,我不晓得为什么教材会用那么诡异的方式,一定是为了验证什么。楼主看看标题啊什么的,看看这章节讲
些什么东西。
ise我试过,那种写法是不过的,语言本来就是工具,有的综合器能看懂那是它的事,正规军(大部队)看不懂(如ise)我还是觉得就证明那种写法是错的。我相信ise是支持必要的所有的语法的。
verilog标准本就有些东西不确定的,仔细找你一定能发现有些语法在不同的仿真器下跑出来的结果都不一样。
不必太钻牛角尖哈,功力高低不是看你对语法,标准研究的怎么样。
如果是我,我就把它当成是错的,无视之。这作者浪费人时间,哎,估计是实验室待久了,理论搞多了
[ 本帖最后由 等待寒秋 于 2008-10-14 16:27 编辑 ]
puma0329 (2008-10-14 19:09:41)
wu.weihai (2008-10-14 21:51:12)
always @(posedge clk)
if (reset)sum<=data;
else sum<=sum+data;
[ 本帖最后由 wu.weihai 于 2008-10-14 21:52 编辑 ]
wu.weihai (2008-10-14 21:51:49)