Verilog02:结构化建模

2023-05-16

结构化描述是用Verilog HDL 进行电路设计中最基本描述方式。对于系统级电路设计,为了把不同的功能模块有层次地组合在一起,主要是采用模块调用的结构化建模方式实现。
根据所调用子模块的不同抽象级别,可将模块的结构描述分成模块级建模、门级建模、开关级建模三类。
模块级建模通过调用有用户设计生成的低级子模块来对硬件电路结构进行说明,模块由低级模块的实例组成。
门级建模通过调用Verilog HDL内部的基本门级元件来对硬件电路结构进行说明,模块由基本门级元件的实例组成。
开关级建模通过调用Verilog HDL内部的基本开关元件来对硬件电路结构进行说明,模块由基本开关元件的实例组成。

  1. 模块

模块(module)表示一个基本的功能块,用于描述电路的特定功能及其通信端口。小到一个基本晶体管,大到一个复杂的微处理器系统,都可以作为一个模块来设计。一个复杂的数字系统一般由多个模块(module)构成,一个模块(module)的设计对应着系统设计中的某个功能模块,模块(module)的调用也对应这数字电路中某个功能的调用。模块设计可以采用行为描述,结构描述、数据流描述等多种描述方式。

一个模块的基本结构主要包括模块定义、模块端口定义、模块数据类型声明、模块参数声明、模块逻辑功能描述等几个基本部分。 在模块中只有module、模块名和endmodule必须出现,其他皆为可选部分。一个Verilog源文件(.v文件)中可以定义多个模块,Verilog HDL对模块的排列顺序没有要求。

module name(端口列表);   //模块定义行
...端口定义...
...数据类型声明...
...参数声明...
...逻辑功能描述...
endmodule                //模块结束行  

端口是模块(module)与外界或其他模块沟通的信号线。端口列表里定义了外部可见的端口。端口类型有输入端口(input)、输出端口(output)和双向端口(inout)三种。有些模块(module)不包括端口,如仿真平台的顶层模块,所有的设计模块和激励模块是一个封闭的系统,没有输入和输出。
数据类型用于表示数字硬件系统中的数据存储和传输元素。Verilog有两组主要的数据类型:变量(variable)数据类型和网络(net)数据类型。这两个组在分配和保存值的方式上有所不同,它们表示不同的硬件结构。
参数型变量使用关键字parameter定义,在同一个模块中每个参数型变量的值必须为一个常量。在模块中使用参数可以增加程序的可读性和可维护性。
模块逻辑功能描述主要包括变量声明、数据流语句、底层模块实例,行为语句块、以及任务和函数五个组成部分,这些部分可以在模块的任意位置以任意顺序出现。

  1. 门级元件

Verilog HDL 中规定了14个门级元件,其分为多输入门、多输出门、三态门和上下拉门(电阻)。其调用信号是1bit信号形式,位置按照输出信号、输入信号和控制信号排列。固定位置和把信号类型使得调用门级元件时,可以不用定义中间连接信号类型(wire)。
Verilog内置门和开关
在这里插入图片描述

  1. 开关元件
    Verilog 中规定了12个开关元件,分为MOS开关和双向开关。MOS开关只提供了信号的单向驱动能力,双向开关具有双向驱动能力,双向开关每个脚都被声明为inout类型,可以作为输入驱动另一脚,也可以作为输出被另一脚驱动。

  2. 模块调用
    上述的模块(module),门级元件,开关元件在结构化建模中都可被视为电路调用的子模块。
    模块调用的语法格式为:

//基本调用格式:
模块名<参数值列表>实例名(端口名列表);
//同一模块被当前模块多次调用方法1:
模块名<参数值列表>实例名1(端口名列表1);
	  <参数值列表>实例名2(端口名列表2);
      ......
      <参数值列表>实例名n(端口名列表n);
//同一模块被当前模块多次调用方法2:
<被调用模块名><实例阵列名>[阵列左边界:阵列右边界]
例:
  module and(ina, inbox,dout);
  	 input    ina,inb;
  	 output   dout;
  	 assign dout = ina&inb;
  endmodule

  module array(a,b,out);
  	 inpput [3:0] a,b;
  	 output [3:0] out;
     wire   [3:0] out;
     and and_array[3:0](out,a,b);
  endmodule

模块级建模中,需要将被调用模块的输入和输出信号连接到调用模块中。Verilog提供了两种端口对应方式:端口位置对应和端口名称对应。

