生成块(generate)

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

生成语句能够控制变量的声明,任务活函数的调用,还能对实例引用进行全面的控制。编写代码时候必须在模块中说明生成的实例范围,关键字generate endgenerate用来指定改范围。

生成实例可以是以下的一个或者多个类型:

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

生成的声明和生成的实例能够在设计中被有条件的条用(实例引用)。在设计中可以多次调用(实例引用)生成的实例和生成的变量声明。生成的实例具有唯一的标识名,因此可以用层次命名规则引用。为了支撑结构话的元件与过程块语句的相互连接,verilog语言允许在生成范围内声明下列数据类型:

  1. net,reg
  2. Integer,real,time,realtime
  3. Event

生成的数据类型具有唯一的标识名,可以被层次引用。此外,究竟是按照次序或者参数名赋值的参数重新定义,还是只用defparam声明的参数重新定义,都可以在生成范围中定义。

任务和函数的声明也允许出现在生成范围之中,但是不能出现在循环生成当中。生成任务和函数同样具有唯一的标识符名称,可以被层次引用。

在verilog中有3中创建生成语句的方法,他们是:

  1. 循环生成;
  2. 条件生成;
  3. Case生成;

1 循环生成语句

循环生成语句允许使用者对下面的模块活模块项进行多次实例引用:

  1. 变量声明;
  2. 模块;
  3. 原语;
  4. 连续赋值语句
  5. initial和always块

从例子中可以观察到下面几个有趣的现象:

  1. 在仿真开始之前,仿真器会对生成块中的代码进行展平,将生成块转换为展开的代码,然后对展开的代码进行仿真。因此,生成块的本质是使用循环内的一条语句来代替多条重复的Verilog语句,简化用户的编程。
  2. 关键词genvar用于声明生成变量,生成变量只能用在生成块之中,在确立后的仿真代码中,生成变量是不存在的。
  3. 一个生成变量的值只能有循环语句来改变。
  4. 循环生成语句可以嵌套使用,不过使用同一个生成变量作为索引的循环生成语句不能相互嵌套。
  5. Xor_loop是赋予循环生成语句的名字,目的在与通过它对循环生成语句之中的变量进行层次话引用。

2 条件生成语句

条件生成语句类似于if_else_if的生成构造,该结构可以在设计模块中根据经过仔细推敲并确定表达式,有条件的调用以下verilog结构:

  1. 模块;
  2. 原语;
  3. 连续赋值语句;
  4. initial或always块。

          

3 case 生成语句

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值