Verilog中关于for与generate for用法和区别的一点愚见

举报
李锐博恩 发表于 2021/07/15 04:17:35 2021/07/15
【摘要】 这里不对二者进行全面的举例分析,因为水平有限,只是对这两者之间的区别有些疑惑,是不是for能用的地方,generate for也能用呢?又如何用呢? 关于generate for的总结见博文:Verilog 中如何无误使用 generate for? 还是举这个例子: https://hdlbits.01xz.net/wiki/Vectorr Given an 8-b...

这里不对二者进行全面的举例分析,因为水平有限,只是对这两者之间的区别有些疑惑,是不是for能用的地方,generate for也能用呢?又如何用呢?

关于generate for的总结见博文:Verilog 中如何无误使用 generate for?

还是举这个例子:

https://hdlbits.01xz.net/wiki/Vectorr

Given an 8-bit input vector [7:0], reverse its bit ordering.

即实现输出与输入之间的反转,这是一件重复性的工作,很容易想到用generate for结构,写法如下:(注意for要有名字)


  
  1. module top_module(
  2. input [7:0] in,
  3. output [7:0] out
  4. );
  5. genvar i;
  6. generate
  7. for(i = 0; i < 8; i = i + 1) begin : bit_reverse
  8. assign out[i] = in[7 - i];
  9. end
  10. endgenerate
  11. endmodule

综合后的原理图:

当然,也能用for来实现,只是写法略有不同,注意for不能单独使用,要放到always块内使用,且always块要有名字:


  
  1. module top_module(
  2. input [7:0] in,
  3. output [7:0] out
  4. );
  5. reg [7:0] out;
  6. always@(*) begin: bit_reverse
  7. integer i;
  8. for(i = 0;i <8; i = i + 1) begin
  9. out[i] = in[7-i];
  10. end
  11. end
  12. endmodule

综合后的原理图:

可见,针对这个例子,二者综合出来的电路没有任何区别,都能使用,只是写法不同,需要注意的要点也不同。


在实验一个例子,采用时序逻辑,能说明问题即可:


  
  1. module top_module(
  2. input sysclk,
  3. input [3:0] a,
  4. output [3:0] temp
  5. );
  6. reg [3:0] temp = 0;
  7. genvar i;
  8. generate
  9. for (i = 0; i < 4 ; i = i + 1) begin: timing_logic
  10. always @(posedge sysclk) begin
  11. temp[i] <= a[i];
  12. end
  13. end
  14. endgenerate
  15. endmodule

和我们想象的一样,用了四个触发器来延迟一拍。

下面用for来实现:


  
  1. module top_module(
  2. input sysclk,
  3. input [3:0] a,
  4. output [3:0] temp
  5. );
  6. reg [3:0] temp = 0;
  7. always @(posedge sysclk) begin: timing_logic
  8. integer i;
  9. for (i = 0; i < 4 ; i = i + 1) begin
  10. temp[i] <= a[i];
  11. end
  12. end
  13. endmodule

 

你能看出区别吗?

至少这两个例子,综合出来的电路完全没有区别,只是语法上的区别而已。


到这里,还不能给出结论,因为这只是凤毛麟角,两个最容易想到的例子而已。

各位如何看待,二者的区别在哪里?欢迎给出评论。


最后说下:

一年一度的校招又来了一段时间了,突然发现,一个人的力量是有限的,面对很多笔试,面试中的很多问题,也许会感到很无助,于是决定建立一个群,专门用来分享,讨论笔试面试题目。

群二维码见链接:https://blog.csdn.net/Reborn_Lee/article/details/99715080
 

 

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/99738300

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。