集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 4925|回复: 12

下列两种表述有何差别?

[复制链接]
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[31:24] <= data_in;
  int_reg <= shft_reg;
  end
else
  begin
  shft_reg <= {data_in, shft_reg[31:8]};
  int_reg <= int_reg;
  end
always @(posedge clk)
if(rst)
decim_reg <= 0;
else
if(hold) decim_reg <= decim_reg;
else  decim_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[31:24] <= data_in;
    int_reg <= shft_reg;
   end
else
if(hold) decim_reg <= decim_reg;
else
  begin
  shft_reg <= {data_in, shft_reg[31:8]};
  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 | 显示全部楼层
再有,在电路结构上有什么异同没?
       
ups 发表于 2010-6-26 07:44:36 | 显示全部楼层
if else 语句是一个顺序语句,第一个例子,两个进程是并行的关系,也就是说它们同时执行到每个寄存器级;而第二个是单个进程,经过多路器顺序判断。<br>
<br>
具体的差别,应该是 如果 else 成立的话, 执行的 delt 最小时间个数会有区别。<br>
<br>
从逻辑结果上来看没有区别,你最好用你自己的综合器,综合以后看看得到的具体电路有什么区别,这样最保险。
       
longtime 发表于 2010-6-26 09:26:00 | 显示全部楼层
楼上说的很好,从描述上来看可能有区别,但综合器综合出来的结果可能是一样的,从代码风格来说,第二种描述要好一些。
CCIE 发表于 2010-6-26 09:49:33 | 显示全部楼层
就是综合后的电路看不出啥区别才来问的
       
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[31:24] &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[31:8]};<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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-6 13:51 , Processed in 0.064849 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表