Verilog中generate语句的用法

2023-11-07

Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计提供了方便,generate语句一般在循环和条件语句中使用,为此,Verilog-2001增加了四个关键字generate,endgenerate, genvar, localparam,genvar是一个新增的数据类型,用在generate的循环中的标尺变量必须定义为gnevar类型;

下面举例说明generate的用法:

首先设计一个1bit位宽的buffer_1:

 //1bit width buffer_1
 
 module buffer_1(
     input    wire    in,
     output   wire    out
 );
     assign out = ~in;
 
 endmodule

在buffer_8中例化buffer_1 8次,这里有几点需要注意:

  • 循环变量i必须是genvar类型的,不可以是reg型,integer型;
  • for循环之后的的begin最好加上一个标号(BLOCK1);

 

//8bit width buffer
  
  module buffer_8(
      input    wire[7:0] din,
      output   wire[7:0] dout
  );
      
      // Generate block
      genvar i;
     generate
         for(i=0; i<8; i=i+1) begin:BLOCK1
             buffer_1 buffer_1_1(.in(din[i]), .out(dout[i]));
        end
     endgenerate
 
 endmodule

 这里给出了一个简单的顶层:

//testbench
  module buffer_8_tb;
       // reg & wire define area
       reg [7:0] din;
       wire[7:0] dout;
  
       // Instance the DUT
        buffer_8 buffer_8_1(
          .din  (din    ),
          .dout (dout   )
       );
       
       // Generate the stimulate
       initial begin
                din = 8'd7;
           #10; din = 8'd6;
           #10; din = 8'd4;
           #10; din = 8'd7;
           #10; $finish();
        end
 
 endmodule

在generate语句中可以出现以下三种语句:

(1)generate...loop循环语句

(2)generate...case分支语句

(3)generate...conditional条件语句

generate语句的格式如下:

generate
//generate...loop循环语句

//generate...case分支语句

//generate...conditional条件语句

//嵌套的generate语句
endgenerate

1.generate循环语句 

generate循环语句被用于(verilog编译)细化阶段的语句复制,允许对结构元素编写一个for循环,下面的例子是一个N位异或门。

module nbit_xor
 #(parameter SIZE=16)
 (input(SIZE-1:0) a,b,output[SIZE-1:0] y);
 genvar gv_i;
 generate
    for(gv_i=0;gv_i<SIZE;gv_i++)
	  begin:sblka
	       xor uxor(y[gv_i],a[gv_i],b[gv_i]);
	  end
 endgenerate
endmodule

for循环中使用的循环变量gv_i被称为genvar变量,这种变量必须用genvar来声明,并且只能在generate循环语句中使用;此外,generate块需要标签,用来表示循环的实例化名称,在上例中是sblka.

2.generate-conditional条件语句 

generate条件语句允许在细化期间对语句进行条件选择。generate条件语句最常见的格式如下:

if(condition)
  statements
else
  statements

condition必须是一个静态的条件,即在细化期间计算的出。statements可以是任何能够在模块中出现的语句,例如always语句。注意,由于条件的值可能取决于从上层模块中传递过来的参数,因此条件的值可能不能再细化期间被完全算出来。下面举一个用generate条件形式的例子:

module adder
 #(parameter SIZE=4)
 (input[SIZE-1:0] a,b,
  output[SIZE-1:0] sum,
  output carry_out);
  wire [SIZE-1:0] carry;
  
  genvar gv_k;
  generate
    for(gv_k=0;gv_k<SIZE;gv_k++)
	   begin: gen_blk_adder
	      if(gv_k == 0)
		     half_adder u_ha (.a(a[gv_k]),
			                  .b(b[gv_k]),
							  .sum(sum[gv_k]),
							  .carry_out(carry[gv_k]),
							  );
		  else
		     full_adder u_ha (.a(a[gv_k]),
			                  .b(b[gv_k]),
							  .sum(sum[gv_k]),
							  .carry_in(carry[gv_k-1]),
							  .carry_out(carry[gv_k]),
							  );
	   end
  endgenerate
endmodule 

