首页 > 其他分享 >module的定义及端口的作用

module的定义及端口的作用

时间:2024-03-25 22:11:34浏览次数:18  
标签:调用 模块 端口 module verilog 信号 generate 定义

模型功能

  • 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,verilog,信号,generate,定义
From: https://www.cnblogs.com/electricdream/p/18095384

相关文章

  • 学会在 C++ 中使用变量:从定义到实践
    C++变量变量是用于存储数据值的容器。在C++中,有不同类型的变量(使用不同的关键字定义),例如:int-存储整数(没有小数点),例如123或-123double-存储浮点数,带有小数点,例如19.99或-19.99char-存储单个字符,例如'a'或'B'。字符值用单引号括起来string-存储文本,例如......
  • 使用libvirt的端口转发,实现虚拟机跟外界互通
    参考Dynamicport-forwardingforNAT-edkvm/libvirtnetworksForwardingIncomingConnections在/etc/libvirt/hooks添加qemu脚本,模板如下,需要根据自己的配置进行修改:#!/bin/bash#usedsomefromadvancedscripttohavemultipleports:useanequalnumberofguest......
  • C语言:自定义数据类型——结构体
    文章目录结构体类型的声明结构体的声明结构体变量的创建和初始化结构的特殊声明结构体的自引用结构体内存对齐对齐规则修改默认对齐数结构体传参结构体类型的声明结构体的声明structtag{ member-list;//成员}variable-list;//变量名例如描述一个学生str......
  • vue props中定义属性
     vue在props中定义单个属性属性类型为布尔props:{ visible:Boolean,}, 定义单个属性类型为数字或者字符串,并添加默认内容props:{ aType:{ type:[String,Number], default:1 } },  vue 在props中定义多属性对象例如定义formValidate......
  • redis主从搭建(测试环境单机多端口)
    采用一主两从完成搭建,实现了主节点做写操作,从节点做读操作,并且主从会进行同步。步骤需要注意的有以下几点:replica-announce-ip设置为自己虚拟机的ip地址requirepass设置为无密码,否则主从节点将连接失败如果端口被占用,需要首先找到占用端口号的进程,然后将其杀死......
  • C++中用户自定义数据类型
    在C++中,用户自定义数据类型通常指的是通过struct、class、enum和typedef关键字定义的类型。这些自定义类型可以包含各种成员,包括基本数据类型、其他自定义类型、成员函数(对于class)、访问修饰符等。下面是这些自定义数据类型可以包含的组件的概述:结构体(struct)结构体是一种......
  • 实验二:通过Console端口对交换机进行配置
    目录实验目的:实验环境配置:实验原理:实验步骤:实验结果:实验分析:结论:实验目的:(1)掌握通过Console端口对交换机进行配置的方法。(2)理解并掌握交换机初始配置。实验环境配置:选择设备(一台PC和一台交换机)——连控制台线(PC0:RS232—交换机0:Console)——通过Console端口对交换机......
  • vue自定义指令及常用自定义指令#记录
    一、什么是自定义指令在vue官方文档中是这样描述的,自定义指令主要是为了重用涉及普通元素的底层DOM访问的逻辑。自定义指令主要分为全局自定义指令和局部自定义指令。二、自定义指令相关参数Vue2.X钩子函数:bind:自定义指令绑定到DOM后调用。只调用一次,指令第一次绑定到元素......
  • 实现自定义队列
    publicclassMyQueue{privateint[]array;privateintfront;privateintrear;publicMyQueue(intcapacity){this.array=newint[capacity];}publicvoidenQueue(intelement){if((rear+1)%array.length==front)......
  • 计算机常用端口号
    ftp:(20端口)用于ftp服务,用于数据传输。ftp:(21端口)用于文件上传和下载。ssh:(22端口)用于安全Shell访问和文件传输。telnet:(23端口)用于远程命令行计算机管理。smtp:(25端口)用于发送电子邮件。dns:(53端口)用于域名解析。dhcp:(67和68端口)用于动态分配IP地址和配置网络参数。tftp:(69......