FPGA基础知识----第三章 第3节 模块结构

第3节 模块结构

3.1 模块介绍

模块( module)是 Verilog 的基本描述单位是用于描述某个设计的功能或结构及与其他模块通信的外部端口

模块在概念上可等同一个器件,就如调用通用器件(与门、三态门等)或通用宏单元(计数器、ALU、 CPU)等。因此,一个模块可在另一个模块中调用,一个电路设计可由多个模块组合而成。一个模块的设计只是一个系统设计中的某个层次设计,模块设计可采用多种建模方式。

Verilog 的基本设计单元是―模块‖。采用模块化的设计使系统看起来更有条理也便于仿真和测试,因此整个项目的设计思想就是模块套模块,自顶向下依次展开。 在一个工程的设计里,每个模块实现特定的功能,模块间可进行层次的嵌套。对大型的数字电路进行设计时,可以将其分割成大小不一的小模块,每个小模块实现特定的功能,最后通过由顶层模块调用子模块的方式来实现整体功能,这就是 Top-Down 的设计思想。 本书主要以 Verilog 硬件描述语言为主,模块是 Verilog 的基本描述单位,用于描述每个设计的功能和结构,以及其他模块通信的外部接口。

模块有五个主要部分:端口定义、参数定义(可选)、 I/O 说明、内部信号声明、功能定义模块总是以关键词 module 开始,以关键词 endmodule 结尾。它的一般语法结构如下所示:

image-20211029105741798

image-20211029105803392

3.2 模块名和端口定义

第 1 至 5 行声明了模块的名字和输入输出口。其格式如下:module 模块名(端口 1,端口 2,端口 3, ……);其中模块是以 module 开始,以 endmodule 结束。模块名是模块唯一的标识符, 一般建议模块名尽量用能够描述其功能的名字来命名,并且模块名和文件名相同。

模块的端口表示的是模块的输入和输出口名,也是其与其他模块联系端口的标识

3.3 参数定义

第 8 行参数定义是将常量用符号代替以增加代码可读性和可修改性。这是一个可选择的语句,用不到的情况下可以省略,参数定义一般格式如下

parameter DATA_W = x;

3.4 接口定义

第 9 至 12 行是 I/O(输入/输出)说明,模块的端口可以是输入端口、输出端口或双向端口。其说明格式如下。

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

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

……;

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

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

……;

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

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

……;

3.5 信号类型

第 14 至 17 行定义了信号的类型。 这些信号是在模块内使用到的信号,并且与端口有关的 wire和 reg 类型变量(即线网型与寄存器型)。 其声明方式如下:

reg [width-1 : 0] R 变量 1, R 变量 2 ……;

wire [width-1 : 0] W 变量 1, W 变量 2……;

如果没有定义信号类型,默认是 wire 型,并且信号位宽为 1

3.6 功能描述

第 21 至 31 行是功能描述部分。模块中最重要的部分是逻辑功能定义部分, 有三种方法可在模块中产生逻辑。

  1. 用“assign”声明语句,如描
  2. 述一个两输入与门: assign a = b & c。 详细功能见“功能描述-组合逻辑”一节。
  3. 用“always”块。即前面介绍的时序逻辑和组合逻辑。
  4. 模块例化。详细功能见“模块例化”一节。
3.7 模块例化

对数字系统的设计一般采用的是自顶向下的设计方式, 可将系统划分成几个功能模块,每个功能模块再划分成下一层的子模块。每个模块的设计对应一个 module , 每个 module 设计成一个 Verilog HDL 程序文件。因此,对一个系统的顶层模块采用结构化设计,即顶层模块分别调用了各个功能模块

一个模块能够在另外一个模块中被引用,这样就建立了描述的层次。模块实例化语句形式如下:

module_nameinstance_name(port_associations) ;

信号端口可以通过位置或名称关联, 但是关联方式不能够混合使用。端口关联形式如下:port_expr / /通过位置。.

PortName (port_expr) / /通过名称。

image-20211029110329198

image-20211029110345151

建议在例化的端口映射中请采用名字关联,这样,当被调用的模块管脚改变时不易出错。在实例化中,可能有些管脚没用到,可在映射中采用空白处理,如:

image-20211029110406247

输入管脚悬空端口的输入为高阻 Z,由于输出管脚是被悬空的,该输出管脚废弃不用

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当将ASIC设计移植到FPGA芯片时,需要进行一些重要的工作和优化。首先,ASIC设计的不同部分需要分别映射到不同的FPGA芯片中,通常以功能模块为划分边界。这个划分和优化的过程相对复杂,需要考虑系统成本、整体性能、资源容量、FPGA芯片之间的互联以及划分的复杂度等因素。 移植ASIC设计到FPGA芯片中需要进行大量的重编码和优化工作。尤其是时钟树结构,需要正确地分配到FPGA芯片的各种时钟资源上。这是一个非常具有挑战性的任务。 尽管FPGA工具和设计流程与ASIC相似,但是由于一些根本性的差异,工程师仍然需要解决一些问题。ASIC综合工具通常对Verilog语法的支持更宽松,而且ASIC和FPGA综合工具在引导语句和工具选项方面也有所不同。此外,无论是资源占用还是布线密度,ASIC工具需要处理的工作比FPGA复杂得多。在某些复杂情况下,FPGA工具甚至可能无法成功布局和布线。因此,在某些情况下,可能需要修改RTL源代码,甚至重新规划多芯片划分方案。 总结起来,将ASIC设计移植到FPGA芯片中需要进行划分和优化工作,并需解决RTL源代码的重编码和时钟树结构的挑战。此外,需要注意ASIC和FPGA综合工具的差异,并可能需修改RTL源代码和重新规划多芯片划分方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [FPGA知识汇集-ASIC向FPGA的移植](https://blog.csdn.net/mochenbaobei/article/details/128677191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原来如此呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值