Intel制造工艺反超TSMC了?

来源:内容由半导体行业观察(ID:icbank)编译自「semiwiki」,谢谢。

最近Seeking Alpha发表了一篇文章“台积电失去了对英特尔的工艺领导地位”,SemiWiki创始人Dan Nenni要求我(代表本文作者Scotten Jones)看一下这篇文章并做自己的分析。因为这是我多年来一直关注并发表的主题。

在深入研究公司之间的特定工艺密度比较之前,我想澄清“Seeking Alpha”一文中有关“全能栅极(GAA)和互补FET(CFET)”的误解。

全方位栅极(GAA)

正如业界从平面晶体管转向FinFET一样,一段时间以来人们就知道最终需要从FinFET过渡到其他晶体管以实现持续缩小。与仅在一侧具有栅极的平面晶体管相比,FinFET在三侧具有栅极,从而改善了器件通道的静电控制。改进的静电控制可降低沟道泄漏,并缩短栅极长度。FinFET还提供了一种3D晶体管结构,其单位面积的有效沟道宽度比平面晶体管的有效宽度宽,因此可提供更好的单位面积的驱动电流。

众所周知,FinFET之后的下一步就是水平纳米片(HNS)。如果纳米片非常窄,您会得到纳米线并能显著改善静电。FinFET的栅极长度的近似极限为16nm,水平纳米线(HNW)的近似极限为13nm,请参见图1。较短的栅极长度是收缩接触式多晶硅(CPP)并推动更大密度的一个组成部分。

图一

HNW的问题在于有效沟道宽度小于相同区域中FinFET的有效沟道宽度。HNS的发展克服了这个问题,尽管可以牺牲一些静电控制来实现,但在相同区域内,HNS的驱动电流可以达到FinFET的1.26倍。

图二

HNS的另一个优势是该工艺实质上是FinFET工艺,虽然有一些变化。但这并不是说我们要低估过渡的难度,HNS的特定步骤,也是关键步骤——就是HNS的几何形状将使创建多个阈值电压变得困难,但这是FinFET技术的逻辑演进。设计人员习惯于使用具有4和5个阈值电压的FinFET,以最大程度地提高功率-性能折衷,回到一个或两个阈值电压将是一个问题,这仍然是HNS不断发展的领域。

在“ 3nm”节点上,三星宣布了一个名为“ Multibridge”的GAA HNS,另一方面,台积电(TSMC)仍在继续使用FinFET。两种技术都是3nm可行的选择,真正的问题应该是谁可以提供更好的工艺。

互补FET(CFET)

在Seeking Alpha文章中,有一篇评论提到CFET的密度是3 Fin FinFET单元的6倍,但这不是它的工作原理,实际上,这种比较甚至没有任何意义。

逻辑设计由标准单元组成,标准单元的高度由金属2间距( metal 2 pitch M2P)乘以走线数量得出。最近的趋势是设计技术协同优化(DTCO),以便最大程度地减少微缩 ,在M2P减少的同时,也减少了track的数量。在一个7.5 track cell中,每个晶体管通常具有3个Fin,而在台积电(TSMC)7纳米和三星电子的5纳米,track cell已经过渡到6个,因此每个晶体管的Fin减少到了2个。为了维持驱动电流,Fin通常更高并且以其他方式被优化。随着行业转移到5个 track cell,每个晶体管的Fin将进一步减少到1。

图三

目前CFET还是正在开发当中,这将作为HNS的扩展,以实现继续微缩的可能。在CFET中,nFET和pFET堆叠在一起,形成不同导电类型的水平纳米片。从理论上讲,CFET可以通过简单地堆叠越来越多的层而随时间变化,甚至可以放松光刻要求,但是要实现2层CFET仍然需要克服许多技术挑战。而且,由于从HNS到2层CFET的互连要求,密度增加了大约1.4倍至1.6倍,而不是预期的2倍。对于相同的工艺节点,2层CFET可能比优化的FinFET提供小于2倍的密度优势,而不是Seeking Alpha文章所说的6倍。

2019年的现状

2019年生产中领先的逻辑工艺是英特尔的10nm工艺,三星的7nm工艺和台积电的7nm光学工艺(7FF)。图5比较了这三个工艺。

图四

在图4中,M2P是 mental 2的间距,如前所述,tracks是track的数量,单元高度是M2P x Tracks。CPP是接触的poly pitch ,而SDB / DDB则代表该工艺是单扩散中断还是双扩散中断。标准单元的宽度是取决于单元类型的CPP数量,然后与单元边缘的SDB相比,DDB增加了额外的空间。晶体管密度是基于NAND单元和Scand Flip触发器单元以60%/ 40%权重混合而成的晶体管密度的加权平均值。在我看来,这是比较工艺密度的最佳指标,虽然不是完美的方法,但却使设计脱离了方程式。

2020年状态

到2019年底,三星和台积电都开始风险试产5nm工艺,并且这两个工艺都将于2020年投入生产。

台积电5nm在密度方面领先,台积电(TSMC)的5nm工艺的密度提高了1.84倍,而7nm却比三星的5nm工艺高了1.33倍。图5将英特尔的10nm工艺与三星和台积电的5nm工艺进行了比较,因为10nm仍是英特尔在2020年密度最高的工艺。

图五

图5中三星的值是三星已确认的所有数字。台积电M2P是令人难以置信的28nm,这是我们在行业中听说的数字。其余数字是我们估计达到台积电所披露的密度改善目标的估计。

显然,台积电在2020年底的工艺密度领先。

2021/2022的展望

现在情况变得更加难以预计,英特尔的7纳米制程将于2021年开始以2.0倍的缩减率开始增长。三星和台积电(TSMC)都将从2021年开始3nm风险试产。假设Intel能够如愿推荐,他们可能会短暂地具有生产密度优势,但是Intel的14nm和10nm工艺都已经晚了几年。随着COVID 19冲击半导体产业,尤其是美国,这使我认为英特尔在2021年的可能性变得更低。

图6比较了2021/2022的工艺,并假设在三个季度的正负四分之一或者三分之二都可用,我认为这是一个公平的假设。英特尔表示其密度将为10纳米的2.0倍,台积电在2020-Q1电话会议上表示3纳米将比5纳米高70%,因此大概是1.7倍,三星表示3纳米将晶粒尺寸相对于5纳米减少了35%,这相当于达到约1.54倍的密度。

为了使Intel的数字正常工作,我假设有一个具有6 tracks的激进26nm M2P,一个针对FinFET和SDB的激进的47nm CPP。

对于三星,他们已经向SemiWiki公开了用于4nm的32nm M2P,我假设他们使用6 tracks cell将其保持在3nm。对于使用GAA HNS的CPP,他们可以实现40nm和SDB。

在台积电的情况下,他们将5纳米制程缩小了1.7倍,而7纳米制程缩小了1.84倍,而且还碰到了一些物理限制。由于性能原因,他们不希望CPP低于45nm,即使采用SDB,他们也必须非常积极地降低单元高度。通过实施掩埋式电源轨(buried power rail,BPR),他们可以进入5track cell,BPR是一项新的困难技术,因此需要22nm的M2P。坦率地说,这么小的M2P会引起光刻和线路电阻方面的问题,而BPR也是激进的,因此我认为这一过程将具有极大的挑战性,但台积电在执行方面拥有出色的业绩。

图6总结了2021/2022制程

图六

图6中的几个有趣的观察。

尽管三星是第一个加入GAA的公司,但我们认为它们的工艺密度最小,而台积电和英特尔都将使用FinFET来提高工艺密度。三星可能做得比我们预期的要好,但我认为它们不会接近台积电的密度。

另一个关键点是,尽管英特尔正在将其7nm缩小到的2.0倍,但在大致相同的时间,台积电正在将5nm缩小到7nm的1.84倍,将3nm缩小至5nm的1.7倍。坦率地说,我惊讶的是,台积电从5nm到3nm的密度提高了1.7倍,我期待的像是1.44倍,而5 tracks cell和22nm M2P相当激进。我认为Seeking Alpha表征台积电的3纳米缩小1.7倍是令人失望的,但它错过了在1.84倍之上达到1.7倍的要点,而且这种组合远远超出了其他任何人所能做的。

