模型功能

  • module是verilog中层次划分的基本单元
  • 通过module之间的调用,可以实现硬件描述层次的提高
  • 端口列表则是module的输入输出,和数字电路的走线连接等效
  • 基于module的不断地叠加,verilog可以完成从底层的与或门到复杂数字系统的逐步设计

模型框图

//module define
module A#(
input i_clk
)( );
//module application
B #(
.MD_SIM(1'b1)
)u_B(
.i_clk(i_clk)
); endmodule

实现步骤

  1. 确认模块的名称
  • 模块名是调用该模块的句柄,一个工程中不允许存在同一个模块
  • 但是如果是封装为IP,采用OOC的综合方式,则vivado是支持在不同IP中使用同样命名的模块
  • 一般模块的命名突出功能特点
  • 比如硬件模块BRAM、FIFO,总线转接模块AXISMART,测试激励模块tb_bram等
  • 只要能一眼看出模块的作用即可
  1. 确认模块的参数列表
  • 和C语言的函数的参数类似,verilog的模块也是可以传递参数的
  • 参数作为整个模块的常数项,可以随意插入而不用考虑时序问题,是模块灵活通用的关键所在
  • 一般位宽、硬件信息、延时大小等用户参数,均需要通过参数列表进行传递
  1. 确认模块的信号列表
  • 与参数不同,信号的输入输出必须考虑到时序问题和方向问题
  • 一般信号的输入用于该模块的控制和数据的输入
  • 而信号的输出则是该模块的标志位和数据的输出
  • 但是这个只是对于一般模块级别的设计
  • 更加复杂的系统会引入各种操作总线,利用通用协议,实现各种握手交互
  • 所以
    • 一个信号列表应该对信号输入、信号输出、总线交互三个部分进行明确的区分
    • 才能具备很好的区分度和可维护性
  1. 模块的调用方法
  • 如前所示,模块的调用同样包括了参数部分和信号部分
  • 其中参数部分可以缺省
  • 信号部分输出可以缺省,输入缺省的话,则依赖编译器的处理逻辑
    • 比如vivado一般将缺省的输入置零
    • modelsim一般置为X
  1. generate在模块调用中的应用
  • 在C语言中,函数可以在for、if等结构中进行重复调用
  • 而verilog中,所有硬件并行执行,无法实现在for中按照步骤执行
  • 为了实现顺序执行,常采用状态机或者流水线去构建级联的硬件
    • 显然,这种方法将会造成很大调用问题
  • 在verilog中,实现级联逻辑一般用generate for
    • for的含义是将模块多次重复,依靠级联信号实现处理逻辑的步步执行
    • 这个方法可以有效地解决模块重复调用地问题
  • 当然,可以使用generate if对某些模块进行选择性执行
    • 但是,这里必须由常数对if的条件进行控制
    • 也就是说,信号是无法控制模块是否调用的
    • 要实现类似C的两个函数中选择一个执行,verilog需要将判断条件施加在输出上
  • 还有一个generate case,和if是类似的效果
