当前位置: 首页 > news >正文

【无标题】Verilog中generate的用法

在使用FPGA设计时,可通过generate来简单的实现重复例化。对于generate语法具有三种形式分别为:
(1)generate case
(2)generate if
(3)generate for

一、模板的调用

如果使用Vivado工具进行设计可以直接使用工具的模板功能来对函数进行调用。
点击菜单栏的Tools,选择Language Templates。
在这里插入图片描述

点击搜索图标,输入generate即可看到下图所示模板。
在这里插入图片描述

在上图中,表示变量,表示循环次数,

二、语法使用实例

1、generate case
从该语法中可以看出具有case,因此,该语法主要用于选择性综合电路,Vivado工具中给出的语法模板如下:

   generatecase (<constant_expression>)<value>: begin: <label_1><code>end<value>: begin: <label_2><code>enddefault: begin: <label_3><code>endendcaseendgenerate

generate case和generate if作用上是差不多的,都是用于选择性综合电路,区别就是if语句和case语句的区别,如果你会用其中一个,那另一个也很简单,模板如下:


```c
generate
case ()
: begin:
end
: begin:
end
default: begin:
end
endcase
endgenerate
上面的例子照着改就是这样了:
module xor_test(
input[4:0]a,
input[4:0]b,
output[4:0]out
);
localparamintegerPOL = 1;//根据POL的值来生成对应的电路
generate
case(POL)
1'b1: begin: POL1
assignout = a + b;
end
1'b0: begin: POL0
assignout = a - b;
end
default:begin:DEFAULT end
endcase
endgenerate
endmodule

一、generate if
generate if的使用场景和条件编译语句类似,比如你的代码中包含了一个加法模块和一个减法模块,对于2个输入a和b,希望使用POL来进行控制:如POL=1则进行加法,反之亦然----POL=1----out = a + b;POL=0----out = a - b。
代码是这样写的:

module xor_test(
input[4:0]a,
input[4:0]b,
output[4:0]out
);
localparamintegerPOL = 1;//根据POL的值来生成对应的电路
generate
if (POL == 1) begin: POL1
assignout = a + b;
end else begin: POL0
assignout = a - b;
end
endgenerate
endmodule

定义成POL = 1时会由vivado综合成一个加法器:
在这里插入图片描述
定义成POL = 0时则会由vivado综合成一个减法器:
在这里插入图片描述

假如不使用generate if语法,则代码是这样的:

module xor_test(
input[4:0]a,
input[4:0]b,
inputPOL,
outputreg[4:0]out
);
always@(*)begin
if(POL == 1)
out = a + b;
else
out = a - b;
end
endmodule

这样综合出来的就是加法电路和减法电路一起:
在这里插入图片描述

使用generate if可以根据需要来灵活地生成对应电路,不会浪费资源,适用于某些根据特定需求来实现电路的场景。而不使用该语句则会把所有潜在的电路均综合出来,会使电路面积增大,但是灵活性却较高。
这是vivado自带的语法模板:

generate
if () begin:;end else if () begin:;end else begin:;endendgenerate

二、generate for

假设我希望把2个输入a[4:0]和b[4:0]做一个异或操作,但是顺序要颠倒,也就是这样:

module xor_test(
input[4:0]a,
input[4:0]b,
output[4:0]out);
assignout[4] = a[4] ^ b[0];
assignout[3] = a[3] ^ b[1];
assignout[2] = a[2] ^ b[2];
assignout[1] = a[1] ^ b[3];
assignout[0] = a[0] ^ b[4];
endmodule

在vivado中分析出来是这样的:很简单就是两个输出的不同为做一个异或运算。
在这里插入图片描述

vivado综合出来是这样的:用了几个LUT来实现异或功能。
在这里插入图片描述

http://www.dtcms.com/a/524420.html

相关文章:

  • 代码随想录 105.从前序与中序遍历构造二叉树
  • 微信网站公司用wordpress还是用框架
  • 电子电气架构 --- 汽车软件开发基础V模型
  • 国产数据库替代MongoDB的技术实践过程:金仓多模数据库在电子证照系统中的深度应用
  • 【MATLAB例程】自适应渐消卡尔曼滤波,背景为二维雷达目标跟踪,基于扩展卡尔曼(EKF)|附完整代码的下载链接
  • 【开题答辩全过程】以 博客系统的设计与实现为例,包含答辩的问题和答案
  • 基于 OpenHarmony 分布式数据服务重构 BCI 脑机接口通信系统
  • 投资交易网站开发商标图案大全大图 logo
  • 甘肃住房和城乡建设局网站宁波公司建网站哪家好
  • LangChain第三页【操作指南】_【如何创建一个自定义对话模型类】翻译完成
  • 专题:2025AI+直播+私域电商行业洞察报告|附200+份报告PDF、数据仪表盘汇总下载
  • 贝锐蒲公英R300S升级:内置三网通卡,联通、电信、移动智能切换
  • 拼接显示技术方案介绍:重塑视觉体验,赋能多元场景
  • 个人博客网站的建设结构图域名解析后怎么建网站
  • python做网站项目购物平台推荐
  • C语言需要掌握的基础知识点之链表
  • 学习Docker前提:多环境安装Docker
  • SpringBoot实战(三十九)集成 FreeMarker
  • 除自身以外数组的乘积(二)
  • 指针数组和指针数组区别
  • 怎么用云主机做网站天津市建设厅注册中心网站
  • flutter使用getx做一个todolist
  • 威海市住房和城乡建设局官方网站广东省公路建设有限公司网站
  • 5.深度学习:从Softmax到模型评估
  • 吴恩达深度学习课程一:神经网络和深度学习 第三周:浅层神经网络(二)
  • 在优豆云免费云服务器上搭建与配置Apache的实践笔记
  • 网站开发设计是前端吗伯维网站建设
  • 成都seo优化公司搜素引擎优化
  • Cesium中的倒立四棱锥:从几何结构到交互式3D可视化
  • 从传统架构到云原生,如何应对数据增长挑战?