Digital VLSI Design-lecture 6
Lecture 6: Moving to the Physical Domain
我们已经完成了设计流程的前端部分,现在开始完成后端部分
我们将通过绘制布局图(floorplan),为我们的设计打下物理基础。
这包括决定“重要”或“较大”的模块放置位置,比如 IP 核、I/O、供电网格、特殊布线等。
接下来,我们可以放置(place)逻辑门,同时考虑拥塞(congestion)和时序(timing)因素。
有了触发器之后,我们就可以设计时钟树(clock-tree)。
最后,我们可以根据设计规则检查(DRC)、时序(timing)、噪声(noise)等因素,对所有网络进行布线(route)。
在流片(tapeout)之前,我们还需要清理设计、验证等等。
开始物理设计
为了从理论设计走向物理芯片,我们先在理论上定义了:
定义设计 .v
定义设计约束/目标 .sdc
定义工作条件/模式 (MMMC)
定义工艺和库信息 .lef
定义物理信息(Floorplan)
在之前的理论设计中,我们用的是一个理想的模型,因此忽略了以下内容:
不考虑电源供电
综合时只认为有一个完美的V ...
Digital VLSI Design-lecture 5
Timing Analysis
同步设计
大多数数字设计是同步的,并且使用顺序元件构建。
同步设计消除了竞争现象,并且更适合设计流水线,提高了吞吐量。
假设所有顺序元件都是边沿触发的,并使用D触发器作为寄存器。
那么出发它有三个关键的时序参数
tcqt_{cq}tcq 时钟到输出延迟,本质上是一个传播延迟。
tsetupt_{setup}tsetup 建立时间,即数据必须在时钟到来前到达。
tholdt_{hold}thold 保持时间,即数据在时钟到来后必须保持稳定的时间。
时序约束
在同步逻辑中,需要思考两个重要参数:
最大延迟
最小延迟
其最大延迟不能过大,以至于数据信号没有足够的时间从一个寄存器传到下一个寄存器,在下一个时钟沿到来之前还未完成。最小延迟也不能过小,以至于在同一个时钟周期内就穿过了多个寄存器。
最大延迟违例是由于数据路径过长所导致的,包括寄存器的建立时间 tsetupt_{setup}tsetup ,因此它通常被称为“建立路径(Setup Path)”。
最小延迟违例是由于数据路径过短,导致数据在保持时间 tholdt_{hold}t ...
Digital VLSI Design-lecture 4
Lecture 4: Logic Synthesis Part 2
在 lec3 的学习中,我们已经知晓了编译和库。我们已经将设计加载到综合器中,也加载了标准单元库和IP。
接下来我们要讨论综合过程中更核心的部分。
布尔最小化
布尔最小化是综合过程中的一个关键步骤,涉及将逻辑表达式简化为最小形式,以优化电路设计。
展开和绑定和预映射优化
在这个步骤中,工具将执行以下操作
将 RTL 编译为布尔数据结构
将非布尔模块绑定到叶单元
优化布尔逻辑
将设计结果映射到通用的、与技术无关的逻辑门。
这是逻辑综合的核心,自八十年代一直研究的主题。
Two-Level Logic
在展开过程中,主要输入和输出(端口)被定义,顺序元素(触发器、锁存器)被推断。这导致了一组组合逻辑云:
输入端口和寄存器输出是逻辑的输入。
输出端口和寄存器输入是逻辑的输出。
输出可以描述为输入的布尔函数。
布尔最小化的目标是减少输出函数中的文字数量。
许多不同的数据结构都能用来表示布尔函数,如真值表、立方体、二元决策图、方程等。
许多研究是基于SOP或POS表示法进行的,这种表示法更为人知的是“两级逻辑”(Two ...
Digital VLSI Design-lecture 3
Lecture 3: Logic Synthesis Part 1
什么是逻辑综合
综合是将 RTL 转换为特定技术的门级网表的过程,并根据预定义的约束进行优化。
你将从以下内容开始
行为级 RTL 设计
标准单元库
一组设计约束
你结束时得到:
映射到标准单元库的门级网表
(对于 FPGA:查找表、触发器和 RAM 块)
(有希望)在速度、面积、功耗等方面也很高效。
形式化地,给你一个有限状态自动机 F(X,Y,Z,λ,δ)F(X,Y,Z,\lambda,\delta)F(X,Y,Z,λ,δ) ,目标是得到一个电路 C(G,W)C(G,W)C(G,W) ,其中:
GGG :电路组件的集合,如布尔门,触发器邓
WWW :连接 GGG 的导线集合
在某些情况下,逻辑综合可以得到比手动设计更优的设计(例如:逻辑优化)。不过,也存在例外情况。
以上是一个例外情况,!s0 && s1 || s0 可以被优化为 s1 || s0 ,正如右边电路图所绘。
进行逻辑综合时候,尤其需要在以下方面注意:
最小化面积
最小化功耗
最大化性能
根据不同权重作为约束 ...
unordered_map代码详解
前言
很多人只会用 umap ,或者只是学过 CPP11 以前的 hashmap 实现,实际上,从 hashmap 演化过来的 unordered_map 也可以很 modern cpp。
这里只考虑 unordered_multimap ,不考虑 unordered_multimap
定义
12345678910111213141516171819202122template<typename _Key, //键类型 typename _Tp, //值类型 typename _Hash = hash<_Key>, //哈希函数,默认类型为k的hash函数 typename _Pred = std::equal_to<_Key>, //比较函数,默认为_key的等于比较 typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >, //默认为键值分配器 typename _Tr = __umap_traits<__cache_defa ...
2023山东省赛补题
Not Another Path Query Problem
题目大意,给你一张图,询问 (u,v)(u,v)(u,v) 是否存在一条路径,其边的按位与大于 VVV
计 VVV 的第一位非 000 位为 xxx,在 xxx 之前,任意存在一条道路满足按位与大于 2x−12^{x-1}2x−1 即可,显然,可以只取最高位。
如果找不到,另一种可能的情况是这个数前面数位和 VVV 一样,后面存在一位,使得该位置 VVV 为 000 并且这个数为 111
如果还找不到,看看他们的按位和是否有等于 VVV 的
显然,以上可以直接用并查集来做。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106#include<bits/st ...