Verilog:generate 您所在的位置:网站首页 verilog中if语句两个条件 Verilog:generate

Verilog:generate

2023-12-07 15:27| 来源: 网络整理| 查看: 265

文章目录 Abtract1、generate语法2、generate常用的几种情况举例说明1). generate-for循环语句2).generate-conditional条件语句3).generate-case分支语句 3、Conclusion4、generate-for 与 常规for 循环不同1)使用举例2)结论 参考链接:https://www.cnblogs.com/nanoty/archive/2012/11/13/2768933.html

Abtract

generate语句允许细化时间(Elaboration-time)的选取或者某些语句的重复。这些语句可以包括模块实例引用的语句、连续赋值语句、always语句、initial语句和门级实例引用语句等。细化时间是指仿真开始前的一个阶段,此时所有的设计模块已经被链接到一起,并完成层次的引用。

1、generate语法 定义genvar,作为generate种的循环变量。generate语句中定义的for语句,必须要有begin,为后续增加标签做准备。begin必须要有名称,也就是必须要有标签,因为标签会作为generate循环的实例名称。

可以使用在generate语句中的类型主要有:

module(模块)UDP(用户自定义原语)门级原语连续赋值语句initial或always语句

基本结构如下:

genvar 循环变量名; generate // generate循环语句 // generate 条件语句 // generate 分支语句 // 嵌套的generate语句 endgenerate 2、generate常用的几种情况举例说明 1). generate-for循环语句

在这里插入图片描述

2).generate-conditional条件语句

generate允许对语句进行条件选择,即将条件选择加入到generate中的for循环中,只例化条件成立时对应的语句或者module。 在这里插入图片描述 注意:generate-if中的条件只能是静态变量,如 genvar,parameter 等,可以这样想,Verilog是要综合为固定的硬件电路的,不能因为条件不同而综合的电路结构变化,所以静态变量才能保证电路结构相同。

// 错误代码:这样电路肯定会报错 a is not a constant generate if(a=b) begin:a_equals_b adder adder_u(.add1(a),.add1(c),.sum(sum)); end else begin adder adder_u(.add1(a),.add1(b),.sum(sum1)); adder adder_u(.add1(sum1),.add1(c),.sum(sum)); end endgenerate

换一种写法

// 先加了再说,取想要的结果 adder adder_u(.add1(a),.add1('b0),.sum(sum1)); adder adder_u(.add1(sum1),.add1(c),.sum(sum2)); adder adder_u(.add1(a),.add1(b),.sum(sum3)); adder adder_u(.add1(sum3),.add1(c),.sum(sum4)); always@(posedge clk) begin if(a==b) sum *-2001 for (i = 0; i < 3 ; i = i + 1) begin always @(posedge sysclk) begin temp[i]


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有