自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 低功耗设计之RTL级降低功耗

最近在看《硬件架构的艺术》这本书,本篇博文也是来自书中的内容。随着工艺的进步,低功耗设计显得越来越重要了。作为一个数字前端设计师,我们就来看看如何在RTL级别减低功耗。实质上在大规模ASIC设计中,当RTL级设计完成的时候,整个系统至少80%的功耗就已经确定。后端流程没有办法修复微架构,而微架构和RTL代码风格对于动态和静态功耗有极大的影响。下面就说说在RTL级别可以从哪几个方面降低功耗。状态...

2019-03-26 11:08:16 2578

原创 任意分数分频器的verilog实现

这篇博文是关于分频器最后的讲解了,主要是要实现nume/deno倍的分频。对于nume/deno倍的分频,实质上就是要在nume个输入的时钟周期里,输出deno个脉冲。因此这里需要通过简单的数学运算来保证deno个脉冲的输出。nume,deno,quot和remd满足下面的式子:nume = quot*deno + remd,从这个式子中我们可以得到quot=nume/deno,即nume和den...

2019-03-25 22:48:08 3252

原创 N+0.5分频器的verilog实现

上篇文章中主要讲了一下奇数分频的实现,本篇文章说明一下N+0.5分频器如何设计。本篇文章以5.5分频为例进行说明。对于N+0.5分频,没有办法实占空比为50%,因此我们实现占空比为1/(N+0.5)的分频器,即在0.5个周期实现高电平即可。先说一种设计思路:通过两个分频时钟的与操作实现。两个分频时钟的占空比均为(N+1)/(2*N+1),对于5.5分频电路来讲,其占空比为6/11,不过这两个分...

2019-03-25 17:42:00 1588 1

原创 奇数分频器的verilog实现

分频器的设计对于微电子专业的学生来说应当是必须掌握的一基本知识点,对于偶数分频器的设计来说比较简单,那么对于奇数分频器以及小数分频器的该怎么去处理呢,本篇博文主要来谈谈奇数分频器的设计,小数分频器的设计等到下篇文再写。奇数分频器的实现可以分为两大类:占空比非50%的奇数分频器的实现 占空比为50%的奇数分频器的实现 对于占空比非50% 的奇数分频器的实现也是非常简单,对于3分频,可实现占...

2019-03-25 12:16:48 5410

原创 C++中单链表的建立

链表作为动态数据结构之一,对其掌握很有必要,链表主要作用有两个:一是用来代替数组元素个数不确定的数组,二是在数据库管理中对磁盘进行存储操作。链表分为单链表和双链表,单链表的末尾结点的指针赋值为0,而双链表的头部和末尾指针的结点均赋值为0。下面主要介绍单链表的一些操作,双链表与其操作类似。对于单链表,最基本的操作有链表的建立、链表结点插入、链表结点删除和链表结点显示。链表建立:建立链表之前有如下...

2019-02-28 11:46:31 1890

原创 C++中抽象类的简单使用

最近在自学C++,主要是学习C++中的面向对象的编程,看了一下面向对象的的三大特性:封装性、继承性和多态性。但感觉要深刻理解还是要自己练习一下。下面提供的代码实现的是利用抽象类显示图形的周长和面积,这里的图形我只列举了圆、三角形和长方形,添加其他图形只需要继续添加shape的派生类就好。这里的父类shape是一个抽象类,提供接口,其中:getdata():用于输入图形的信息,对于圆需要输入...

2019-02-27 21:57:08 1422

原创 C++中文件的简单使用

         看了一下C++中关于文件的介绍,现在主要将其整理一下,并且给出使用较为简单的函数来处理相应的文件。C++中的文件主要分为两类:文本文件和二进制文件,其主要区别就是文本文件是以ASCII码的形式存储的,因此存储的时候每一个字符都要占据一个字节,所以占用内存空间比较大,但是是可读文件;而二进制文件存储的时候是将二进制码照原样输出到磁盘文件中,因此不具有可读性,但是占用空间较小。 ...

2019-02-27 17:24:46 98

原创 ECC中计算倍点的两种方法

最近在看ECC的加密算法,该算法的安全性基于“求离散对数”的困难。下面主要介绍一下ECC在实现倍点过程中的算法,分为两部分:一是基于二进数的计算方法,二是基于NAF序列的计算方法。基于二进数的计算方法中,分为两种遍历方式,一是从左向右遍历,二是从右向左遍历,该算法类似模幂运算中对于其指数的处理方式。具体算法如下。ECC中计算倍乘的算法:现计算kP,k=(kt-1,kt-2,.....,k1,k0)...