3.generate-case分支语句 

generate分支语句与条件语句类似,只不过分支语句是用分支来进行条件选择,给出下面的例子:

module adder
 #(parameter SIZE=4
   parameter IMPLEMENTATION_LEVEL=0)
 (input[SIZE-1:0] arg1,arg2,
  output[SIZE-1:0] result,
  );
  
  generate
    case(IMPLEMENTATION_LEVEL)
       0: assign result=arg1+arg2;
	   1:.....;
	   2:.....;
	   3:.....;
	   default:......;
  endgenerate
endmodule 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Verilog中generate语句的用法 的相关文章

  • 一分钟教你看懂蓝屏代码,轻松解决电脑蓝屏问题

    微软为了我们电脑中的资料安全可以说煞费苦心设计了很多有效的防护机制 其中蓝屏就是一个很好的给保护机制 接下来小编就提供一些经常出现的电脑蓝屏代码给大家 电脑蓝屏问题可以说只要使用过电脑朋友都遇到过 导致电脑蓝屏的原因有很多种 所有蓝屏代码也
  • 基于SM2密码算法的环签名方案的研究与设计

    摘要 环签名算法种类很多 大多数算法设计基于双线性对或大素数难分解 在安全性和运算速度方面有待提高 与基于椭圆曲线离散对数相比 双线性对的优势并不明显 因为它无法运用一样长度的密钥提供同样的安全性能 为了能够提升方案的安全性以及能够保证签名
  • JDK源码系列 & JAVA语言数据类型Byte

    目录 类的继承结构图 类的Diagram图 类 类的注释 源码分析 全局变量 静态内部类 构造方法 静态方法 parseByte 静态方法 valueOf 静态方法 toString 静态方法 hashCode 静态方法 decode 静态
  • 简述osi参考模型各层主要功能_OSI与TCP/IP简述

    OSI与TCP IP 二者区别 OSI参考模型定义计算机通信每层的功能 不是协议 TCP IP协议是具体的协议 实现了OSI参考模型规定的功能 参考下图 OSI参考模型每层功能 应用层 根据互联网中需要通信的应用程序的功能 定义客户端和服务
  • Android 显示提示框

    本文档为个人博客文档系统的备份版本 作者 小游 作者博客 点击访问 代码如下 Toast makeText context things happened Toast LENGTH SHORT show
  • go 命名与包;关于 ++/--;接收键盘输入/终端输入;switch;for 循环;函数;init 函数;匿名函数;闭包;defer;时间日期;内置函数;defer+recover 机制处理错误

    文章目录 命名与包 关于 接收键盘输入 终端输入 switch for 循环 函数 init 函数 匿名函数 闭包 defer 时间日期 内置函数 defer recover 机制处理错误 数组 代码 输出 命名与包 关于 接收键盘输入 终
  • drawio界面自定义配置

    1 适用的 drawio 版本 单机版 drawio 带有配置选项的单机版本 2 配置使用方法 点击配置 将json代码复制到弹窗中 点击应用即可 如果代码有错误 将无法应用 3 相关json代码 官方json配置参考 https www
  • Internet Download Manager2023最好用的HTTP下载神器

    Internet Download Manager 介绍2023最佳下载利器 Internet Download Manager 简称IDM 是一款Windows 平台功能强大的多线程下载工具 国外非常受欢迎 支持断点续传 支持嗅探视频音频
  • 一个 Go 开发的快速、简洁、美观、前后端分离的个人博客系统

    大家好 我是你们的章鱼猫 我们从来不含糊说推荐就推荐 所以今天给大家推荐一个 go echo vue 开发的快速 简洁 美观 前后端分离的个人博客系统 blog 同时基于这个系统也可以方便二次开发为 CMS 内容管理系统 和各种企业门户网站
  • 嵌入式 - UART使用进阶

    UART Advanced Features 概要 Overview 最简单直接的使用UART接口的方式 是在轮循操作中来设置和处理UART接口 轮询式UART的问题是轮询方式本身就是低效率的 如果我们的UART被配置为115200的波特率
  • vue踩坑之H5页面在ios的webview里面,长时间放到后台按钮失灵

    使用的前端技术栈是vue2 运行环境是在webview里面 具体的现象 在ios真机中 如果应用在后台运行几分钟再切回去 页面中的所有跳转按钮会失灵 并且报以下图片显示的错误 chunk是build之后的文件 从报错的信息来看是打包的某些文
  • 深入Java微服务之网关系列2:常见Java网关实现方案对比

    什么是服务网关 前文我们已经了解了构建微服务的基础springboot 同时也能使用springboot构建服务 接下来我们就基于springboot聊一下springcloud 这个springcloud并不是一个特定的技术 它指的是微服
  • this关键字和super关键字异同

    this关键字 1 在同一类中成员变量和局部变量名称相同时 区分两者和调用成员变量解决两者冲突问题 2 同一类中调用调用构造方法 3 指明成员方法 super关键字 1 在父类和子类中有相同变量时 调用父类变量 2 调用父类构造方法 必须放
  • 国内时间同步 ntp服务器地址

    国内时间同步 ntp服务器地址 ntp sjtu edu cn 202 120 2 101 上海交通大学网络中心NTP服务器地址 s1a time edu cn 北京邮电大学 s1b time edu cn 清华大学 s1c time ed
  • mysql8安装和驱动jar包下载

    方式一 基于docker安装 下拉镜像 docker pull mysql 8 0 21 启动镜像 docker run p 3307 3306 name mysql e MYSQL ROOT PASSWORD hadoop d mysql
  • 路由ui-router

    路由ui router Angular ngRoute针对于单视图 而ui router可用于多视图 这里说的视图是指在页面内我们可控制的 可变化的区域 比如我们点击了一个link 我们需要在视图中跳转到指定的一个页面 那么ngRoute已
  • 【Electron-vue】构建桌面应用(30)- child_proccess多次输出结果

    使用child process启动子进程 并与子进程通信的时候 发现会有多条打印结果 其原因是 不同的操作会触发stdin write操作 而每一个操作都需要通过stdout on来监听返回结果 如果使用stdout on来监听返回结果 那
  • 千聊视频的爬取

    import requests import random import os filedir 摩羯座周期下的黄金市场 if not os path exists filedir os makedirs filedir print 目录创建

