博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Verilog 中如何无误使用 generate for?
阅读量:2028 次
发布时间:2019-04-28

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

用一个例子开题:

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

即完成输入输出位的反转。

当然我们可以直接进行8条assign out[1] = in[7];....;

但是如果是更多条如此的重复性赋值呢?我们自然知道要使用for语句,但是如何标准的使用呢?

下面介绍generate来完成这个工作。

生成语句可以动态的生成verilog代码,当对矢量中的多个位进行重复操作时,或者当进行多个模块的实例引用的重复操作时,或者根据参数的定义来确定程序中是否应该包含某段Verilog代码的时候,使用生成语句能大大简化程序的编写过程。

 生成语句生成的实例范围,关键字generate-endgenerate用来指定该范围。生成实例可以是以下的一个或多个类型:

(1)模块;(2)用户定义原语;(3)门级语句;(4)连续赋值语句;(5)initial和always块。

generate语句有generate-for,generate-if,generate-case三种语句。

这里重点介绍generate 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            endgenerateendmodule

效果:

好了,大概怎么写应该知道了吧,那么需要注意什么呢?

(1) 必须有genvar关键字定义for语句的变量。

(2)for语句的内容必须加begin和end(即使就一句)。

(3)for语句必须有个名字。

上面的代码可以用下面的代码代替:

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

最后指出一种,虽然没有使用generate,但是还可以为重复性的赋值提供便利:

module ex();always@() begin: block_name    integer i;    if() begin        for(i = 0; i < N; i = i + 1) begin            ......;        end    end    else begin        ......;    endendendmodule

 

 

 

 

 

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

你可能感兴趣的文章
英语突击队里程碑
查看>>
软工视频总结
查看>>
Map/reduce
查看>>
mysql 存储过程,临时表,游标
查看>>
Ehcache配置分布式缓存
查看>>
js 对象json用法举例
查看>>
crontab执行不了php的解决方法
查看>>
mongodb 对内存的严重占用以及解决方法
查看>>
tensorflow的Virtualenv安装方式安装
查看>>
Chrome.storage和HTML5中localStorage的差异
查看>>
三种EBS类型解析
查看>>
Solr ShingleFilter
查看>>
chrome 扩展开发需要了解的
查看>>
Linux中yum、rpm、configure使用介绍
查看>>
LeetCode003.Longest Substring Without Repeating Characters
查看>>
LeetCode019. Remove Nth Node From End of List
查看>>
LeetCode130. Surrounded Regions (思路及python解法)
查看>>
LeetCode179. Largest Number(思路及python解法)
查看>>
LeetCode227. Basic Calculator II(思路及python解法)
查看>>
LeetCode166. Fraction to Recurring Decimal(思路及python解法)
查看>>