FPGA开发:模块 × 实例化

2024-09-08 02:36
文章标签 模块 开发 实例 fpga

本文主要是介绍FPGA开发:模块 × 实例化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

模块的结构

对于C语言,其基本单元为函数。与此类似,Verilog的基本设计单元称之为"模块"(block)。对于整个项目的设计思想就是模块套模块

一个模块由两个部分组成:一部分描述接口,一部分描述逻辑功能。

每个Verilog模块包含4个部分:端口定义、IO说明、内部信号声明、功能定义。且位于moduleendmodule之间,如下:

module block(a,b,c);input a,b;        //模块的输入,不需要规定类型output wire c;    //模块的输出,一定要规定类型wire d;        //定义内部信号assign d=a|b;    //组合逻辑输出assign c=d?a:b;    //组合逻辑输出
endmodule

1、模块名及端口

模块的端口声明了模块的输入输出口,相当于C语言函数的参数和返回值。格式如下:

  • module  模块名(端口名1,端口名2,...,端口名n);

如果将模块看作一个芯片,那么模块名就相当于芯片的名字(例如STM32F103C8T6),端口定义就相当于确定了这个芯片有哪些端口(引脚),而下面的IO声明就相当于规定引脚是输入还是输出。


2、IO声明

模块的端口可以是输入端口输出端口双向端口

对于输入端口:

input  [信号位宽-1:0]  端口名1;

input  [信号位宽-1:0]  端口名2;

……

input  [信号位宽-1:0]  端口名n;

对于输出端口:

output  [信号位宽-1:0]  端口名1;

output  [信号位宽-1:0]  端口名2;

……

output  [信号位宽-1:0]  端口名n;

对于双向端口:

inout  [信号位宽-1:0]  端口名1;

inout  [信号位宽-1:0]  端口名2;

……

inout  [信号位宽-1:0]  端口名n;

【注意】位宽可省略不写,此时就默认其位宽为1位。

【注意】对于信号位宽,N位宽就是指对应的端口由N根引脚组成。


3、内部信号声明

通常是声明wirereg型的变量。

reg  [位宽-1:0]  R变量1,...,R变量n;

wire  [位宽-1:0]  W变量1,...,W变量n;


模块的实例化

模块实例化是将一个模块作为组件使用在另一个模块中。这类似于在编程中在A函数里调用一个B函数。通过实例化,可以实现将复杂的设计按功能分解为更小的、可复用的一个个模块。

实例化有以下两种方法:

1、端口名重映射

假设我们有两个模块:一个是已经定义好的A模块,另一个是B模块,如下面的代码所示,B模块实例化了A模块。

  • A模块定义
module A(input wire [31:0] int1;input wire [31:0] int2;output wire [31:0] out;
);assign out = int1 + int2;
endmodule
  • B模块定义
module B(input wire [31:0] a;input wire [31:0] b;output wire [31:0] sum;
);endmodule
  • 实例化A模块
A u_A (.int1(a),    // 将B模块的输入 a 连接到子模块A的 int1 端口.int2(b),    // 将B模块的输入 b 连接到子模块A的 int2 端口.out(sum)   // 将子模块A的输出 out 连接到B模块的输出 sum
);

在B模块中,我们实例化了A模块,并且对这个实例取了一个名字"u_A"。实例化之后,通过端口映射,将B模块的端口 a、b 和 sum 分别连接到子模块B的端口 int1、int2 和 out。


2、位置映射

module B(input wire [31:0] a,input wire [31:0] b,output wire [31:0] sum
);// 实例化 A 模块,使用位置映射A u_A (a, b, sum);  // 依次将 a, b 和 sum 连接到子模块A的 in1, in2 和 out
endmodule

【注意】使用位置映射时,要特别注意端口的顺序必须与子模块的端口定义顺序一致,否则可能会导致错误的连接。


这篇关于FPGA开发:模块 × 实例化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146866

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做