2021/2022之后的下一步我希望英特尔和台积电都采用HNS sheets,而三星将生产第二代HNS。紧随其后的是,这三家公司将在2024/2025年左右建立CFET。所有这些已确认的数字和预测都来自 IC Knowledg–战略成本和价格模型。战略成本和价格模型不仅是公司特定的逻辑和存储技术到2020年代中后期的路线图,还是一个成本和价格模型,可产生详细的成本预测以及材料和设备要求。

结论

台积电今年在其5纳米制程密度上处于领先地位。至于英特尔能否领先,则取决于他们的7纳米制程与台积电3纳米制程的发布时间,届时英特尔有可能会暂时夺回制程密度领先优势,但相信台积电将通过其3纳米制程快速通过它们,道是。每平方毫米超过3亿个晶体管!

自监督场景去遮挡

无监督的去遮挡和场景分解这个问题从18年底就开始思考了,因为并没有之前的工作很好地定义场景去遮挡这个问题,更别说解决,更别说用无监督的方法解决,所以前期踩了不少坑。那为什么要用无监督呢?有监督当然能解决,但是太没有挑战性了(划掉),因为amodal mask(包括可见的和被遮挡的区域)的标注是很困难的,具有较大不确定性和歧义性。当首次发现自监督学习可以解决场景遮挡问题,这也是一件令人兴奋的事情。
作者:Xiaohang Zhan
文章首发知乎:https://zhuanlan.zhihu.com/p/129300832
相关论文链接:https://arxiv.org/abs/2004.02788
相关代码链接:https://github.com/XiaohangZhan/deocclusion

1. 问题定义

进入正题。我们先来看看我们希望达到什么效果,如下图:

我们希望将一张真实场景图片分解为完整的物体和背景,物体间根据遮挡关系组成一个有向图。我们将场景去遮挡这个问题分解为如下步骤:

  1. 两两邻接的物体之间的顺序恢复。有了pair-wise ordering之后,我们就可以得到一个描述场景遮挡关系的有向图,称之为遮挡关系图(occlusion graph)。
  2. Amodal completion。在遮挡关系图中,我们可以检索到任意一个物体被哪些物体遮挡了,这样我们就可以进行amodal completion步骤,把物体完整的mask恢复出来。
  3. Content completion。有了amodal mask之后,我们就知道了物体的被遮挡区域(不可见部分),那么下一步就可以想办法在不可见部分填充RGB内容,使得这个物体完整的样子被恢复出来。

我们现在有的数据包括RGB的图片,modal mask和物体类别。modal mask是指物体可见部分的mask,其实就是一般意义的instance segmentation的mask。这些其实正好构成了一个instance segmentation的数据集,例如COCO,KITTI,LVIS这些。注意这样的数据集里并没有遮挡关系和amodal mask的标注,所以用有监督学习的思路是无法解决上述问题的。

2. 自监督的部分补全机制

下面来介绍一个重要的概念,部分补全。在此之前,我们先来介绍完整补全

完整补全是指给定被遮挡的物体和它的遮挡物,一次性将物体完整的amodal mask补全,当然它的前提是需要有ground truth amodal mask作为监督。我们发现一次完整补全等价于一系列的部分补全。

                                                                        完整补全可以转化为一系列的部分补全
**这里的部分补全(partial completion)是指,给定某一个遮挡物,只补全目标物体被当前遮挡物遮挡的部分。**例如给定上图中的圆形遮挡物,把M0补全为M1。然而,这些部分补全过程还是无法训练的,因为补全的中间状态例如M1和最终状态例如M2都是未知的。

接下来则是最关键的操作。如下图,我们将M0再“切一刀”,即从数据集中随机选一个物体,用它的modal mask来盖住M0,得到M-1,然后我们训练部分补全,从M-1恢复M0。这个过程是可训练的。

                                                                                                 自监督的部分补全机制
有了部分补全机制之后,为了方便后续的步骤,我们还需要引入一个正则机制,即下图case 2。

                                                                                                 部分补全的正则化
Case 1是之前介绍的用随机选择的surrogate object来遮挡住目标物体。用case 1来训练的部分补全会永远增加物体的面积。我们又引入了case 2,将surrogate object放在目标物体下面,然后要求在部分补全过程中保持目标物体不变。训练过程在case 1和2之间随机切换,那么网络在训练过程中需要从输入中挖掘信息来判断目标物体是否被surrogate object遮挡,只有在目标物体被遮挡的时候,它才会被部分地补全,否则就会保持不变。

3. 部分补全网络的训练

我们用一个神经网络来模拟这个部分补全过程。部分补全网络(Partial Completion Network – Mask,简称PCNet-M)的训练过程如下,其中A物体为目标物体,B为surrogate object,对于case 1和2,PCNet-M都需要恢复出A的初始modal mask。

                                                                                           训练部分补全网络(PCNet-M)

4. 顺序恢复的推理过程

如下图,有了训练好的PCNet-M之后,我们设计了如下推理过程来恢复遮挡顺序。给定A1和A2两个邻接的物体,我们分别以A1为目标物体,A2为surrogate object,我们发现PCNet-M并没有增加A1的面积;反过来,我们以A2为目标物体,A1为surrogate object,我们发现A2的面积增加了。由此我们可以判断出来,A1遮挡了A2。

                                                                       Dual-completion for Ordering Recovery
这个策略看似简单,实际上很巧妙地利用了正则化后的部分补全机制的选择性补全的特性,获得了很好的效果。我们在COCOA和KINS两个数据集上获得了和有监督方案非常接近的结果。

                                           Ordering recovery定量测试结果

5. 基于遮挡顺序的Amodal Completion

如下图,有了遮挡顺序之后,我们可以构建出一个遮挡顺序图。图中的边从遮挡物指向被遮挡物,这样一来,从图中对于任意一个物体,我们可以得到它的所有祖先节点,即为它的所有遮挡物。其中一阶祖先节点为直接遮挡物,高阶祖先节点为间接遮挡物。例如下图例子中,我们可以得到,物体3有两个直接遮挡物,分别为2和4。判断出遮挡物之后,我们就可以再次利用部分补全网络(PCNet-M)来恢复出amodal mask。

                                                                   基于遮挡顺序的Amodal Completion推理过程
我们还需要解释一下为何要选取所有祖先节点作为遮挡物,而非仅仅直接遮挡的一阶祖先节点。如下图,我们需要补全物体1。从遮挡关系图中,它的一阶祖先节点(即直接遮挡物)是2和4,高阶祖先节点(间接遮挡物)是3。我们发现,只考虑一阶遮挡物,无法完整地补全物体1被物体3间接遮挡的部分。只有考虑所有祖先节点,才可以获得正确的补全结果。

                                                         使用一阶祖先节点和包括高阶祖先的所有祖先节点的对比
下面是amodal completion的结果。同样,我们在amodal completion这个子任务上也达到了和有监督方案非常接近的结果。

              Amodal completion定量测试结果

                                                                                 Amodal completion可视化结果

6. 内容补全

内容补全网络(Partial Completion Network – Content,缩写PCNet-C)的训练方式和PCNet-M类似。同样地,我们无法在训练的时候用完整内容补全的结果来监督,我们设计了如下的部分内容补全的训练策略。给定目标物体A和surrogate object B,我们用A∩B来擦除图片的RGB,作为缺失的需要填充的内容,然后用A\B来代表缺失的内容属于哪个物体。训练的目标是恢复原图。

                                                                                               训练内容部分补全网络PCNet-C
测试的时候,我们有了遮挡物(occluders)和目标物体的amodal mask,取交集,就得到了需要填充内容的区域(即被遮挡的区域)。同时目标物体的modal mask也作为输入,用来表示缺失的区域属于该目标物体而非其他物体。最后PCNet-C将物体完整的样子补全了出来。

