VVC 发表于 2010-6-26 02:13:38

下列两种表述有何差别?

本帖最后由 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;

FFT 发表于 2010-6-26 03:28:32

本帖最后由 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

ups 发表于 2010-6-26 04:20:41

一个需要二个周期完成,一个是在一个周期完成

ATA 发表于 2010-6-26 05:06:58

为什么?<br>
难以理解

VVC 发表于 2010-6-26 06:02:43

再有,在电路结构上有什么异同没?
        http://bbs.vibesic.com/images/smilies/default/smile.gif

ups 发表于 2010-6-26 07:44:36

if else 语句是一个顺序语句,第一个例子,两个进程是并行的关系,也就是说它们同时执行到每个寄存器级;而第二个是单个进程,经过多路器顺序判断。<br>
<br>
具体的差别,应该是 如果 else 成立的话, 执行的 delt 最小时间个数会有区别。<br>
<br>
从逻辑结果上来看没有区别,你最好用你自己的综合器,综合以后看看得到的具体电路有什么区别,这样最保险。
        http://bbs.vibesic.com/images/smilies/default/smile.gif

longtime 发表于 2010-6-26 09:26:00

楼上说的很好,从描述上来看可能有区别,但综合器综合出来的结果可能是一样的,从代码风格来说,第二种描述要好一些。

CCIE 发表于 2010-6-26 09:49:33

就是综合后的电路看不出啥区别才来问的
        http://bbs.vibesic.com/images/smilies/default/smile.gif

ICE 发表于 2010-6-26 11:24:47

1&nbsp;&nbsp;always @(posedge clk)<br>
2&nbsp; &nbsp; if(rst)<br>
3&nbsp; &nbsp;&nbsp; &nbsp; begin<br>
4&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; shft_reg &lt;= 0;<br>
5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; int_reg &lt;= 0;<br>
6&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;decim_reg &lt;= 0;<br>
7&nbsp; &nbsp;&nbsp; &nbsp; end<br>
8&nbsp; &nbsp;&nbsp;&nbsp;else<br>
9&nbsp; &nbsp; if(load)<br>
10&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;begin<br>
11&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;shft_reg &lt;= data_in;<br>
12&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;int_reg &lt;= shft_reg;<br>
13&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;end<br>
14&nbsp; &nbsp;&nbsp; &nbsp; else<br>
15&nbsp; &nbsp;&nbsp; &nbsp;if(hold)&nbsp; &nbsp;decim_reg &lt;= decim_reg;<br>
16&nbsp; &nbsp;&nbsp; &nbsp;else<br>
17&nbsp; &nbsp;&nbsp; &nbsp;begin<br>
18&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; shft_reg &lt;= {data_in, shft_reg};<br>
19&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int_reg &lt;= int_reg;<br>
20&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; decim_reg &lt;= int_reg;<br>
21&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;end<br>
<br>
我水平有限,有个疑问。<br>
第二种写法,<br>
如果load=1 成立 程序 执行10-13行 后 <br>
到14行的else 还会执行吗 <br>
请问高手 <br>
14 行的 else 成立后要执行什么? 是个执行空语句?<br>
<br>
9行的if和15行的if 是并列还是嵌套啊?<br>
<br>
请指点 谢谢

ANG 发表于 2010-6-26 12:21:22

楼上讲的有道理
页: [1] 2
查看完整版本: 下列两种表述有何差别?