//端口位置对应语法:
模块名<参数值列表>实例名(<信号名1><信号名2>...,<信号名n>;
//端口名称对应方式:
模块名<参数值列表>实例名(.端口名1(<信号名1>),.端口名2(<信号名2>),...,.端口名n(<信号名n>));

调用过程端口未匹配情形:原则上,用Verilog结构化描述进行电路设计时,端口位宽未匹配是被禁止的,因为位宽不匹配会对电路产生不稳定影响。当结构化描述过程中产生Verilog HDL语法中规定了相应的处理情况。
未连接端口:模块未连接输入端的值被置为 z。模块未连接的输出端表示该输出端口没有被使用。在CMOS电路中,这种情况是一定要避免的。
不同的端口位宽:在被调用模块端口和调用模块的端口表达式(调用信号)之间存在着一种隐含的连续赋值关系。因此,当端口和端口表达式(调用信号)的位宽不一致时,会进行端口匹配,采用的位宽匹配规则为右对齐(低位对齐)方式。

例:模块端口连接
	module connect(a,b);
		input  [6:1] a;
		output [3:0] b;
		 ......
	endmodule
    module tb;
    	wire [5:3] c;
    	wire [5:1] d;
    	connect U1(.a(c),.b(d));
    	 ......
    endmodule


c[3]、 c[4]、c[5] 分别和a[1]、a[2]、 a[3] 相连接,输入端口a剩余的位没有连接。同样,d[1]、 d[2]、d[3]、d[4] 分别连接到输出端口b的b[0]、b[1]、b[2]、 b[3] 上。

相关文献:
《Verilog HDL 数字集成电路高级程序设计》,蔡觉平等。
IEEE std 1800-2017 .

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

Verilog02:结构化建模 的相关文章

  • word文档编辑时字体突然发生变化解决方法

    word文档在编辑时字体突然发生变化 xff0c 第1步 点击 开始 xff0c 图片中右下角 箭头 第2步 选择需要的字体 xff0c 第3步 设置默认字体 xff0c 确定
  • AD(Altium Designer)如何铺铜

    在PCB PcbDoc文件中 xff1a 在软件下方选择 34 Top Layer 顶层 34 xff08 1 xff09 执行 34 放置 34 gt 铺铜 xff1b 或者快捷键 34 PG 34 会弹出 34 Properties 属
  • 嵌入式硬件-读懂原理图

    学习硬件的第一节课 学习读懂原理图 读懂原理图对嵌入式软件工程师和程序员尤为重要 在深入细节之前请注意 对所有的嵌入式设计人员来说 能懂得硬件工程师创建和使用的来描述其硬件设计的原理图和符号是非常重要的 无论硬件设计得多么复杂 不管有多少设
  • 校招行测笔试-图形推理

    校招行测笔试 图形推理 面对校招笔试的行政能力测试 xff08 简称 行测 xff09 环节 xff0c 刚开始接触有些束手无策 摸不到头脑 xff0c 其实是有技可循的 xff0c 本文就帮助大家总结一下行测的相关技巧 如果对你有所帮助
  • 统一建模语言UML详解附思维导图

    UML图 概述 构成 事物 Things xff1a UML模型中最基本的构成元素 xff0c 是具有代表性的成分的抽象 构件事物 xff1a UML模型的静态部分 xff0c 描述概念或物理元素 类 xff1a 具有相同属性相同操作 相同
  • 比特率与波特率

    比特率 xff1a 单位 Bps bit per second xff0c 即每秒传输的 bit 数 波特率 xff1a 单位 Baud xff0c 即每秒传输的 码元 数 这里涉及到码元 码元 xff1a 持续一段固定时间的通信信道有效状
  • 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了 xff0c 本贴精心汇总了一些嵌入式相关资源 xff0c 包括但不限于编程语言 单片机 开源项目 物联网 操作系统 Linux 计算机等资源 xff0c 并且在不断地更新中 xff0c 致力于打造全网最全的
  • 嵌入式系统QNX概述-微内核架构进程管理安全性

    一 微内核架构 QNX操作系统由微内核以及一组协作的系统服务进程组成服务进程与操作系统内核是相互隔离开的 当服务进程出问题时并不会影响内核微内核提供软件总线供各个软件模块进行通信和协作内核只提供最小化的基础 公共服务高度模块化设计带来良好的
  • 三万字长文总结C语言规范

    1 头文件 若包含了头文件aa h xff0c 则就引入了新的依赖 xff1a 一旦aa h被修改 xff0c 任何直接和间接包含aa h代码都会被重新编译 如果aa h又包含了其他头文件如bb h xff0c 那么bb h的任何改变都将导
  • 操作系统概述

    Overview Q1 xff08 Why xff09 为什么要学操作系统 xff1f Q2 xff08 What xff09 xff1a 到底什么是操作系统 xff1f Q3 xff08 How xff09 xff1a 怎么学操作系统 x
  • 小白自学PIX飞控学习笔记

    小白自学PIX飞控学习笔记 xff08 二 xff09 接触飞控什么是MCU xff1f PIX飞控与MCU xff1f 无人机飞控的作用飞控内部如何实现其功能 xff1f 接触飞控 作为未入门 小白 一枚 xff0c 也只是简单地接触过C
  • Nestjs 返回req报错

    返回req存在循环引用 报错 ERROR ExceptionsHandler Converting circular structure to JSON gt starting at object with constructor Sock
  • 设计方法的选用

    六大原则 创建好了之后算法不常变的 xff0c 比如计算器的加减乘除逻辑 xff0c 就可以用简单工厂模式 要是像商场收银机对打折等促销的处理 xff0c 若用简单工厂模式也可以 xff0c 不过要在工厂内创建多个具体的打折方案 xff0c
  • XXX测试用例设计?XXX怎么测试?(行李箱、电梯、水杯、笔、椅子)

    首先要知道 xff0c 答案要从下面6个方向考虑 xff1a 功能测试 界面测试 易用性测试 兼容性测试 安全性测试 性能测试 其次 xff0c 在回答问题前要向面试官表明 xff1a 我不知道XXX的具体需求 xff0c 所以会以我认知的
  • 面试——测试基础理论

    测试先导性知识 测试是什么 xff1f 在规定的条件下对程序进行操作去发现错误 xff0c 然后对软件质量进行评估的一个过程 需要注意的是 xff0c 软件是由文档 数据以及程序组成的 xff0c 所以对软件测试应该包括 xff1a 软件形
  • 【ubuntu16.04 LTS】 ping www.baidu.com不通

    想更新一个软件包 xff0c 发现ubuntu不能正常更新 xff0c 结果ping www baidu com不通 xff0c 但是ping ip 可能 xff0c 所以认为是DNS没有配置 解决方法 xff1a 1 xff0c 既然能p
  • 小鼠试毒问题(二进制)

    1000桶酒 xff0c 其中1桶有毒 而一旦吃了 xff0c 毒性会在1周后发作 问最少需要多少只老鼠可在一周内找出毒酒 如题 分析思路 xff1a 要用尽可能少的老鼠完成相对大的任务量 xff0c 要想到把问题进行对数分解 从而不难想到
  • wsl,Ubuntu,关于解决E: Could not read response to hello message from hook [ ! -f /usr/bin/snap ] || /usr/

    大坑 出现问题 xff1a 今天安装mysql xff0c sudo apt span class token operator span get install mysql span class token operator span s
  • wsl,win10子系统Ubuntu,安装mysql过程及坑

    一 安装 sudo apt span class token operator span get install mysql span class token operator span server 二 启动服务 注意 xff1a 先停止
  • 外接显示器调亮度解决方案(最低亮度后还是很亮)

    出现的问题 xff1a 手动调显示屏调亮度的键 xff0c 发现调到最低亮度后还是很亮 解决方案 xff1a 使用显卡设置来调整 win10 xff1a 桌面右键 英特尔显卡设置 显示器 颜色设置 选择显示器 应用

随机推荐

  • Java-线程,多线程同步安全案例,多窗口卖票一共有 50张票 ,4个窗口出售,打印出票售出的顺序。

    一共有 50张票 xff0c 4个窗口出售 xff0c 打印出票售出的顺序 span class token keyword package span com span class token punctuation span proble
  • tcp连接的select

    tcp的socket不同于udp tcp xff1a 建立socket的fd xff1b bind xff1b listen xff1b accept xff1b send or recv 另一端connect xff08 客户端 xff0
  • ROS NOETIC 思岚激光雷达A2M8启动历程

    Ubuntu20 04系统 xff0c 装的ROS对应为NOETIC版本 第一个bug 一直在catkin make这里出错 xff0c 我的工作空间 xff08 我也命名为catkin ws xff09 在catkin make之后 xf
  • 解决ubuntu网络调节助手之后打不开

    解决ubuntu安装deb文件之后打不开问题 xff08 安装libqtgui4 amd64 xff09 安装Ubuntu网络调试助手 链接 xff1a https pan baidu com s 1GSq pi1FOZxHFnY7PMBh
  • VSCODE中运行C语言(从安装到运行详细版)

    VSCODE中运行C语言 xff08 从插件安装到运行详细版 xff09 一 下载安装MinGW w64 官方下载网站 xff1a MinGW 64 往下来进入下一张页面图 xff0c 选择要下载的文件 二 环境变量配置 按照上面的步骤全部
  • 【ubuntu16.04 LTS】ping百度通,但浏览器打不开百度网页

    典型的DNS配置问题 1 xff0c 执行如下命令 span class token function sudo span span class token function vi span etc resolv conf 在文件最后添加
  • VLAN类型

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是VLAN类型 一 基于端口的VLAN xff1a 基于端口的VLAN是最简单 最有效的VLAN划分方法 xff0c 它按照设备端口来定
  • STM32开发(三) 使用printf 重定位到串口输出|CSDN创作打卡

    上一篇 主目录 下一篇 文章目录 背景 KEIL MDK环境下printf重定位串口输出 第一步 在KEIL MDK中使用MicroLIB如图中勾选 第二步 STM32Cube MX异步配置 第三步 KEIL代码演示 代码使用Cube 注意
  • 总线(二)CAN通讯协议介绍

    文章目录 CAN xff08 Controller Area Network xff09 是什么 xff1f 总线拓扑图CAN特征CAN协议数据帧遥控帧遥控帧和数据帧相关 xff1f 仲裁优先级决定数据帧和遥控帧的优先级标准格式和扩展格式的
  • CAN 简介

    1 目的 本文主要介绍一部分 CAN 协议层 2 CAN 简介 这里的内容参考的是 1991 9 的 2 0 版本的官方 CAN 规格书 2 1 概述 CAN 控制器局域网 是一种串行通讯协议 xff0c 传输速度可达 1Mbit s 总线
  • I2C 简介

    1 I2C 简介 这里的内容参考的是 2014 4 4 的 V 6 版本的官方 I2C Bus 规格书 xff0c 第六章有给出相应的链接 1 1 引脚 I2C 一般而言是一种同步半双工的通信方式 xff0c 所以除了电源引脚之外 xff0
  • MPC5744 烧录一直停留在 98% 的解决方法

    1 目的 本人在调试一块主控为 MPC5744 的板子时 xff0c 有时候在烧录时 xff0c 发现烧录总是停在 98 xff0c 卡在 CRC 这里 xff0c 在查找和看资料之后 xff0c 发现了几种解决方法 xff1a 使用 pe
  • MPC5744 Data Flash 仿真 EEPROM

    一 目的 本文主要是使用 MPC5744 中的 Data Flash 仿真 EEPROM 之前在 MPC5744 烧录一直停留在 98 的解决方法 中也简单介绍了 Flash xff0c 所以在这里直接介绍仿真过程 xff0c 注意这里可以
  • Keil添加文件和头文件

    Keil如何添加文件 在工程文件夹下面新建一个 c和一个 h文件 xff0c c文件就是要添加的文件 xff0c h文件就是要添加的头文件 右键点击Project下面的第一个文件夹 点击Manage Project Items 是新建文件夹
  • linux下简单的Socket+Http服务

    C语言体验Socket Http服务 代码部分实验结果实验总结 代码部分 socket监听80端口 xff0c 接收到访问数据 xff0c 返回简单的Http页面 span class token macro property span c
  • 不定态与高阻态,及modelsim默认波形颜色的含义

    数字电路只有高低电平 xff0c 没有实际电平对应不定态和高阻态 xff0c X和Z更多的是用来表示设计者的意图或者用于仿真目的 xff0c 旨在告诉仿真器和综合器如何解释这段代码 X态 xff1a 常用于判断条件 xff0c 只在告诉综合
  • 【ubuntu16.04 LTS】设置屏幕分辨率

    第一种方式 直接打开系统设置 xff0c 选择屏幕分辨率即可 xff0c 和Windows一样 xff0c 不多说 第二种方式 如果在第一种方式中 xff0c 没有找到自己想要设置的分辨率的话 xff0c 可以按如下操作 xff1a 1 x
  • verilog中taskd的用法

    本文转载自博客园作者 xff08 id xff09 xff1a 再也不喝冰了 任务就是一段封装在 task endtask 之间的程序 任务是通过调用来执行的 xff0c 而且只有 在调用时才执行 xff0c 如果定义了任务 xff0c 但
  • Github 安装和上手记录

    1 Git xff1a 分布式版本控制软件 xff08 本地含有版本库 xff09 2 安装 xff1a msysgit github io gt 3 Download gt 安装 4 安装时除了其中一步需要选择 use git from
  • Verilog02:结构化建模

    结构化描述是用Verilog HDL 进行电路设计中最基本描述方式 对于系统级电路设计 xff0c 为了把不同的功能模块有层次地组合在一起 xff0c 主要是采用模块调用的结构化建模方式实现 根据所调用子模块的不同抽象级别 xff0c 可将