(说得这么花里胡哨,这不就是image inpainting吗?

还真不太一样,我们往下看。

如下图,关键的不同之处在于,image inpainting没有modal mask这个输入,因为image inpainting并不care缺失的部分属于哪个物体,只要结果看起来合理就行。那么如果我们直接使用image inpainting,缺失的区域就会被填充为其他物体的RGB,例如下面的咖啡杯。这个结果对于image inpainting是非常合理的,但是对于物体的内容补全来说,则是不正确的。

当然PCNet-C的其他训练方式,包括网络结构,loss等,都跟image inpainting大同小异。所以以后image inpainting做得更好了,也能帮助提升内容补全的效果。

7. 应用1: amodal mask自动生成

给一个普通的instance segmentation dataset,例如下图中的KITTI training set,我们训练PCNet-M并且仍旧在training set上应用我们的amodal completion方法,就可以得到pseudo amodal masks。这样我们相当于在training set上免费拿到了一批amodal mask。

我们来看看这些amodal mask质量和人工标注的amodal mask的对比。我们使用不同来源的amodal mask作为监督,用Mask R-CNN在KITTI上训练了amodal instance segmentation任务,并在人工标注的测试集上测试。我们发现我们的方法获得的amodal mask和人工标注获得了正好一样的结果。这意味着以后可能再也不需要标amodal mask了。

8. 应用2: 场景编辑和重组

既然我们现在能将场景分解开,那么就可以对场景进行编辑和重组。如下图,其中的baseline modal-based manipulation是基于普通的image inpainting做的,只有modal mask,没有ordering和amodal mask。我们的方法基于ordering和amodal mask,能做更加自然的场景编辑。

我们也做了一个图片编辑的GUI,demo如下:
https://link.zhihu.com/?target=https%3A//www.youtube.com/watch%3Fv%3DxIHCyyaB5gU  (youtube)
https://www.bilibili.com/video/BV1JT4y157Wt   (B站)

9. 其他潜在应用

  1. Instance segmentation的data augmentation。还记得去年有一篇很棒的工作(InstaBoost [2], ICCV2019),通过移动物体来做data augmentation,但是不能解决移动物体过程中的遮挡问题。现在配合scene de-occlusion,也许可以做得更好。
  2. 帮助panoptic segmentation后处理中的mask fusion步骤。
  3. 应用到增强现实(AR)中。例如下图,对真实场景做de-occlusion之后,就可以将虚拟的物体放在真实物体的后面。

10. 讨论

  1. 可以解决两个物体互相遮挡吗?不能。因为如下图中的互相遮挡的情况中,无法定义ordering graph。ordering graph是object level的,而互相遮挡则需要boundary-level de-occlusion。也相当于留下了一个open question供大家思考。

                                                                              互相遮挡例子
2. 可以解决多个物体循环遮挡吗?可以。因为我们的方法是按照pairwise来恢复顺序的,所以循环遮挡不会有问题。如下图(因为循环遮挡例子比较少见,我自己用剪刀剪了几张纸片来摆了这么一张图,然后跑了一下测试),预测出来的ordering graph也是一个环。

                                                                                                     循环遮挡例子

Reference:

[1] Xiaohang Zhan, Xingang Pan, Bo Dai, Ziwei Liu, Dahua Lin, and Chen Change Loy. Self-Supervised Scene De-occlusion. In CVPR 2020.

[2] Hao-Shu Fang, Jianhua Sun, Runzhong Wang, Minghao Gou, Yong-Lu Li, and Cewu Lu. Instaboost: Boosting instance segmentation via probability map guided copy-pasting. In ICCV 2019.

推荐阅读:

  • CVPR2019|条件运动传播:从运动中学习物体性质
  • 人脸聚类那些事儿:利用无标签数据提升人脸识别性能

欢迎关注我 ,我是 Xiaohang~

A64的system指令

system指令,也就是sys,sysl指令,的编码如下所示:

L: 传输方向

0:  寄存器传输到系统寄存器,sys指令

1:  系统寄存器传输到寄存器,sysl指令

op0:系统指令类型

2'b00:  访问PSTATE,访问当前PE状态,hint指令,barrier指令,CLREX指令

2'b01:  cache维护指令(DC),TLB维护指令(TLBI),地址转换指令(AT)

2'b10:  访问debug,trace系统寄存器

2'b11:  访问特殊功能寄存器和非debug系统寄存器

op1: 最低访问权限的EL

最低EL0访问:        值为3

最低EL1访问:        值为0,1,2

最低EL2访问:        值为4

最低EL3访问:        值为6
一、op0==2’b00

编码格式如下:

CRn: 指令类型

◾4’b0010 hint指令

◾4’b0011 barriers和CLREX

◾4’b0100 访问PSTATE

1、hint指令

编码如下,不需要寄存器参与,因此Rt固定为5’b11111。

对于Op<6:0>

◾7’b000_0000: nop

◾7’b000_0001: yield

◾7’b000_0010: wfe

◾7’b000_0011: wfi

◾7’b000_0100: sev

◾7’b000_0101: sevl

◾其他:未分配,当作nop

2、barriers和CLREX

编码如下,不需要寄存器参与,因此Rt固定为5’b11111。

对于op2:

◾3’b010: CLREX

◾3’b100: DSB

◾3’b101: DMB

◾3’b110: ISB

◾其他: undefined

对于CRm,是指令的选项

3、访问PSTATE

编码如下,不需要寄存器参与,因此Rt固定为5’b11111。

共有以下一些指令:

对于op2:

◾3’b011: MSR UAO, op1必须是0,至少EL1访问

◾3’b100: MSR PAN, op1必须是0,至少EL1访问

◾3’b101: MSR SPSEL, op1必须是0,至少EL1访问

◾3’b110: MSR DAIFSet, op1必须是3,由SRCLT_EL1.UMA配置,是否可以EL0访问

◾3’b111: MSR DAIFClr, op1必须是3,由SRCLT_EL1.UMA配置,是否可以EL0访问

二、op0==2’b01

编码格式如下:

CRn和CRm决定指令类别。

对于CRn:

7: cache维护指令和地址转换指令

对于CRm:

1,5:  指令cache维护指令

4:        数据cache清零操作

6,10,11,12,14:     数据cache维护指令

8:        地址转换指令

8: TLB维护指令

其他,设计定义。

1、cache维护指令(DC)

下表,列出了编码和对应的DC指令

2、地址转换指令(AT)

下表,列出了编码和对应的AT指令。

AT指令,获取指定VA地址的PA地址。

对于AT指令,汇编语法为:

        AT <operation>, <Xt>

<operation> 就是上表中的操作

<operation>结构为 <stage><level><read|write>

<stages>:

S1:      stage1 转换
S12:    stage1转换完后,接着stage2转换

<level>: 需要进行地址转换的EL

E0:      EL0
E1:        EL1
E2:        EL2
E3:        EL3

如果<level>是高于当前的EL,那么指令产生UNDEFINED

<read|write>,是针对于读,还是写进行地址转换

R:         读
W:        写
3、TLB维护指令(TLBI)

下表列出了编码和对应的TLBI指令。

TLBI指令,针对TLB操作的指令,对指定的TLB,进行invalid操作。

三、op0==2’b10

访问debug和trace系统寄存器

其编码格式如下:

op1的值,决定是访问debug寄存器还是trace寄存器,而CRn,CRm,op2的组合,决定了访问哪一个系统寄存器。

四、op0==2’b11

访问非debug系统寄存器和特殊功能寄存器。

编码格式如下:

CRn,决定访问寄存器类型。

非debug寄存器,就太多了,这里就不列举了。

对于特殊功能寄存器,有以下:

系列其他篇

  • [coresight(七)coresight的两大功能](https://aijishu.com/a/1060000…)
  • coresight(八)soc-400套件

原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。

HDLBits:在线学习 Verilog (十 · Problem 45 – 49)

转载自:知乎

首先附上传送门:

https://hdlbits.01xz.net/wiki/Exams/m2014\_q4e

Problem 45 NOR

实现如下电路:

解析: 一个或非门

module top_module (
    input in1,
    input in2,
    output out);

    assign out = ~(in1 | in2);

endmodule

Problem 46 Another gate

实现如下电路:

解析:一个与门,但输入in2需要取反。

module top_module (
    input in1,
    input in2,
    output out);

    assign out = in1 & (~in2);

endmodule

Problem 47 Two gates

​ 实现如下电路:

解析: 如上图所示, 一个异或门,一个同或门,我声明一个wire型的temp来存放同或门的输出。

module top_module (
    input in1,
    input in2,
    input in3,
    output out);

    wire temp;

    assign temp = in1 ^~ in2;
    assign out = temp ^ in3;

endmodule

Problem 48 More logic gates

​ 本题希望我们用两输入的组合电路来实现如下功能,该电路共用于7个输出,具体情况如下:

  • out\_and: a and b
  • out\_or: a or b
  • out\_xor: a xor b
  • out\_nand: a nand b
  • out\_nor: a nor b
  • out\_xnor: a xnor b
  • out\_anotb: a and-not b

解析:

(本次练习期望仅使用七行语句)

//Module Declaration
module top_module( 
    input a, b,
    output out_and,
    output out_or,
    output out_xor,
    output out_nand,
    output out_nor,
    output out_xnor,
    output out_anotb
);

    assign out_and = a & b;
    assign out_or  = a | b;
    assign out_xor = a ^ b;
    assign out_nand = ~(a & b);
    assign out_nor = ~(a | b);
    assign out_xnor = ~(a ^ b);
    assign out_anotb = a & (~b);

endmodule

Problem 49 : 7420 chip

​ 在此之前,我们已经复习了Wire, GND, NOR 和 Another gate,这对我们编写7420 chip的电路已经打下了基础。

牛刀小试

​ 7420 chip是拥有两组4输入的与非门芯片,本练习需要构造一个与7420 chip功能一样的电路,拥有8个输入与2个输出。

解析: 7420 chip的电路很简单,仅有两个4输入的与非门,两条assign语句便可实现。

(本次练习期望仅使用两行语句)

module top_module
    (
        input  p1a, p1b, p1c, p1d,
        output p1y,
        input  p2a, p2b, p2c, p2d,
        output p2y
    );

    assign p1y = ~(p1a & p1b & p1c & p1d);
    assign p2y = ~(p2a & p2b & p2c & p2d);

endmodule

推荐阅读

  • HDLBits:在线学习 Verilog (九 · Problem 40 – 44)
  • HDLBits:在线学习Verilog(八 · Problem 35-39)
  • HDLBits:在线学习Verilog(七 · Problem 30-34)

关注此系列,请关注专栏FPGA的逻辑

偏差(variation)的分类

要了解ocv aocv socv pocv等概念,需要先了解与之相关的variation的概念,其实各种ocv其实就是对variation的数学抽象,区别仅是哪种更为精确。

偏差的分类

如图,偏差可分为工艺偏差,温度偏差,电压偏差。设计中引入各种偏差的目的是使得我们的电路能够在我们设计的PVT的整个范围内,都能够正常工作。

工艺偏差(process variation)

工艺偏差,指的是芯片在生产过程中引入的偏差,可以分为全局工艺偏差,局部工艺偏差。

全局工艺偏差 (global process variation)

全局工艺偏差,包含了相同wafer中die与die之间以及wafer与wafer之间,lot与lot之间的偏差。

单元库需要包括多个不同PVT条件下的时序库。

通过不同PVT下单元库进行电路进行特征化进行的。在芯片进行签收(signoff)时需要在多个不同的PVT下进行,就是为了弥补不同的全局工艺偏差。

由于历史的原因,比较老的工艺下,对单元库进行特征值提取时,也会考虑的局部工艺偏差(从名称上,ssg ffg则是指的global工艺偏差 ,ss ff则表示也包含了local工艺偏差)。而这会引入不必要的悲观,在先进工艺下,已经不再采用这种方式,在后续的章节中我们再进行介绍。

局部工艺偏差 (local process variation)

局部工艺偏差, 则指的是同一个die内部,不同位置的process上的差别。

对于局部工艺偏差,需要包含在我们的OCV设置中,而OCV设置的方法有一下几种:On-chip Variation Advanced OCV(AOCV) POCV (LVF)

温度偏差 (temprature variation)

晶体管的速度会受到温度的影响而变化。对于金属互联线,温度影响较小。

温度偏差包括了环境温度,以及由于芯片运行所导致的温度升高。

环境温度容易测量,但是真正对晶体管的影响表现在结温(junction temprature)。

结温是环境温度以及芯片本身运行所导致的温度升高之和。

真正对晶体管产生影响的实际上是结温。

而且结温通常会远高于环境温度。

例如,对于工业级芯片,环境温度多会处于-40C以及85C之间。但是在进行signoff时,往往需要进行125C的signoff。

对于工艺库中的标称温度,同样也指的是结温。如果想知道结温与环境温度的关系,则需要根据不同的封装的参数进行热仿真来获得。

对于军用级芯片,往往-40C~125C的结温范围仍然不够,这样则需要提供额外PVT条件下的时序库或者增加相应的余量以便能够覆盖超出的温度范围。而这部分的余量,可以增加额外的derating,也可以通过设置更大的uncertainty值来实现。

温度与延迟的关系

备注:通常来说,温度的升高会导致cell的延迟增大,但是由于先进工艺中存在温度反转的现象,仅仅在高温下进行setup的时序检查已然不够。因此,也需要同时检查最高温度以及最低温度下的setup时序。

电压偏差 (voltage variation)

电压偏差的来源有多种,例如电压源精度,电源网络的电压降,环境噪声,mos管活动本身都会导致电源网络的电压的变化。

现实中是不存在一个理想的电压源的。

因此,芯片需要在一个电压范围内都能够正常工作。

我们拿到的时序库,通常会覆盖标称电压(nominal voltage)的±10%的范围,就是这个原因。

延迟随电压的升高而降低

作者:白山头
来源:https://mp.weixin.qq.com/s/PV…
作者微信公众号

相关文章推荐

  • 献给芯片设计新手:后端设计的基本流程是什么?
  • 后端基础概念:各种OCV一网打尽(上篇)!
  • 你可能不知道的leakage功耗计算

更多IC设计技术干货请关注IC设计技术专栏。

《HarmonyOS物联网应用开发》课程上线

一、讲师简介
51CTO的学员们,大家好!

我是51CTO学院的新晋讲师许思维,目前就职于江苏润和软件股份有限公司,任高级软件工程师一职,同时也是企业内训讲师。我擅长的领域包括Linux系统编程、单片机编程,以及Android App和Android HAL开发。

作为HarmonyOS官方合作伙伴,润和HiHope团队出品了首批支持HarmonyOS的HiSpark系列开发套件。

二、课程简介

课程主页:https://edu.51cto.com/course/…

作为全新的操作系统,HarmonyOS的全场景、分布式、高安全性等特性可谓特色鲜明。尤其是它的全场景特性,让HarmonyOS可以支持小到智能手环、智能开关,大到智慧屏、智能电视这些设备,具有非常强大的伸缩性。

本套课程是基于HiSpark Wi-Fi IoT套件进行讲解和演示的,该开发套件搭载了支持WiFi(IEEE 802.11 b/g/n 标准)的海思Hi3861芯片,基于它的WiFi连接能力,以及扩展板的传感器设备,我们可以实现具备连接和感知能力的物联网应用。

通过本套课程的学习,你将学会Harmony OS开发环境搭建、使用Harmony OS控制外设、使用Harmony OS控制WiFi,以及使用Harmony OS进行网络编程、将Harmony OS设备接入物联网平台等相关知识和技能。通过本套课程的学习,可以对Harmony OS设备开发和物理网应用开发,以及HiSpark Wi-Fi IoT套件各个模块的功能有全面而深入的了解。

三、HarmonyOS开发环境
开发环境整体分为三部分,如下图所示:

其中,Linux主机用于源码下载和编译,Windows主机用于源码编辑和烧录二进制程序到开发板。

四、课程目录

 本门课程是完全免费的,课程目录如下图(本套课程正在持续更新中,欢迎订阅本课程,及时获知内容更新):
 

课程主页:https://edu.51cto.com/course/…

本套课程正在持续更新中,欢迎订阅本课程,及时获知内容更新。

为方便大家直接获取课程讲义和示例代码,本套课程的所有讲义和示例代码均已在码云开源,码云代码仓链接:https://gitee.com/hihopeorg/H…(码云代码仓也会持续更新,欢迎Star关注)

也欢迎大家随时与我沟通交流与HarmonyOS相关的技术问题,联系我请加 鸿蒙物联网技术交流 QQ群:481165067

五、我的其他课程

后续,我还会推出其他开发课程,欢迎查看我的课程首页:
https://edu.51cto.com/lecture…


作者:许思维
想了解更多内容,请访问:
51CTO和华为官方战略合作共建的鸿蒙技术社区
https://harmonyos.51cto.com#jssq

智能安防的普惠密码,在华为好望手中的三根“线头”上

美国有个以解乱线团为乐的网络社区,世界各地的成员们甚至会专门从网络上购买乱线团,然后想尽办法让纠结在一起的毛线变得有序,当然,不能动剪刀。

听起来有些无厘头,但现实中,人们反而总会有意无意地将自己置于各种乱线团的“麻烦”当中。

就拿大家都司空见惯的智能摄像机来说,随着各种算法模型、解决方案、软硬件产品的不断增加和迭代,对AI充满期待的行业管理者们也面临越来越复杂的选择,很容易陷入一种慌乱、茫然的状态。

类似的案例俯拾皆是。疫情期间,绝大多数公共区域和产业园区都引入智能识别系统来进行体温检测,提高出行效率。但同时,也出现不少地方发现部署的摄像机没法采集到决策所需要的数据,亦或是在公共垃圾桶等区域过度部署,居民体验不佳转身一个投诉……这些AI应用中的“乱线团”,就像是老弄堂里纠缠在天际的电线一样,各种矛盾、情境交织在一起,让AI落地变得混乱难解,甚至可能变成无用功。

随着产业的逐步深化,这些“乱线团”已经有了不少解法。归根结底,是寻找到解开矛盾症结的那根“线头”,理顺AI落地背后的规律与顺序,进而将现实中的复杂问题一一化解。

华为好望秋季品鉴会,就通过一个个关于AI落地的真实案例,分享了大量从业者的实践与思考。将能够不断打开“乱线团”的关键“线头”,交付到产业手中。

第一个线头:产业呼唤的全栈能力

请大家想象一下,当你拿到一个“剪不断理还乱”的线团,会怎么去解开它?盲目上手只会让线团变得更加混乱。正常情况下,第一步我们都会选择将它展开得蓬松一点,在千头万绪之中找到解决问题的线头。

同理,AI落地过程中,能否让整个工作保持在一个具有足够扩展空间的选择范围内,十分重要。然而在现实中,AI项目却总是会处处碰壁。

就拿高校食堂来说,开学之后,不少学校都出现了外卖小哥和学生们隔着围栏“地下交易”,食堂保安们尝试阻止的新闻,为校园日常管理平添了许多烦恼。原因就是常规管理模式在防控措施面前翻车了。

学校既需要控制每个食堂的就餐人数,可就餐高峰期学生也不知道食堂有多少人,食堂也不知道该配多少餐,结果往往是学生下课赶过去却发现没饭了,只能急忙奔赴下一个“战场”。

学校也考虑过智慧食堂来提高服务水平,可了解了一圈发现,不是硬件有限制,传统垂直双目摄像机架设在门口容易被空调等设备挡住,玻璃门也会增加安装风险;要么就是算法达不到,有些摄像机的算法会将在食堂门口徘徊的人也算进流量中去,无法给备餐工作提供决策支撑。有的就是简简单单的“太贵了”,动辄占地百亩的新校区,学生和教职工食堂加起来就有十几个,需要部署的点位也多,如果都采用价格昂贵的摄像机,改造成本就太高了,而且数据规模及存储、算力等要求也会直线上升。

这些复杂因素交织在一起,就形成了一个越缠越紧的“线团”,将AI项目困在其中。

要解开其症结,关键在于找到一个在硬件、算法、方案等都能提供多元化选择的“全能型”支撑。

比如福建某大学,就在活动中分享了和华为好望及其ISV合作伙伴一起,让食堂脱离“管理泥潭”的案例。

简单来说,就是从三个角度提供了更多的选择空间,比如:

硬件上“因地制宜”:最终选择的华为好望D10系列定焦产品,在室内室外、30°到60°角度都能任意安装,较强的普适性可以大大减少改造时资源浪费的概率。

算法层“因人制宜”:基于深度学习检测的算法,D10设备头肩算法准确率达到95%以上,最小支持32*32像素的目标检测,并且将区域与划线相结合,减少徘徊人员误差。这下就能通过数据采集和算法分析,切实有效地支撑食堂管理和决策,学生也可以通过公众号了解到所有食堂所有目前就餐的人数以及就餐状态,合理安排就餐。

方案“因变制宜”:考虑到大学食堂智慧化建设的成本控制需求,华为及其福建的合作方,一起给学校量身打造出了最优方案,只用D10系列定焦产品就完成了客流统计兼顾视频监控的方案目标。也由于技术产品的成熟度和高性价比,获得了规模化复制的可能,最近已经开始在福建全省的高校进行推广。

可以看出,正是从技术、产品、方案、性价比等全链完成了“扩容”,才能让行业用户更加游刃有余地规划适合自身业务需求的AI项目,预期中的智能化价值才能被不断打开。

第二个线头:工程化基石上的AI价值

搞清楚了拆解“乱线团”的姿势,就等于找到了解决AI落地问题的捷径,无论琐碎混乱成什么样子,都能快速让各行各业的“线头人”抽丝剥茧,循着线头不断打开僵局。

一直以来,老旧小区以改造难度大、教育成本高,让许多看起来很美的智能解决方案,在落地时屡屡碰壁。

比如越来越多的小区在防疫期间安装了智能摄像机,但居民佩戴上口罩之后,普通的人像防控就很难发挥作用了,机场、高铁站等场所中采用的专业人像识别方案,又因为小区部署的并发路数少,导致平均使用成本增高。

怎样在不增加居民困扰和成本压力的基础上,提升小区的幸福感和安全感?这时就需要具备工程化能力的团队,让成本可控、价值可感的AI,能够快速、稳定、可靠地下沉到这些相对贫瘠的数字土壤上。

成本可控,需要硬件、算力、运维等全面到位。华为就从复杂的线团中找到了解决问题的根技术:1T算力的普惠AI产品。

在老旧小区智慧化改造的案例中,华为的算力共享池就成为降本增效的神器。简单来说,就是D10-SIU+D10+NVR多个摄像机联动,“个体部署,全局智能”,一个智能摄像机作为算力源,就能带动多个普通摄像机拥有智能识别的能力,最高可以达到64T的算力,而同样的功能,传统分销方案可能要部署8台以上具备AI功能的设备才能达到。

价值可感,指的则是智慧改造方案能够对小区管理中的痛点“重拳出击”,切实有效地搔到居民的“痒处”。诸如前文提到的口罩下人脸识别难的问题,归根结底取决于算法的性能。华为好望摄像机就借助华为2012实验室的自研的“超级人像算法”,做到了佩戴口罩也能达到90%以上的识别准确率,大大提升了居民进出效率。

至于很多老旧小区屡见不鲜、屡禁不止的不文明行为,像是乱丢垃圾、违章乱停、电瓶车入户等,传统的社区视频监控只能在事发后查阅录像,发现一个查处一个,华为好望的解决方案则让不带智能功能的摄像机也能实时监测、及时制止。

技术的易得性、算法的准确度、方案的性价比,共同缔造了AI的工程化能力,也决定了智能普及速度。这也是为什么,华为好望的D10-SIU产品,开始被越来越多的安防业界人员称为老旧小区的改造利器。

第三个线头:小人物的长尾需求

从前两个案例中,不难看到机器视觉领域分销市场的一些特殊之处:

成本敏感度高,资金预算不高,需要多元化的产品和思路来满足,上游厂商的定位很可能会挤压落地服务商的价值空间,从而减缓AI普及的进程;

AI渗透率低,受认知、人才、管理等多方面原因,对于智能化价值不知道如何下手,对前沿技术产品和服务了解得不够;

长尾需求繁杂,校园、小区等都是人群密集、各类用户属性存在于同一空间内,衍生出许多个性化的长尾需求,这时候就不是几个通用算法能够搞定的了。可是单体规模又不够大,遇到眼高手低的厂商,其真正需求很可能得不到解决。

长尾需求的满足,是每一个普通人真实感知技术愉悦感的关键,同时也是“乱线团”最多最杂的地方。

举个例子,在小区很多隐蔽的角落里,都会出现意想不到的“致命风险”,那就是高空抛物。

这个城市空间管理的“老大难”问题,监控难、定责难、赔偿难,让物业们挠秃了头。

这时,普惠AI就展现出关键作用。先来说说华为好望的三板斧:高性价比的D10-SIU产品,搭载滤波卷积算法,一个小烟盒都能被立即发现;物理抛物线模型,实时绘制抛物轨迹,让各位“抛物达人”被快速定位,在北京的水木清华园小区中,该解决方案就在一分钟之内快速定位了数起高空抛物行为,便于追责;此外,算法还可以灵活切换,需要增加高空抛物检测功能时,小区可以直接到好望商城下载高空抛物合作生态算法,其他时间段可以更换成人流量统计等算法,一机多能,可以快速将技术转化为生产力。

面对这些独特场景下的繁杂需求,并没有一个放之四海而皆准的万能公式可供套用,能做的就是携手行业伙伴,山一程水一程地摸索实践。

智能安防的“引线人”,行走在万家灯火间

华为好望秋季品鉴会所展示的案例,其价值释放的直接对象都是“人”,庞大且具体的每一个“人”。这也是智能安防分销市场最重要的宝藏。

智能在千家万户中的井喷,将打开一个全新而庞大的市场,但大多数落地难度都可能远超我们的想象。要采撷这一宝库,还需要应对诸多复杂的挑战:

定制化的解决方案,需要能够读懂不同行业水土的“耕种者”;

缺乏数智沉淀的传统行业,需要保姆级的一揽子解决方案;

现实中的一个问题往往需要多模态技术的集成与融合来解决,需要一个共生共赢的生态协作体系。

而这些“乱线团”能够被一一解开,华为扮演了“穿针引线”的关键作用。而之所以理清智能安防分销市场的顺序和规律,找到解决落地难问题的“线头”,其实可以追溯到今年三月。

彼时,华为智能安防中文品牌“好望”问世,就源于对安防分销市场的洞察与思考,并将其注入到了自己的新定位上,那就是普惠AI的赋能者,智能安防生态的共建人。

“凡事预则立不预则废”,如今春去秋来,在华为好望秋季品鉴会的第二站,华为好望及其合作伙伴,也在产业实践中越来越得心应手,将一个个AI的乱线团变成了人们期待中的样子。用《时间之书》中的一句话来结尾或许再合适不过——

“年轻人,你的职责是平整土地,而非焦虑时光。你做三四月的事,在八九月自有答案。”

【芯视野】北斗芯片的下一站“野望”

终于等到这一刻。

随着北斗三号全球卫星导航系统GNSS日前的正式开通,自1983年立项研究,1994年开始建设,到2020年完成,耗时37年、北斗“三步走”发展战略圆满收官,北斗亦迈入全球服务新时代。与此相匹配的是,我国卫星导航与位置服务产业总体产值有望超过4000亿元。叠加5G、物联网、大数据的兴起,北斗将与这些技术加速实现融合创新,形成一个个“北斗+”创新和“+北斗”应用的新生业态。毫无疑问,乘风破浪的北斗芯也将迎来“芯”的征程。

全新的“使命”

北斗所引发并带动的“新纪元”,对芯片业来说自然蕴含着巨大的“金矿”。以北京华力创通科技股份有限公司卫星导航事业部总经理刘鹏辉的话来说,就是GNSS各大系统之间的竞争为北斗芯片发展提供了政策动力;资本追逐,为北斗芯片发展提供了资金保障和资本动力;市场竞争,后来者居上,客观上对芯片提出了更高要求。无论是国家意志、资本意志和市场意志,都为北斗芯片的发展注入了新的强心剂

据《2020中国卫星导航与位置服务产业发展白皮书》数据显示,全球GNSS 细分市场呈现新的变化并得到进一步拓展,2019年除原有公路、铁路、海事、农业和航空等5大市场外,位置服务、测绘和授时同步等3个细分市场已拓展为消费解决方案、地信系统和关键基础设施三大市场,新兴的无人机和应急响应市场也受到广泛关注。可穿戴设备市场快速增长,已成为仅次于智能手机的第二大GNSS设备市场,2019年全球出货量达到7000万台,而双频和高精度在智能手机和可穿戴设备中越来越受到欢迎。预计2029年,GNSS 设备销量会达到28亿台/套,保有量达到95亿台/套,设备和服务收入增长到3244亿欧元。

未来的体量如此巨大,北斗芯片作为核心,也将承载“芯”的使命。

正所谓“天上建好,地面用好”。“基础核心芯片主要用于地面端,处于应用产业链的上游,需要解决‘好用’的问题,因而北斗芯片的性能和可用仍是关键,高精度大众化是必然趋势。”在芯片领域深耕多年的和芯星通科技(北京)有限公司市场总监高静波谈到。

行业一般将标准精度定为米级、亚米级,而高精度为分米、厘米级,不同应用领域需差异定位。高静波进一步解读说,在智能驾驶、无人机、农机、测绘、CORS等领域,需要稳定、连续的厘米级RTK定位精度,并解决复杂场景下的可靠定位等等。而在智能手机领域,采用的多是集成了定位算法的处理器芯片,多采用北斗+GPS双系统联合定位,定位精度较专业的定位芯片还有一定的差距。而随着双频、多频以及云端增强等在智能手机的应用,将实现质的提升

从趋势来看,高静波分析,未来北斗芯片在标准精度上朝着更高精度、更低功耗迈进,在算法上实现片上RTK、支持Open MCU以及云端辅助增强等;而厘米级高精度产品则朝着更低成本、更高性能去努力。未来北斗芯片遇到的最大挑战将来自于在市场同质化中找到个性差异化竞争优势。

此外,融合也是北斗释放价值链的最佳“战略”。北斗作为后起之秀,客观上与其它卫星导航系统如GPS、Galileo存在竞合的关系。高静波判断,将北斗+GPS甚至+GLONASS +Galileo等多系统融合的产品,可收到更多的卫星,从而选择更优的星参与解算,在芯片上则可配置为单北斗定位,或多系统联合定位。此外,AI、5G、新基建将催生出更多的“北斗+”新应用,芯片端要考虑做好“融合”,即“多系统融合”与“多源融合”。

刘鹏辉也分析说,卫星导航应用层面具有“依附”或“黏着”属性,与5G、AI、ADAS、Satcom等具有强位置服务要求的技术和应用融合是刚需,客观上为北斗与其它技术在IP、DIE或套片层面集成提供了技术集成场景和应用场景。北斗芯片自身在工艺、功能纵向发展的同时,诸多应用也为北斗在横向的技术和产品集成层面提供了发展空间

集成的“推演”

无论是定位算法还是与其它芯片的集成,看来已是北斗芯片厂商的“必杀技”。

而事实上北斗芯片已是多模多频卫星导航芯片的简称。从刘鹏辉的观点来看,目前北斗芯片进一步研发的重点是“被集成”,如手机芯片厂商早已经将卫星导航功能集成在套片中,高通的Snapdragon系列、华为麒麟系列、MTK系列等手机芯片已经将GPS/北斗/Galileo导航定位功能集成

手机芯片集成卫星导航功能,具有刚需性,也有利于降低应用成本、功耗、体积等。刘鹏辉认为,与AI等其它技术集成,也应遵循跟手机芯片集成卫星导航类似的逻辑。由于卫星导航芯片的附属性,其根源在于被附属的技术和应用,挑战在于被附属的技术的发展,能不能达到手机芯片的量和价

不止于此,目前北斗与射频前端、传感器的集成也在向前。高静波指出,北斗不仅做到了射频、基带、算法一体化,也越来越多地通过Sensor Hub等实现多传感器融合。而在相同的尺寸下,不断将功耗做低、功能做强、性能做优,需要更强大的算法和更先进的工艺。

工艺的“进阶”

目前市场上最新的芯片工艺已经下探到7nm和5nm,采用这些工艺都是为了复杂的芯片设计,涉及很大的计算量。

虽然北斗芯片也在性能、功耗上不断优化,但或许不需要承受这样的“激进”。

高静波指出,22nm是目前更为合适的选择,该工艺已可高效提升芯片的性价比。定位芯片相较于移动通信类等处理器芯片,有它的独特性,是轻量级芯片,用户需要实现更高的性价比。当工艺提升一代时,其成本可能会高出一倍,因而北斗芯片在性能提升和成本增加之间要有一个取舍的平衡点

对此,刘鹏辉也谨慎认为,芯片工艺路线图取决于市场需求,具体体现在量/价比。目前22nm纯导航芯片已是国内外行业最高专用芯片工艺,此工艺的设计和流片成本支撑其决策依据,而进一步发展需待22nm工艺经市场检验后待定。未来的工艺发展逻辑也遵循类似的逻辑

据悉,和芯星通在芯片工艺上不断演进,目前已经采用了目前导航定位领域最为先进的22nm技术,无论从体积、功耗、价格上均具有领先的竞争优势。

自主的“命题”

在国际环境波谲云诡的形势下,让自主可控成为“高频词”,而北斗芯片在这方面已然顾盼自雄。

在北斗芯片领域耕耘多年的厂商包括和芯星通、华力创通、振芯科技、泰斗微、众合思壮、杭州中科微、东方联星、华大北斗等,在芯片精度、集成度以及模块整合等层面在不断精进,拓宽边界。

目前北斗芯片在设计、制造等关键环节已基本自主可控,但考虑到芯片中的部分IP,如CPU、AD等,以及设计工具EDA等,例如国内北斗芯片中的CPU大都从Arm授权,从这一角度说,不是100%自主可控,但没必要较真。”刘鹏辉直言。

高静波则认为,北斗芯片的自主可控要保证自主知识产权产权的同时,更聚焦、加大对国产芯片头部企业的支持和投入

而北斗在“墙内开花”的同时,也应更让“墙外香”。高静波明确说,受疫情影响,海外市场需求有一定的萎缩,但未来仍会是和芯星通大力拓展的方向。得益于北斗的覆盖全球,北斗下游的合作伙伴未来也能够将产品销往世界。海外市场的拓展也会基于国内市场的充分培育,不断推进。

随着国内企业国际化战略逐步落地,海外市场占有率会越来越高。毕竟,性价比好的东西,除政治因素外客户都不会拒绝。”刘鹏辉乐观期待

无论如何,北斗在筚路蓝缕之后,也将玉汝于成。北斗未来的征程必定是星辰大海,而北斗芯片的荣光也将熠熠生辉。(校对/Sky)

HDLBits:在线学习 Verilog (十三 · Problem 60-64)

本系列文章将和读者一起巡礼数字逻辑在线学习网站 HDLBits 的教程与习题,并附上解答和一些作者个人的理解,相信无论是想 7 分钟精通 Verilog,还是对 Verilog 和数电知识查漏补缺的同学,都能从中有所收获。

转载自:知乎

首先附上传送门:

Mux2to1 – HDLBits​hdlbits.01xz.net

Problem 60 : 2-to-1 multiplexer (Mux2to1)

从本题开始的五道题将讨论数字电路中的多路选择器的使用。选择器是一个使用频次很高的模块,选择器从多个输入数据流中选取一个输出到公共的输出端。在综合的过程中一些 Verilog 语法会显式地被”翻译”为选择器,可以在综合结果中看到对应的选择器模块。

牛刀小试

本题中需要实现一个 2 选 1 选择器,sel 信号作为选择信号,当 sel = 1 时选择 b,反之选择 a。

解答与分析

module top_module( 
    input a, b, sel,
    output out );
    
    assign out = (sel) ? b : a;
    
endmodule

本题中如果直接翻译题目要求中的逻辑,则对应的逻辑表达式为 (sel & b) | (~sel & a)。在解答中使用了三元运算符简化了逻辑表达,使其更加易读。

三元运算符(Ternary operator)的使用方式是这样的:

cond ? iftrue : iffalse 。cond 条件为真,则表达式的值为 iftrue,反之表达式的值为 iffalse。具体看 (sel)?b:a 式,当 sel 为真时,结果为 b,反之结果为 a。

Verilog 三元运算符原理和 C 语言中的三元运算符相同。但使用更加频繁,尤其是和 assign 的组合:

assign out = (sel)?b:a;

嵌套的用法也十分常用,比如求 a,b,c 中的最大值,可以在一个三元运算符中嵌套两个三元运算符。

assign max = (a > b) ? 
    (a > c)?a:c
    :
    (b > c)?b:c
    ;

在嵌套使用时,为了防止混乱,最好将 cond iftrue iffalse 分行书写。

Problem 61 : 2-to-1 bus multiplexer (Mux2to1v)

本题与上一题的区别在于信号从单比特宽度变成总线信号,但选择器的原理以及对应的代码与前一题相同,这里不再赘述。

Problem 62 : 9-to-1 multiplexer (Mux9to1v)

牛刀小试

本题中需要实现一个 9 选 1 选择器,sel 信号作为选择信号,当 sel = 0 时选择 a,sel = 1 时选择 b,以此类推。sel 信号位宽为 4bit,当 sel 大于 8 时,输出 16’hffff。

解答与分析

module top_module( 
    input [15:0] a, b, c, d, e, f, g, h, i,
    input [3:0] sel,
    output reg [15:0] out );
    always @(*)begin
        case(sel)
            4'd0:out = a;
            4'd1:out = b;
            4'd2:out = c;
            4'd3:out = d;
            4'd4:out = e;
            4'd5:out = f;
            4'd6:out = g;
            4'd7:out = h;
            4'd8:out = i;
            default:out=16'hffff;
        endcase
    end
endmodule

本题如果使用 assign 语句实现会非常繁复,这里使用逻辑上更加直观的 case 语句。case 语句只能在 always 块中使用。本题为组合逻辑,使用 @(*) 作为敏感列表。

Problem 63 : 256-to-1 multiplexer (Mux256to1)

牛刀小试

本题中需要实现一个 256 选 1 选择器,sel 信号作为选择信号,当 sel = 0 时选择 in[0],sel = 1 时选择 in[1],以此类推。

解答与分析

module top_module (
    input [255:0] in,
    input [7:0] sel,
    output  out
);

    // Select one bit from vector in[]. The bit being selected can be variable.
    assign out = in[sel];
        //assign out = in >> sel;
    
endmodule

本题实质上和 9-to-1 选择器相同,但写一个有 256 case 的 case 语句有些疲劳(手写没有必要,但可以用脚本生成一个)。这里我们可以根据题目的要求,结合选择运算符的特性实现。根据提示:选择运算符的 index 可以为变量,只要变量的位宽和向量的长度匹配即可。

所以我们直接将 sel ,这个变量,作为片选向量 in 的 index。

根据题意,也可以将输入向量 in 右移 sel 位,高位被截去,输出最低位上的 in[sel]。同样,移位的长度也可以使用变量。

Problem 64 : 256-to-1 4-bit multiplexer (Mux256to1v)

牛刀小试

本题中需要实现一个 256 选 1 选择器,sel 信号作为选择信号,当 sel = 0 时选择 in[3:0],sel = 1 时选择 in[7:4],以此类推。同上一题的区别在于,位宽从 1 位变到了 4 位。

解答与分析

module top_module (
    input [1023:0] in,
    input [7:0] sel,
    output [3:0] out
);

    // We can't part-select multiple bits without an error, but we can select one bit at a time,
    // four times, then concatenate them together.
    assign out = {in[sel*4+3], in[sel*4+2], in[sel*4+1], in[sel*4+0]};

    // Alternatively, "indexed vector part select" works better, but has an unfamiliar syntax:
    // assign out = in[sel*4 +: 4];        // Select starting at index "sel*4", then select a total width of 4 bits with increasing (+:) index number.
    // assign out = in[sel*4+3 -: 4];    // Select starting at index "sel*4+3", then select a total width of 4 bits with decreasing (-:) index number.
    // Note: The width (4 in this case) must be constant.

endmodule

本题如果延续上一题的思考方式: assign out = in[ sel*4+3 : sel*4 ]; 但这个表达式不符合 Verilog 片选操作符的语法。片选多个比特的正确语法有两种:

assign out = in[sel*4 +: 4];// 从 sel*4 开始,选择比特序号大于sel*4 的 4 位比特,相当于[sel*4+3:sel*4]
assign out = in[sel*4+3 -: 4];    // 从 sel*4+3 开始,选择比特序号小于 sel*4+3 的 4 位比特,相当于[sel*4+3:sel*4]

当然本身 in[ sel*4+3 : sel*4 ] 这样的语法是不能使用。还有一种思路是将 4 bit 分开选择,再使用位连接符连城宽度为 4 的向量。

其实移位的思路也可以继续使用,只要将 in 右移 4 位,因为高位被截断,仍能够实现题意。但值得注意的是,虽然移位操作符可以使用变量,但不能在移位操作符中对变量进行操作:

assign out = in >> (sel << 2); 这样是不行的,只能通过使用一次中间变量来将 sel 移位。

wire [9:0] sel\_shift = sel << 2;

assign out = in >> sel\_shift;

结语

至此,多路选择器的题目就结束了。在位宽较小的多路选择器中,我们可以使用 assign 语句,三元表达式,case 语句等。在位宽较宽的多路选择器中,需要根据需求灵活地使用位选择符或者位连接符。

推荐阅读

  • HDLBits:在线学习 Verilog (十二 · Problem 55 – 59)
  • HDLBits:在线学习 Verilog (十一 · Problem 50 – 54)
  • HDLBits:在线学习 Verilog (十 · Problem 45 – 49)
  • HDLBits:在线学习 Verilog (九 · Problem 40 – 44)

关注此系列,请关注专栏FPGA的逻辑

【笨办法学物联网】之一- 物联网工程专业四年里应该学习哪些实用技能傍身?

作者:与子同袍
首发:物联网前沿技术观察

我列举一些我认为物联网工程专业毕业生应该具备的基本功。

这些内容大四出去实习前最好能都入门,同时相对比较深入掌握其中的几个:

  1. PLC。什么是PLC,PLC是干什么用的?工厂是怎么用PLC进行自动化生产的?PLC简单的编程。了解工业控制的自动控制语言。搞一个便宜点的主流的PLC如三菱西门子的点数少的PLC(也可以用台达信捷的),读这个型号PLC的编程手册,做一些简单的逻辑控制梯形图程序。50小时。有机会最好去工厂看看实际的冲床、注塑机、包装机、运动控制器是怎么工作的。
  2. 自动控制原理。现代工业自动控制基础,了解物联网首先要了解要被管理的对象,是不是啊?看现代自动控制入门书就可以了,知道有哪些执行机构和传感器。高阶点的把自动控制原理的数学理论部分学习透彻。100小时。
  3. 数字电路。coursera上看mit的电子工程系的视频课程:数字电路与模拟电路,了解底层的本质。100小时。找一本嵌入式硬件接口的书,把spi, i2c,串口,gpio啥的整明白。
  4. 数学。学Spivak的微积分、概率论与数理统计、线性代数done right、复变函数论和离散数学、数据结构和算法。算法可以直接看Robert Sedgewick的Algorithms课程视频。最好再学点矩阵论和数值分析。
  5. Python。学点Python编程语言,可以用Python标准库自带的turtle模块学习海龟路径控制。然后学了这个再找本运动控制器厂家的编程手册和编程使用案例手册看看,了解下运动控制的宏脚本语言怎么进行自动控制的,是不是和用Python控制海龟路径控制有点类似?用MicroPython板玩一下嵌入式,用刚学的Python直接控制Led灯、从I2C读取温度传感器值。50小时。有兴趣的话还可以用Arduino做点好玩的原型产品,可以先去arduino playground看看用arduino可以做出哪些好玩的项目。在用云计算学习了AWS IoT Core之后,可以找块ARM A7或A8的开发板,把AWS IoT Python SDK移植到板子上,然后写点Python代码,发布数据到AWS IoT Core,接收AWS IoT Core下发的设备影子更新文档。
  6. C语言。再找本C语言学点C语言入门。了解IoT中的IT行业用的典型语言。买一块100多块钱的单片机嵌入式开发板,理解单片机的软件层面是如何控制底层电路的硬件接口,会用C语言控制跑马灯串口读写个数据啥的。50小时。
  7. Linux。装VMWare或Virtualbox+Vagrant,学会用Ubuntu或CentOS两种Linux发行版,apt-get、rpm、yum,shell,docker,VIM,ssh,scp,FTP等。把Stallings的计算机体系结构和操作系统两本书都读读。读一本Linux系统API编程的书,写几十个简单的调用POSIX API的C程序。装Docker,自己写Dockerfile做镜像。
  8. 云计算。物联网和云计算是一对好基友。学物联网就不能不学点云计算。阿里云上用学生价格租用一台1核1G内存的服务器和1个月的256G内存的Redis和一个月的最低配置的RDS数据库,然后在上面体验云上的资源的购买管理和使用。然后实际使用下AWS的最常用的弹性云计算服务EC2,VPC网络,S3存储,EBS存储, AWS IoT Core。读一下开源的Openstack原理的书,理解IAAS平台的底层原理,它到底是怎么利用底层的计算虚拟化,存储虚拟化和网络虚拟化搭建出来的。
  9. 英语。英语远比你想象的重要。因为物联网这块还在发展中,要跟踪学习就要掌握英语这个语言工具。提高读英文资料的水平,高中里英语不好的用4年时间把英语提高到能看懂计算机、工控专业英语的水平,英语好的尽量看英文文档和书。目标是能基本看懂英文的软件的手册和硬件的DATASHEET。
  10. 互联网协议。啃Tanenbaum的经典的计算机网络,Stevens的TCP/IP Illustrated卷一。重点理解TCP/IP协议族和HTTP1.1协议。还有RESTful API。无线通讯部分理解GPRS,802.11,窄带物联网通信的基本原理。注意:一定要用Wireshark和Charles之类软件抓包边看书边实践理解。买一对Zigbee模块透传串口数据。买一个GPRS模块用AT指令控制然后发送数据到阿里云的服务器接收。如果还学有余力,研究下受限设备(RFC7228)环境下的6LoWPAN和CoAP协议。
  11. 物联网协议。熟悉Modbus协议。会用编程语言读写Modbus协议数据,会用编程语言读写简单的串口协议的设备数据。了解OPC DA和OPC UA标准,会用OPC客户端连上OPC服务器读写数据。MQTT v3.1.1协议文档和MQTT v5.0协议也要学习,抓包搞清楚不同QoS等级下客户端与mqtt broker之间的交互过程,特别是pubrec和pubcomp在什么时候才会触发。再学会Eclipse Paho这个mqtt client的开发和一种mqtt broker的使用。
  12. 安全。密码学基础学下,包括PKI公钥和对称秘钥原理。实践学习OpenSSL和OpenVPN,用Wireshark抓包看下TLS的交互过程。还有一块是涉及到工控领域的安全,ICS security。这块水比较深,需要在安全和工控两块都要深入才行,大致了解下常见攻击手段和漏洞即可。
  13. Java。云端不谈,Java在物联网边缘计算领域其实也挺重要,毕竟OSGi的G就是网关的意思。像Eurotech,Bosch,SAP等厂家的网关都是基于OSGi的。学习JVM原理、OSGi标准和一种实现比如Apache Felix。然后去学Eclipse Kura。
  14. Go。为啥要学习Go语言编程?Go语言在边缘计算和容器编排等领域都有重要应用。因此要学点Go语言语法,并且会用Go语言的一些重要的库。
  15. 数据库。学会使用和管理物联网和边缘计算相关的常用数据库,MongoDB、Postgresql、内存数据库Redis、时间序列数据库如InfluxDB/OpenTSDB等。

推荐阅读:

  • 采集PLC数据的25种姿势,你会几种?
  • 【新型冠状病毒物联网启示录】之一:智慧城市的马斯洛需求模型
  • 看清未来战争迷雾、支撑未来全域作战的JEDI作战云与战场边缘计算

更多物联网,边缘计算相关技术干货请关注我的专栏物联网前沿技术观察
申请加入物联网技术研讨大佬微信群,请加微信号:iot1999