2018-03-28 16:26:59 4262

原创 C语言中的指针学习

今天在用C语言去验证算法的时候,回头复习了一下指针的基本知识,好久没有写过C程序了,回头再看的时候发现也是学了很多东西。这些知识都很基础,下面给大家贴出来,欢迎交流。1. 指针的定义:由能够存放一个地址的一组存储单元构成。对于&用于取一个对象的地址,这里的对象指的是变量和数组元素,不能对表达式、常量以及寄存器变量进行操作。而对于一元运算符号*,为间接寻址或者说间接引用运算符,当它应用于指针...

2018-03-08 16:42:39 312

原创 蒙哥马利算法理解

最近在看模乘器的设计,谈到模乘器蒙哥马利的算法肯定是绕不开的。但是刚接触只看Peter L. Montgomery写的那篇文章的话,很有可能看起来很是费劲。我自己在看了网上的一些讲述蒙哥马利算法的资料之后总结了一下自己对蒙哥马利算法的理解,因此在此分享出来。另外,我觉得要提醒大家的是在看该算法之前可以大概地看一下“求模”相关的运算,这样理解起来就可能会更快一点。下面是我自己做的手工笔记,以图片的形...

2018-03-07 17:16:47 2311

原创 Mongoemery算法的FIPS 实现

最近在看模乘器的设计,然后了解到了FIPS这个算法,以下是做的一点笔记,等到把这个算法完全实现出来,我再来认真写这篇博文现在就先把最近做的逼近上传上来。还有,在看算法的过程中我get了一个科研技巧,那就是当你看代码完全没有头绪的时候,就把自己当成编译器,然后简单的把这个算法编译一遍,这样操作保准能看理解个大概了,再仔细推敲一下绝对就能理解算法了。总之,科研啊就是一个仔细琢磨的过程。...

2018-03-06 20:16:39 565 3

原创 python学习之文件与文件系统(一)

(一)文件操作基础1.open()函数:该函数是内建的文件打开函数。文件实际上也是python的一种数据类型。当使用python的内建函数open打开一个文件后,就返回一个文件对象。函数原型如下:open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)

2017-09-26 21:32:52 559

原创 python进阶

1、函数与命名空间:python中函数的命名空间始终是定义该函数的命名空间。因此函数中引用的全局变量始终是定义该函数模块中的全局变量。2.闭包及其应用:闭包指的是python语言中将组成函数的语句和这些语句的执行环境打包到一起所得到的对象。当使用嵌套函数时,闭包将捕获内部函数执行所需的整个环境。此外,嵌套的函数可以使用被嵌套函数中的任何变量,就像普通函数引用全局变量一样,而不需要参数引入,示例

2017-09-24 22:11:03 239

原创 python学习之迭代器、生成器和装饰器

1.迭代器表面上看是一个数据流对象或者容器,当使用其中的数据时,每次从数据流中取出一个数据,直到数据被取完,而且数据不会被重复使用。从代码的角度来看,迭代器是实现了迭代器协议方法的对象和类。迭代器协议方法主要是两个:__iter__()#该方法返回对象本身,它是for语句使用迭代器的要求__next__()#方法用于返回容器中下一个元素或者数据。当容器中的数据用尽时,应该引发StopIte

2017-09-24 17:37:38 952

原创 Python学习之复杂程序组织

python学习笔记之复杂程序组织1.关于模块导入import 模块名import 模块名 as 新名字#对导入的模块名重新命名from 模块名 import 函数名2.导入自己编写的模块1)自己编写的模块跟当前的模块在同一目录下的时候,直接导入就好。2)自己编写的模块跟当前的模块不在同一目录下的时候,需要利用sys库中的path.append函数将需要导入模块的路径添

2017-09-24 14:02:40 657

原创 matlab基础知识(一)

1.matlab中的函数定义:首先建立函数文件:file/new/fuction函数的建立方法: function[输出变量]=函数名称(输入变量) %注释 %函数体 示例如下: function[s]=eg_sum(n) s=0; for i=1:n  s=s+i; end 2.clear all; %清除工作空间close all;%清除所有

2017-09-10 23:12:08 444

原创 python学习之基础知识(三)

