下列两种表述有何差别?
本帖最后由 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