随机推荐

  • 【BZOJ 2219】【超详细题解】数论之神

    2219 数论之神 Time Limit 3 Sec Memory Limit 259 MB Submit 365 Solved 33 Submit Status Discuss Description 在ACM DIY群中 有一位叫做 傻
  • 电机控制学习之路:simulink仿真之速度环、电流环PI参数设计

    前言 首先声明 笔者在电机控制之路也只是一个新手 撰写本文主要是为了对自己学习内容做一个总结和记录 网上FOC双闭环控制时的PI调参方法种类繁多 笔者在看的眼花缭乱之后以德州仪器的InstaSPIN FOC and InstaSPIN MO
  • 英语专栏——shell account

    shell account 外壳账号 A class of cheap but restricted internet dial up access Instead of connecting the computer directly t
  • ensp模拟器中云设备的使用及相关问题解决办法

    ensp模拟器中云设备的使用及相关问题解决办法 eNSP工具中的云代表通过各种网络技术连接起来的计算机网络环境 目前可实现的功能包括 仿真设备之间建立映射关系 绑定网卡与仿真设备之间进行通信 以及通过开放UDP端口方式与外部程序进行通信 基
  • Oracle-SQL脚本记录

    多字段匹配关键词查询 旧写法 where email like abc or address like abc 组合查询写法 where concat email address like abc
  • c语言练习题 ATM机流程

    自学c语言自娱自乐的 看到有的练习题上有模拟ATM机流程的练习就试着写了一个 include
  • 开源的杀毒软件

    开源的杀毒软件 有 免费的午餐 我们为什么不吃呢 杀毒软件一定要购买或用D版吗 先别忙着下结论 请耐心看完本文 然后再告诉我你是怎么想的 一 ClamWin Free Antivirus 开源反病毒软件 GPL协议 SourceForge页
  • Vmware 分辨率设置

    1 点击查看 2 点击自动调整大小 3 选择自动适应客户机即可
  • 简单怕忘笔记

    1 and REGEXP LIKE 字段名 匹配串1 匹配串2 全模糊匹配 2 and REGEXP LIKE 字段名 匹配串1 匹配串2 右模糊匹配 3 and REGEXP LIKE 字段名 匹配串1 匹配串2 左模糊匹配 4 LTRI
  • GNSS精密单点定位(PPP)基本原理(进阶篇)

    上节介绍了精密单点定位的基本原理 本文继续在精密单点定位的基础上进行更深层次的介绍 一 精密单点定位的函数模型 上节说过 在精密单点定位之前 也有一种绝对定位技术 那就是伪距单点定位 伪距单点定位靠的伪距进行单点定位 但是伪距的精度较差 主
  • 字符串转int数据类型的三种方式

    方法一 Integer valueOf 它将返回一个包装器类型 Integer 当然可以通过自动拆箱的方式将其转成 int 类型 String a 100 String b 50 int A Integer valueOf a int B
  • 睿智的智能优化算法3——利用遗传算法实现字符串配对

    睿智的智能优化算法3 利用遗传算法实现字符串配对 字符串配对 求解过程 1 编码方式 2 计算适应度 3 自然选择 4 基因突变 5 个体杂交 实现代码 GITHUB下载连接 好久都没有用过遗传算法了 觉得需要重新复习一下 而且考虑到遗传算
  • hive窗口函数(开窗函数)

    一 窗口函数概述 窗口函数 Window functions 是一种SQL函数 非常适合于数据分析 因此也叫做OLAP函数 其最大特点是 输入值是从SELECT语句的结果集中的一行或多行的 窗口 中获取的 你也可以理解为窗口有大有小 行有多
  • Tomcat服务器配置Https协议

    前言 日常开发项目时 一般本机都是基于http协议 但是要实现某些需求必须要开启https协议 现在https协议已经成为主流 网站如果未开启https协议 浏览器会进行安全提示 本文以Tomcat服务器为例 简单介绍如何在本机开发环境配置
  • ② 尚品汇的前台开发笔记【尚硅谷】【Vue】

    文章目录 八 加入购物车 路由跳转之前发请求 api 请求接口 将数据存储到服务器里 判断加入成功 或 失败 成功后进行路由跳转 开始进行路由跳转 并进行路由传参 开始渲染页面 购物车静态组件与修改 九 完成ShopCart购物车模块业务
  • 使用algorithm中的sort进行vector的自定义排序

    名称 使用algorithm中的sort进行vector的自定义排序 说明 可以使用sort进行自定义排序 不过要定义比较函数 在此处的比较 函数为Compare 名字可以任取 在比较函数中 定义自己的排序方式 然后在sort函数中传入函数
  • idea将本地新项目上传至svn

    目录 第一步 将本地代码交给svn管理 第二步 将代码提交至svn 第一步 将本地代码交给svn管理 1 file gt setting进入设置 2 点击Version Control gt 点击 加号 gt 选择本地项目文件 gt 选择S
  • 修改Mysql数据库的用户名和密码【详细】

    数据库的用户名默认是root 1进入到Mysql 首先要登录数据库 1win r输入cmd 管理员身份打开 或者 2搜索输入命令提示符 2 输入mysql uroot p点击回车 注意 mysql默认用户名是root 我以前修改过 所以我输
  • 看起来很长但还是有用的Spring学习笔记

    本文首发于泊浮目的专栏 https segmentfault com blog Spring致力于提供一种方法管理你的业务对象 在大量Java EE的应用中 随处可见Spring 今天我将简单的介绍一下Spring这个框架 本文适合读者 想
  • Verilog中generate语句的用法

    在Verilog 2001中新增了语句generate 通过generate循环 可以产生一个对象 比如一个元件或者是一个模块 的多次例化 为可变尺度的设计提供了方便 generate语句一般在循环和条件语句中使用 为此 Verilog 2