1,字典数据类型:像列表一样,“字典”是很多值的集合。但不像列表的下标,字典的索引可以使用许多不同的数据类型,不只是整数。字典的索引被称为“键”,键及其关联的值被称为“键-值”对。在代码中,字典的输入使拥花括号{}。示例如下:mycat={'size':'fat','color':'grey','disposition':'loud'}这句代码将一个字典赋值给mycat变量。这个字典的键值

2017-09-08 23:21:21 318

原创 python学习之基础知识(二)

1列表数据类型:“列表”是一个值,它包含多个字构成的序列。列表中的值也称为表项,表项用逗号分开,用下标可以取得列表中的单个值。列表也可以包含其他列表值。这些列表的列表中的值,可以通过多重下标来访问,eg:spam[0][4].列表类型还可以使用负数下标,-1代表的是列表中的最后一个下标,-2表示的是倒数第二个下标。列表中也可以通过切片取得子列表,eg:spam[1:4].使用len()函数可以计算

2017-09-07 22:06:55 196

原创 python学习之基础知识(一)

python的基础知识1.注释:单行注释使用#,多行注释使用'''。2.print()函数:将括号内的字符串或者整型值显示在屏幕上面,print()函数中可以通过end和sep来设置在参数末尾打印什么,以及在参数之间打印什么来隔开他们。3.input()函数:等待用户在键盘上面输入一些文本,并按下回车键。eg:myname=input().这个函数的值是一个字符串,将字符串的值赋值给变

2017-09-06 23:20:42 409

原创 集成电路中低功耗设计(二)

这篇文章主要介绍一下低功耗设计中常用的技术。由上篇文章可知,设计中的功耗可以分为下表给出了翻转功耗在一些示例电路中所占的比例。 在不同电路中,各类功耗所占的比例是不同的,因此进行低功耗设计的重点是不同的。在运算电路中,开关功耗占绝大部分,因此,此类电路的低功耗设计要致力于减小开关功耗;对于DRAM存储器,泄漏功耗占大部分,因此要将重点放在减小泄漏功耗上面。针对不同的功耗类型,具有不同的

2017-08-10 11:02:30 2785

原创 集成电路中的低功耗设计(一)

低功耗设计在现在的IC系统中非常重要,正如Intel所称:功耗问题是决定摩尔定理能否适用的唯一因素。在CMOS电路中,功耗可以分为动态功耗和静态功耗。静态功耗是电路不工作时消耗的功耗;动态功耗是当电路活动时消耗的功耗。一般而言,在0.13um以上的设计中,动态功耗占主要部分;但在纳米尺度(90nm和65nm)的设计中,泄漏电流成为影响功耗的关键因素。低功耗的设计贯穿了IC设计的整个流程。在

2017-08-10 08:59:56 8198 2

原创 数字系统设计中形式验证

下图给出等价性验证的基本概念。 等价性验证用于验证A与B是否等价,这里的B是由A转换得到的。这里的A与B可以是RTL代码,也可以是门级网表。在进行等价性验证时,A是参考,B称为实现。可以用形式验证来检查综合结果是否正确(将RTL级的设计与门级网表比较)、插扫描链前后的网表是否一致、布局前后网表是否一致、插时钟树前后的网表是否一致、布线前后的网表是否一致。如下图所示。 通常在综合后、

2017-08-09 22:54:29 5235

原创 静态时序分析概述

静态时序分析是检查IC系统时序是否满足要求的主要手段。以往时序的验证依赖于仿真,采用仿真的方法,覆盖率跟所施加的激励有关,有些时序违例会被忽略。此外,仿真方法效率非常的低,会大大延长产品的开发周期。静态时序分析工具很好地解决了这两个问题。它不需要激励向量,可以报出芯片中所有的时序违例,并且速度很快。    通过静态时序分析,可以检查设计中的关键路径分布;检查电路中的路径延时是否会导致setup

2017-08-09 12:10:39 10445

原创 集成电路中测试概述(三)

这篇文章讲一下基于JTAG的可测性设计。JTAG也称作边界扫描,最初是由欧洲的一些测试工程师提出的标准,该种测试技术指的是在芯片的边界上加上串行移位寄存器,以实现对芯片的测试,这种技术称为边界扫描。下图是边界扫描寄存器的原理,边界扫描单元组成扫描链将被测试设计包围了起来。 采用边界扫描技术进行测试的时候,需要进行如下的操作:1)将测试向量载入到边界扫描单元,此操作应该串行完成

