下列两种表述有何差别?
本帖最后由 fpgaw 于 2010-7-18 09:42 编辑1:
always @(posedge clk)
if(rst)
begin
shft_reg <= 0;
int_reg <= 0;
end
else
if(load)
begin
shft_reg <= data_in;
int_reg <= shft_reg;
end
else
begin
shft_reg <= {data_in, shft_reg};
int_reg <= int_reg;
end
always @(posedge clk)
if(rst)
decim_reg <= 0;
else
if(hold) decim_reg <= decim_reg;
elsedecim_reg <= int_reg; 本帖最后由 fpgaw 于 2010-7-18 09:43 编辑
2:
always @(posedge clk)
if(rst)
begin
shft_reg <= 0;
int_reg <= 0;
decim_reg <= 0;
end
else
if(load)
begin
shft_reg <= data_in;
int_reg <= shft_reg;
end
else
if(hold) decim_reg <= decim_reg;
else
begin
shft_reg <= {data_in, shft_reg};
int_reg <= int_reg;
decim_reg <= int_reg;
end 一个需要二个周期完成,一个是在一个周期完成 为什么?<br>
难以理解 再有,在电路结构上有什么异同没?
http://bbs.vibesic.com/images/smilies/default/smile.gif if else 语句是一个顺序语句,第一个例子,两个进程是并行的关系,也就是说它们同时执行到每个寄存器级;而第二个是单个进程,经过多路器顺序判断。<br>
<br>
具体的差别,应该是 如果 else 成立的话, 执行的 delt 最小时间个数会有区别。<br>
<br>
从逻辑结果上来看没有区别,你最好用你自己的综合器,综合以后看看得到的具体电路有什么区别,这样最保险。
http://bbs.vibesic.com/images/smilies/default/smile.gif 楼上说的很好,从描述上来看可能有区别,但综合器综合出来的结果可能是一样的,从代码风格来说,第二种描述要好一些。 就是综合后的电路看不出啥区别才来问的
http://bbs.vibesic.com/images/smilies/default/smile.gif 1  always @(posedge clk)<br>
2    if(rst)<br>
3       begin<br>
4          shft_reg <= 0;<br>
5          int_reg <= 0;<br>
6         decim_reg <= 0;<br>
7       end<br>
8     else<br>
9    if(load)<br>
10         begin<br>
11            shft_reg <= data_in;<br>
12            int_reg <= shft_reg;<br>
13           end<br>
14       else<br>
15      if(hold)   decim_reg <= decim_reg;<br>
16      else<br>
17      begin<br>
18          shft_reg <= {data_in, shft_reg};<br>
19           int_reg <= int_reg;<br>
20          decim_reg <= int_reg;<br>
21         end<br>
<br>
我水平有限,有个疑问。<br>
第二种写法,<br>
如果load=1 成立 程序 执行10-13行 后 <br>
到14行的else 还会执行吗 <br>
请问高手 <br>
14 行的 else 成立后要执行什么? 是个执行空语句?<br>
<br>
9行的if和15行的if 是并列还是嵌套啊?<br>
<br>
请指点 谢谢 楼上讲的有道理
		页: 
[1] 
2 
	