generate genvar i;
for(i = 0; i < 3; i = i + 1)
begin:FOR_3
A u_A(
.i_clk(i_clk),
.i_dat1(3'h111),
.i_dat2(2'b11),
.i_dat3(1'b1)
);
end
endgenerate
  • 如上所示

    • 在for级联逻辑中,位宽的匹配是一个比较重要的点
    • 为了保证信号的准确性,位宽连接只存在两种格式:
      • 复制:输入信号不大于端口位宽,则复制该信号到所有模块
      • 对齐:输入信号位宽大于端口位宽,则将输入信号对齐至N*端口位宽(高位补零),然后按名称顺序匹配
    • 则示例中的三个数据结果为
      • FOR_3[2].u_A.i_dat1 = 1'b1(对齐)
      • FOR_3[1].u_A.i_dat2 = 1'b0(对齐)
      • FOR_3[0].u_A.i_dat3 = 1'b1(复制)
  • 所以,在使用generate for时,需要严格控制位宽,缺省位宽是不可取的,而直接写整型,则会被认为是32位宽的数据进行对齐

最终效果



调用接口

  • 示例模型,无调用接口

module的定义及端口的作用的更多相关文章

  1. TCP和UDP的135、137、138、139、445端口的作用

    如果全是2000以上的系统,可以关闭137.138.139,只保留445 如果有xp系统,可能以上四个端口全部要打开 无论你的服务器中安装的是Windows 2000 Server,还是Windows ...

  2. [转帖]TCP和UDP的135、137、138、139、445端口的作用

    TCP和UDP的135.137.138.139.445端口的作用 https://www.cnblogs.com/IvanChen/p/4500698.html 竟然不知道 端口具体是干什么的.. 如 ...

  3. font-family:黑体;导致css定义全部不起作用

    css文件里font-family: "黑体";这句会导致后面的css定义全部不起作用了. 只要把font-family: "黑体"; 改成 font-fami ...

  4. tomcat server.xml各个端口的作用

    <Server port="8005" shutdown="SHUTDOWN"> <!-- port:指定一个端口,这个端口负责监听关闭Tom ...

  5. OS考研复习笔记——操作系统的定义、目标、作用和发展的主要动力

    计算机系统由硬件和软件两部分组成.操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次补充. 硬件:计算机物理设备,即各种处理机存储器.输入/输出设备 ...

  6. 网络端口的作用及分类(转发:http://blog.csdn.net/dream_1996/article/details/73481201)

    一.什么是端口? 在开始讲什么是端口(port)之前,我们先来聊一聊什么是 port 呢?常常在网络上听说『我的主机开了多少的 port ,会不会被入侵呀!?』或者是说『开那个 port 会比较安全? ...

  7. tomcat 的配置文件server.xml 几个端口的作用

    tomcat中server.xml配置文件中几个port的作用和区别 在tomcat的server.xml中有这么几个port,很多人虽然一直在使用tomcat,但是却不知道这几个port各有什么作用 ...

  8. 关于tomcat中的三个端口的作用及其相关细节

    [一]端口内容 tomcat的端口号相关信息: Tomcat admin port——管理端口,允许你远程配置tomcat HTTP——正常的http协议 AJP——Apache JServ Prot ...

  9. Tomcat 8005/8009/8080/8443端口的作用

    --关闭tomcat进程所用.当执行shutdown.sh关闭tomcat时就是连接8005端口执行“SHUTDOWN”命令--由此,我们直接telnet8005端口执行“SHUTDOWN”(要大写, ...

  10. 原 tomcat的server.xml配置文件中三个端口的作用

    以Tomcat7.0为例, 在安装目录下. conf/server.xml 中可以配置三个端口号, 如果使用多个tomcat 是需要配置这三个. 该Connector 用于监听请求. protocol ...

随机推荐

  1. C语言,变长数组的用法

    在我的<C语言,结构体成员的地址>文章中,定义了一个demo_node结构体,其中用到变长数组char addr[0].本文以此为例,对C语言变长数组的基本用法展开介绍. typedef ...

  2. 从零开始手写 redis(三)内存数据重启后如何不丢失?

    前言 我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache. 我们在 从零手写 cache 框架(一)实现过期特性 中实现了 key 的过期特性. 本节,让我 ...

  3. IPNS和DNSLink的使用说明

    IPNS和DNSLink的使用说明 IPNS说明 IPNS全称InterPlanetary Name System,就是IPFS下的一个名称解析系统,类似于互联网的DNS,但是与DNS不同的是,IPN ...

  4. docker基于commit方式为镜像添加SSH服务

    下载启动镜像 docker pull ubuntu: 18.04 docker run -it ubuntu:18.04 bash 配置软件源 备份/etc/apt/sources.list#备份cp ...

  5. .NET周刊【2月第3期 2024-02-25】

    国内文章 4.1k Star!全面的C#/.NET/.NET Core学习.工作.面试指南 https://www.cnblogs.com/Can-daydayup/p/18027117 DotNet ...

  6. 【Python OO其一】构造函数__init__()

    Python对象包括三个部分:id(identity识别码).type(对象类型).value(对象的值) __ init __()构造函数 __ init __()方法应用定义构造函数,作用是在实例 ...

  7. Java链接Mysql数据库整理,尽管很简单,但还是分享出来,希望对那些初级朋友有所帮助!!!

    Java MySQL 连接 Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为: ...

  8. Redis灵魂11问

    目录 说说redis都有哪些数据类型吧 Redis为什么快呢? 那为什么Redis6.0之后又改用多线程呢? 知道什么是热key吗?热key问题怎么解决? 什么是缓存击穿.缓存穿透.缓存雪崩? 缓存击 ...

  9. 【Azure Spring Cloud】在Azure Spring Apps上看见 App Memory Usage 和 jvm.menory.use 的指标的疑问及OOM

    问题描述 在Azure的Spring Cloud服务 (官名为:Spring Apps)中,在Metrics 页面中查看 App Memory Usage 和 jvm.memory.use,发现两则在 ...

  10. 隐私计算在释放万亿美元 SaaS 市场的重要作用

    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全.密码学.联邦学习.同态加密等隐私计算领域的技术和内容. 过去十年间数字领域经历了一场颠覆性的转变.这一演变的前沿是软件即 ...