2017-08-08 11:39:54 911

原创 集成电路中测试概述(二)

这篇文章主要讲一下基于扫描路径的可测性设计。对于一个组合逻辑的电路,电路中的故障可以通过输入端口施加向量进行激励。而对于一个复杂、端口有限的时序电路,只能采用基于扫描路径的可测性设计方法来实现对电路的可控制性和可观测性。在该方法中首先需要将非扫描单元如寄存器用扫描单元取代,如下图所示: 这种结构非常简单,但却非常巧妙。当电路中的寄存器用扫描寄存器取代以后,在扫描模式下,电路中的时序路径

2017-08-08 11:11:09 1533

原创 集成电路中的测试概述(一)

这篇文章主要讲一下芯片设计中测试环节以及相关的概念。芯片设计中的测试分为以下几类:1)验证:在芯片量产之前,验证设计是否正确和符合规范。在验证时,主要进行功能测试和电气特性测试。功能测试是测试输入激励与响应的一致性,电气测试分为直流和交流特性测试两种。而直流测试主要是对短路、开路、最大电流、漏电流、输出驱动电流和开启电平的测试。交流特性主要是对传输延时、建立和保持时间、速度、访问时间等特性的测

2017-08-08 10:16:54 7277

原创 RTL设计指南---verilog

按照本章给出的设计指南进行编码,可使HDL代码具有良好的可读性、可修改性,并且利于DFT、仿真和综合。(一)命名规则在开始进行RTL设计前, 要统一命名规则, 最好以文档的形式给出。使用一致的命名规则有利于理解。下面给出一些命名规则:1)在对模块、寄存器、wire进行命名时,要使用有意义的名称,例如,对于一个数据宽度为100位的乘法器, 可命名为mult-100x100。2) 寄存

2017-08-03 10:58:47 1733

原创 RTL设计基础(二)

这篇文章主要讲一下RTL设计中多时钟域的处理,之前在异步FIFO设计中已经讲到这个问题,这篇更全面详细的介绍一下多时钟域的处理。多时钟域之所以难以处理,是因为在两个时钟域之间传递信号时,不可避免地会出现建立时间/保持时间违例的问题。寄存器会锁存错误的数据,引起功能错误。现考虑在两个时钟域间传递1位信号的情况。如下图是多时钟域传递一位信号的示例:在这个例子中,aclk与bclk是

2017-08-03 10:21:22 1552

原创 RTL设计基础(一)

数字IC系统逻辑设计这部分主要介绍两个方面,一个是RTL的设计基础;另一方面是verilog基本语法。这一篇文章主要介绍一下RTL的设计基础。RTL设计都是采用同步电路设计方式,了解同步电路的设计要求是RTL设计的第一步。下图是一个同步电路的示例:其中,组合逻辑实现设计所需要的功能,寄存器用于暂存数据用时钟控制。只有当时钟进行有效跳变时,才将新的数据所存起来,否则数据保持原值。时钟

2017-08-03 09:27:09 13140

原创 系统设计---算法与架构

这片文章对系统设计的具体步骤及相关知识进行介绍,主要分为四部分:算法设计、IC系统架构设计、基于systemC的IC系统设计、系统设计工具SPW简介。(一)算法设计系统设计的第一步是给出清晰的系统规范,该规范写明了系统的功能、性能、费用、开发时间等。接下来创建一个系统行为模型,并且可以用来初步验证设计的性能。再下来,对行为模型进行细化,即进行算法设计。算法设计大致分为三步:1)给出浮点

2017-08-02 11:41:02 1443

原创 IC系统验证分析概述

实际上,验证属于设计的范畴,并且贯穿IC系统设计的每个阶段。在系统设计阶段:采用仿真方法进行性能分析和协议分析。在电路/逻辑设计阶段:采用软硬件协同验证:用仿真和FOGA验证功能;用静态时序分析工具进行时序验证;用形式验证检查综合过程及ECO提取是否正确。在物理设计阶段,采用物理验证LVS、DRC等;用静态时序工具验证最终的时序;用形式验证检查布局布线及ECO是否正确。常用的验证主要分为以下几

2017-08-01 22:39:54 2267

原创 IC系统设计概述

