FPGA基础知识-层次建模的概念

news2024/9/24 23:31:02

学习目标:

提示:这里可以添加学习目标

理解数字电路设计中自底向上和自顶向下的设计方法;

解释verilog中模块和模块实例之间的区别;

学习从4中不同的抽象角度来描述同一个模块;

解释仿真中的各个组成部分,定义激励块和功能块,说明两种激励进行仿真的方法。


学习内容:

提示:这里可以添加要学的内容

1.设计方法学

数字电路设计中两种基本的设计方法:自底向上和自顶向下的设计方法;

 2.设计实例

下面以四位脉动进位计数器为例:

图中的脉动进位计数器是由下降沿触发的T触发器组成的.每个T触发器可以由下降沿触发的D触发器和反相器构成(假设D触发器的Q_bar端不可用),如图所示。


 使用自顶向下的方法进行设计,首先需要说明脉动进位计数器的功能.在使用T触发器搭建起顶层模块之后,进一步使用D触发器和反相门来实现T触发器.这样我们就可以将较大的功能块分解为较小的功能块,直到无法继续分解.在自底向上的设计方法中,设计过程恰好与此相反:我们不断地使用较小的功能块来搭建大--些的模块.例如,在脉动进位计数器的例子中,我们首先使用与门和或门搭建D触发器,或者使用晶体管搭建一个自定义的D触发器,使自底向上和自顶向下的方法在D触发器这个层次上会合。

 现在我们将层次建模的概念和 Verilog 联系起来。Verilog 使用模块( module〉的概念来代表一个基本的功能块。一个模块可以是一个元件,也可以是低层次模块的组合。常用的设计方法是使用元件构建在设计中多个地方使用的功能块,以便进行代码重用。模块通过接口(输入和输出)被高层的模块调用,但隐藏了内部的实现细节。这样就使得设计者可以方便地对某个模块进行觞改,而不影响设计的其他部分。

module<模块名>(<模块端口列表>);

<模块的内容>

endmodule

module T_FF(a, clock, reset) 

 使用Verilog既可以进行行为描述,同时也可以进行结构描述.根据设计需要,设计者在每个模块内部可以在4个抽象层次中进行描述,而模块对外显示的功能都是一样的,仅与外部环境有关,而与抽象层次无关。模块的内部结构对外部环境来讲是透明的。因此,对模块内部抽象层次的更改不会影响外部环境。本书将在后面的章节中对这些抽象层次分别进行叙述-这些抽象层次定义如下:

行为或算法级:Verilog所支持的最高抽象层次。设计者只注重其实现的算法,而不关心其具体的硬件实现细节。在这个层次上进行的设计与C语言编程非常类似。
·数据流级:通过说明数据的流程对模块进行描述。设计者关心的是数据如何在各个寄存器之间流动,以及如何处理这些数据。
·门级:从组成电路的逻辑门及其相互之间的互连关系的角度来设计模块。这个层次的设计类似于使用门级逻辑简图来完成设计。

Verilog 允许设计者在一个模块中混合使用多个抽象层次。在数字电路设计中,术语寄存器传输级(RTL)描述在很多情况下是指能够被逻辑综合工具接受的行为级和数据流级的混合描述。
假设一个设计中包含4个模块,Verilog 允许设计者使用4种不同的抽象层次对各个模块进行描述。在经过综合工具综合之后,综合结果一般都是门级结构的描述。

一般来说,抽象的层次越高,那么设计的灵活性和工艺无关性就越强;随着抽象层次的降低,灵活性和工艺无关性逐渐变差,微小的调整可能会导致对设计的多处修改。这就类似于使用C语言和汇编语言进行程序设计的对比。使用C这样的高级语言的好处是编码简单并且可移植性好;然而如果使用汇编语言,则需要针对特定的计算机,并且在移植到其他计算机上的时候可能会出现问题。

3.逻辑仿真实例

在设计完成之后,还必须对设计的正确性进行测试。我们可以对设计模块施加激励,通过检查其输出来检验功能的正确性。我们称完成测试功能的块为激励块。将激励块和设计块分开设计是一种良好的设计风格。激励块同样也可以用Verilog 来描述,而不必采用另外一种语言。激励块一般均称为测试台( test bench)。可以使用不同的测试台对设计块进行全面的测试。
激励块的设计有两种模式。一种模式是在激励块中调用(实例引用)并直接驱动设计块。顶层块为激励块,由它控制ck和reset信号,检查并显示输出信号q。

另一种使用激励的模式是在一个虚拟的顶层模块中调用(实例引用)激励块和设计块。激励块和设计块之间通过接口进行交互,。激励块驱动信号d_clk和d_reset,这两个信号则连接到设计块的clk和reset输入端口。激励块同时检查和显示信号c_q,这个信号连接到设计块的输出端口q。顶层模块的作用只是调用(实例引用)设计块和激励块。 另一种使用激励的模式是在一个虚拟的顶层模块中调用(实例引用)激励块和设计块.激励块和设计块之间通过接口进行交互,如图2.7所示.激励块驱动信号d_clk和d_Reset,这两个信号则连接到设计块的clk和Reset输入端口。激励块同时检查和显示信号c_q,这个信号连接到设计块的输出端口_q.顶层模块的作用只是调用(实例引用)设计块和激励块.

学习时间:

提示:这里可以添加计划学习的时间

周一到周五7点到9点,


总结:

在本章中,我们讨论了下面的概念:
 用于数字电路设计的两种方法:自顶向下方法和自底向上方法,在当今的数字电路设计中,这两种方法经常组合使用。随着设计复杂性的增加,使用这些结构化的方法来进行设计管理变得越来越重要。
模块是 Verilog 中的基本功能单元。模块通过调用(实例引用)来使用,模块的每个实例都被惟一标识,以区别于同-模块的其他实例。每个实例都拥有其模板模块的不同副本。读者需要将模块和模块实例区别开来。
仿真有两个不同的组成部分:设计块和激励块,激励块用于测试设计块。激励块通常是顶层模块。对设计块施加激励有两种不同的模式。
以脉动进位计数器为例一步步地解释了为各个部分创建仿真的过程。并且理解 Verilog语言如何适应这个设计流程。关于Verilog语言的详细语法,在目前阶段并不重要,以后会详细讲解这些内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态NAT过载配置与验证实验

动态NAT过载配置与验证实验 【实验目的】 部署端口地址转换。熟悉端口地址转换的应用方法。验证配置。 【实验拓扑】 实验拓扑如图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 f0/0 192.168.10.1 255.255.255.0 N/A …

《低代码指南》低代码开发平台Noodl即将开源

Noodl 是一个低代码开发平台,让设计师、开发者能够用低代码的可视化编程方法构建强大的 Web 应用。目前 Noodl 已被亚马逊、三星、沃尔玛等财富 500 强企业应用于原型设计到生产环境中。 日前,Noodl 官方发出公告表示,将从现有的付费订阅模式向开源模式过渡。 Noodl 目前的…

FineReport 连接mysql报错 当前驱动加载路径...

报错内容&#xff1a; 原因为帆软自带的jar包与当前使用的mysql&#xff08;8.0&#xff09;版本不一致&#xff0c;需要去官网下载对应连接的jar包 官网下载地址… 下载后在帆软对应路径替换掉jar包即可 FineReport_11.0\webapps\webroot\WEB-INF\lib

海格里斯HEGERLS四向穿梭车系统比件箱自动化解决方案有哪些突出优势?

随着仓储物流、电商行业的快速发展&#xff0c;自动化立体库的型式和技术日益完善&#xff0c;除了典型的单深度单货位立体库外&#xff0c;也逐渐发展了双深度和多货位的立体仓库。在自动化存储设备方面&#xff0c;除堆垛机外&#xff0c;利用四向穿梭车、子母车等技术构成的…

软件自动化测试基本流程(附流程图)

“自动化测试与软件开发过程从本质上来讲是一样的,无非是利用自动化测试工具(相当于软件开发工具),经过对测试需求的分析(软件过程中的需求分析),设计出自动化测试用例(软件过程中的需求规格),从而搭建自动化测试的框架(软件过程中的概要设计),设计与编写自动化脚本(详细设计与…

网络安全合规-网络安全架构

一、安全框架及模型定义 信息安全模型是用于精确和形式的描述信息系统的安全特征,以及用于解释系统安全相关行为的理由。 安全模型的作用&#xff1a; 准确地描述安全的重要方面与系统行为的关系。 提高对成功实现关键安全需求的理解层次。 从中开发出一套安全性评估准则&…

【来不及刷题之】37、排序链表(链表归并排序)

使用直接插入排序时间复杂度太多无法通过&#xff0c;使用归并排序&#xff0c;主要有三个步骤&#xff1a; 寻找链表的中间结点&#xff0c;断开成两个等长的链表 对这两个链表分别排序 &#xff08;递归&#xff09; 合并两个排序链表 思路比较简单&#xff0c;但是这里寻…

全解析!汽车APP面临的18种攻击风险

目录 车企App普遍面临的攻击风险 技术风险 合规风险 《白皮书》提供两大安全解决方案 App加固 App隐私合规检测 近日&#xff0c;顶象发布《车企App安全研究白皮书》。该白皮书总结了目前汽车公司App所面临的主要技术威胁和合规风险&#xff0c;详细分析了这些风险产生的…

<Android开发> 集成so库

&#xff1c;Android开发&#xff1e; 集成so库 &#xff1c;Android开发&#xff1e; HAL层集成第三方so库 一 前言 在笔者的另一个文章&#xff1c;Android开发&#xff1e; HAL层集成第三方so库 分析了如何在hal层将第三方的so库文件集成到系统中&#xff1b;本文其实与其…

用组件注解符精简Spring配置文件

一、利用组件注解符精简Spring配置文件 &#xff08;一&#xff09;创建新包 创建net.huawei.spring.day02包 &#xff08;二&#xff09;复制四个类 &#xff08;三&#xff09;修改杀龙任务类 package net.huawei.spring.day02;import org.springframework.stereotype.C…

索引的最左匹配原则全面分析

简介 组合索引中的最左优先&#xff0c;以组合索引中最左边的列为起点任何连续的索引都能匹配上。如果遇到范围查询(>、<、between、like)就会停止匹配。 准备 表 CREATE TABLE test (id bigint(11) NOT NULL,column1 int DEFAULT NULL,column2 int DEFAULT NULL,col…

振弦采集仪在岩土工程安全监测使用的解决方案

振弦采集仪是一种岩土工程安全监测仪器&#xff0c;主要用于监测建筑物、桥梁、隧道、地铁等工程结构的动态响应&#xff0c;以及岩土体的振动情况。其工作原理是通过振弦传感器采集结构或岩土体的振动信号&#xff0c;再通过数据采集系统进行处理和分析&#xff0c;得出结构或…

一文让你快速写出高效的软件测试用例

前言 编写测试用例的目的就是确保测试过程全面高效、有据可查。但要编写出高效的测试用例&#xff0c;需要搞清楚什么是测试用例&#xff0c;以及如何编写出高效的测试用例&#xff1f;接下来将从以下几个部分来进行展开 1、什么是测试用例 2、如何编写测试用例 3、软件测试学…

element-plus的el-select实现触底加载更多(新版本报错踩坑)

前言 element-plus新版增加了一个属性&#xff0c;且默认为true&#xff0c;使得下拉菜单被插入到了body元素下。即.el-select下默认不包含.el-select-dropdown了。 现象 当依旧按照之前的方式&#xff0c;封装自定义指令&#xff0c;实现滚动到el-select下拉菜单的底部&…

Redis从入门到精通之底层数据结构快表QuickList详解

文章目录 0.前言1. 快表的结构2. Redis 6.0 快表quicklist 基本结构2.1 成员变量2.1 主要操作2.1 推导结果 3. 快表的操作 3. 快表的优缺点3.1 优点&#xff1a;3.2 缺点&#xff1a; 5. Redis从入门到精通系列文章 0.前言 上个篇章回顾&#xff0c;我们上个章节&#xff0c;讲…

计算机中丢失msvcp140.dll的解决方案-由于找不到msvcp140.dll的解决方法

本教程操作系统&#xff1a;电脑 Windows系统、 msvcp140.dll是电脑文件中的dll文件&#xff08;动态链接库文件&#xff09;。如果计算机中丢失了某个dll文件&#xff0c;可能会导致某些软件和游戏等程序无法正常启动运行&#xff0c;并且导致电脑系统弹窗报错。 在我们打开…

STM32串口DMA双缓冲,数据接收与发送,HAL库实现

STM32串口DMA双缓冲 1.简介 STM32F429系列DMA支持双缓冲模式进行数据传输&#xff0c;相当于数字电路设计领域的乒乓操作&#xff0c;但是HAL库并没有实现像单缓冲区一样可以简单使用的函数&#xff0c;有的方法是使用单缓冲的方式&#xff0c;但是通过接收半满的中断控制CPU…

头文件header file和源文件 source file

头文件 header file&#xff0c;后缀是.h&#xff0c;头文件负责类的定义&#xff0c;函数声明&#xff0c;常量的定义 源文件source file&#xff0c;后缀是.cpp&#xff0c; 函数的实现 最主要的作用就是将函数的声明和实现分开&#xff0c;如果想将类和函数交给别人使用&a…

python基本语法知识(五)——面向对象

类和对象 例子1 class Student:name Nonegender Nonenationality Nonenative_place None # 籍贯age None# 类内的成员方法,第一个参数必须为 self,# self相当于是当前对象def say_hi(self):print(f"大家好,我是{self.name}")def say_hi2(self, msg):print(f&q…

自学网络安全怎么规划路线?

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…