博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Verilog中关于for与generate for用法和区别的一点愚见
阅读量:2028 次
发布时间:2019-04-28

本文共 1523 字,大约阅读时间需要 5 分钟。

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

关于generate for的总结见博文:

还是举这个例子:

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

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

module top_module(     input [7:0] in,    output [7:0] out);    genvar i;    generate        for(i = 0; i < 8; i = i + 1) begin : bit_reverse            assign out[i] = in[7 - i];        end            endgenerate endmodule

综合后的原理图:

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

module top_module(     input [7:0] in,    output [7:0] out);    reg [7:0] out;    always@(*) begin: bit_reverse        integer i;        for(i = 0;i <8; i = i + 1) begin            out[i] = in[7-i];        end    endendmodule

综合后的原理图:

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


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

module top_module(input sysclk,input [3:0] a,output [3:0] temp);reg [3:0] temp = 0;genvar i;generatefor (i = 0; i < 4 ; i = i + 1) begin: timing_logic    always @(posedge sysclk) begin        temp[i] <= a[i];    endendendgenerateendmodule

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

下面用for来实现:

module top_module(input sysclk,input [3:0] a,output [3:0] temp);reg [3:0] temp = 0;always @(posedge sysclk) begin: timing_logicinteger i;  for (i = 0; i < 4 ; i = i + 1) begin    temp[i] <= a[i];    endendendmodule

 

你能看出区别吗?

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


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

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


最后说下:

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

群二维码见链接:

 

 

 

 

 

转载地址:http://gmjaf.baihongyu.com/

你可能感兴趣的文章
迎接五大趋势 拥抱两个世界
查看>>
[置顶] 电信系统方案 >> 电信Boss系统
查看>>
英特尔诺基亚联手研发Symbian系统的智能手机
查看>>
怎样成为优秀的软件模型设计者?
查看>>
解决spring和struts配合问题
查看>>
嵌入式系统Linux内核开发工程师必须掌握的三十道题
查看>>
产品管理系列(一)---优秀的产品经理所具有的素质
查看>>
架构师之路(5)---IoC框架
查看>>
ExtJS 实现的Web文件管理系统
查看>>
SOA架构师注意的问题
查看>>
最佳拍档:首席市场官与首席技术官
查看>>
CIO领导力必会的八大诀窍
查看>>
李开复创立天使投资 柳传志郭台铭等投资八亿元
查看>>
Linux Network Load Balance(Linux下实现负载均衡)
查看>>
我对CTO的理解 CTO要有技术魅力
查看>>
CIO应该考虑的九个外包神话和现实
查看>>
微软技术节(TechFest 2010)最前沿技术汇总
查看>>
新技术,源于新动力
查看>>
用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
查看>>
java 起步
查看>>