IC设计有两个发展趋势:宏观上向系统级演化,即所谓的片上系统;微观上,进入纳米尺度的设计范畴。片上系统是采用基于IP的开发方式,所面临的问题:1、如何进行设计复用;2、如何验证别人的IP;3、如何将IP集成在一起,并使其协调工作;4、如何进行系统验证;5、如何进行软硬件协同设计和验证深亚微米设计中,比较棘手的问题有:1、连线延时的估计;2、串扰的分析与处理;

2017-08-01 21:55:19 1887

原创 FPGA相关知识系统介绍

FPGA的本质是设计一颗芯片,其开发刘成是通过verilog等硬件描述语言通过EDA工具编译、综合、布局布线成为下载文件,最终加载到FPGA器件中去,完成所实现的功能。而硬件描述语言描述的就是组合逻辑和时序逻辑电路,度和逻辑就是与、非、或组成的电路,而时序电路就是触发器。在FPGA中,组合逻辑的变成了查找表的工作,于是所有的数字电路转化成为查找表和寄存器,这便是FPGA的基础,查找表负责逻辑实现,

2017-07-31 17:33:41 858

原创 SPI总线介绍和verilog实现

这篇文章讲SPI总线,SPI是serial peripheral interface 的缩写,即串行外围设备接口。该接口是摩托罗拉公司提出的全双工同步通信的接口,该接口只有四根信号线,在芯片的管脚上只占用4根线,节约了芯片的管脚。这四根信号信如下:1、MOSI:主器件数据输出,从器件数据输入。2、MISO:主器件数据输入,从器件数据输出。3、SCLK:时钟线,有主器件控制。4、

2017-07-28 17:25:17 30429 14

原创 数字电路中的亚稳态产生原因和处理方法

最近在异步FIFO设计中,遇到了对跨时钟信号的同步处理,主要是为了降低亚稳态出现的概率。因此这篇文章主要讲一下亚稳态出现原因以及处理办法。(一)亚稳态的出现原因   亚稳态主要是指触发器在某一段时间内不能达到一个确定的状态。一个触发器一旦进入亚稳态状态,则无法预测触发器的输出电平,也无法预测什么时候可以稳定在某个确定的电平上,此时触发器的输出端Q在较长时间内处于振荡状态,不等于输入端D。这

2017-07-27 22:28:50 8749

原创 I2C总线协议的verilog实现

最近一直在学习各种接口,今天要讲的是I2C 总线。I2C是是一种简单的同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传

2017-07-27 18:34:24 12406 3

原创 数字电路时序分析(二)

这篇文章接上篇文章继续讲一下时序系统中时序分析,如下图为一个时序系统的典型结构:那么该系统的最大运行频率是多少呢?计算公式如下:Fre_max=1/longest delay path因此要计算系统的最大运行频率,就需要找出系统总的最长路径。而最长路径处于下面这三条路径当中:1.Clock to Output delay: Tc2q + Tcomb_Q2Omax,其中T

2017-07-27 11:24:50 6640

原创 数字电路中的时序分析(一)

最近在设计中遇到了亚稳态情况的处理,因此又回头去看了一下数字电路中的时序分析,本篇文章主要讲的就是数字电路中的时序分析。        延时可以分成两大类:一类是门延时;另一类的是D触发器的延时。这两类延时在时序电路分析中都要涉及到。首先我们来看一下门延时。        门延时指的是构成门的晶体管在有限的时间内完成转换,也就是当门的输入变化时,输出在有限的时间里完成改变,这个改变所用的有

2017-07-27 10:26:22 7674

原创 异步fifo设计(四)

这篇文章主要是上篇文章的verilog代码实现,现在将代码贴上:module fifo #(parameter size_data=8, parameter size_addr=4)(input wr_inc,wr_clk,wr_rst, input rd_inc,rd_clk,rd_rst, input [size_data-1:0]wr_data, ou

2017-07-26 21:58:45 1365

原创 异步fifo的设计(三)

这篇文章主要讲述一下另一种异步fifo的设计方法,这种设计方法与上篇文章设计方法的区别在于不需要将读指针rd_ptr和写指针wr_ptr同步化。该论文中采取对读、写指针的异步比较并且异步判断出empty和full状态位的值。这里的读写指针还是采用格雷码计数器。由前面博客中讲到的格雷码计数器可知,有两种设计方法:一种设计只用到一组触发器,但是Grey-to-binary转换器,二进制增量器,Bi

2017-07-26 18:10:10 1539 1

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除