自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数字IC基础:数字集成电路书籍推荐

书籍推荐

2024-03-01 14:50:15 1023 41

原创 Verilog基础:表达式位宽的确定(位宽拓展)

我们可以首先找到被加入上下文环境的操作数,a和b作为+操作符的操作数,是上下文决定的,(a+b)作为整体位与移位操作符的左边也是上下文决定的,(a+b)>>1作为整体是=操作符的右操作数,也是上下文决定的,因此answer(因为=),a,b(因为三层上下文嵌套)都被加入上下文环境中,这三个变量的位宽都是一样的,所以他们三个在运算前不会有拓展。因此首先执行a+b,根据规则,结果为16位,进位被丢失,然后再右移一位,最高位补0,最后赋值给同为16位的answer。很多时候方法很简单。改成a+b+17'b0;

2023-01-27 22:03:25 8605 75

原创 Pytorch基础:torch.load_state_dict()方法在加载时不会检查类型

笔者在使用torch.nn.module的load_state_dict中出现了一个问题,一个被注册的张量在加载后居然没有变化,一开始以为是加载出现了问题,但发现其他参数加载成功,思索后发现是注册的张量的类型是整型而checkpoint中保存为浮点数类型,恰好注册时的默认值给的是0,而checkpoint中的浮点数又在0到1之间,因此出现了这个令人困惑的bug。

2024-04-27 20:58:20 368 2

原创 Python:可迭代对象与迭代器

根据Python官方文档,可迭代对象(iterable)是“一种能够逐个返回其成员项的对象”。具体来说,这种对象要么定义了一个返回迭代器(iterator)的魔术方法__iter__(),要么定义了魔术方法__getitem__(),并使用从0开始的整数索引。

2024-04-18 14:42:13 1558 20

原创 Pytorch基础:张量相关的乘法(torch.mul、torch.mv、torch.matmul、torch.mm、torch.bmm、torch.dot、torch.tensordot、*、@)

Pytorch中含有很多种张量乘法,本文旨在帮助理解它们的不同。下面将分小节进行详细阐述,包括torch.mul、torch.matmul、torch.mm、torch.bmm、torch.dot、torch.tensordot、*、@。

2024-04-16 00:30:39 725 13

原创 Pytorch基础:标量(零阶张量)

在PyTorch中,标量(Scalar)是一种只包含单个数值的零阶张量,它是只有一个元素的张量(注意:只有一个元素的张量并不一定是张量)。标量在深度学习中非常常见,通常用来表示损失函数的值、模型参数的值或其他单一数值。

2024-04-14 21:29:30 289 6

原创 Linux:查询类型的命令type

type命令是Linux中一个查询类型的命令,它可以查询name是alias别名、keyword关键字、function函数名、builtin内建命令名(这很有用)或是file文件名(这个文件需要是可执行状态)。

2024-04-01 17:47:17 1087 15

原创 Verilog基础:在testbench中使用阻塞赋值和非阻塞赋值的区别

本文详细阐述了在一个testbench中,应该如何使用阻塞赋值与非阻塞赋值。首先说结论,建议在testbench中,对时钟信号(包括分频时钟)使用阻塞赋值,对其他同步信号使用非阻塞赋值。

2024-03-26 19:18:30 1367 14

原创 Linux:执行命令的命令eval与Bash解析命令的方式

eval命令用于接收参数,并将这些参数作为一行命令执行,这也许会使人困惑,为什么我不能直接执行命令而需要使用eval命令间接执行呢?本文将解开这些疑惑。

2024-03-22 17:20:10 1065 8

原创 Linux:点命令source

source命令用于读取一个文件的内容并在当前Shell环境(包括交互式Shell或是非交互式Shell)执行里面的命令。它被称为点命令是因为命令名source也可以替换为一个点“.”。

2024-03-20 23:49:33 1175 11

原创 Verilog基础:always结构和initial结构

always和initial是Verilog中的核心,它们被称为结构(construct),用于组织语句的执行方式。下面将分别对这两者进行阐述。

2024-03-20 11:12:39 896 7

原创 Linux:设置别名命令alias

在Linux中alias命令用于为一串字符(常代表命令)设置一个别名,该别名在Bash读取并解析一行命令时会被展开。

2024-03-14 16:14:57 887 22

原创 Linux:导出环境变量命令export

Linux中的内建命令export命令用于创建一个环境变量,或将一个普通变量导出为环境变量,并且在这个过程中,可以给该环境变量赋值。

2024-03-13 21:47:37 1052 13

原创 Tcl语言:基础入门(三)

大括号{}可以使得被其包围的所有内容被解释为字面量,所以不会进行命令替换,转义符替换(大部分情况的转义)、变量替换等一系列替换;大括号中的空格不会被解析成参数分隔符,大括号中的换行符也不表示执行命令,只是一个普通的换行符。

2024-03-13 12:52:24 284 12

原创 静态时序分析:SDC约束命令set_output_delay详解

静态时序分析本章将讨论使用set_output_delay命令对输出端口(或时序路径终点引脚)的约束。首先需要说明的是,在进行静态时序分析时,任何一条时序路径都需要有约束,约束指的是时序路径的起点(发射触发器)和终点(捕获触发器)都有时钟信号的控制(对于典型时序路径而言)。但是对于起点是输入端口(或时序路径起点引脚)、终点是输出端口(或时序路径终点引脚)的时序路径而言,没有显然的发射触发器、捕获触发器,因此需要使用set_output_delay命令进行约束。

2024-03-12 15:45:23 1567 12

原创 静态时序分析:SDC约束命令set_multicycle_path详解

静态时序分析本章将继续上章的步伐,讨论第二个点到点时序时序例外命令set_multicycle_path,它能改变默认的单周期时序路径分析模式,这会影响时序路径的建立/保持时间的检查方式。

2024-03-10 01:09:36 1370 15

原创 Pytorch基础:Tensor的flatten方法

在Pytorch中,flatten是Tensor的一个重要方法,同时它也是一个torch模块中的一个函数,它们的语法如下所示。

2024-03-08 20:42:45 705 16

原创 静态时序分析:典型与非典型时序路径的约束详解(一)

时序路径是静态时序分析中的一个重要概念,了解时序路径能帮助设计者更好地编写SDC脚本,本文旨在详细介绍时序路径相关内容。 首先给出时序路径的定义:时序路径是由时序弧构成的数据路径,静态时序分析会分别对每条有约束的时序路径进行时序检查(例如建立时间检查、保持时间检查、移除时间检查、恢复时间检查等)。 时序路径可以是典型的,也可以是非典型的;时序路径可以是有约束的,也可以是未约束的。

2024-03-07 19:26:01 1778 11

原创 静态时序分析:SDC约束命令set_fasle_path详解

在之前的文章中,我们讨论了如何使用set_case_analysis命令和set_disable_timing命令,它们都能使时序弧失效,本章我们将学习一个虽然不使时序弧失效,但会影响时序路径的时序检查的命令——set_fasle_path,就像前文中直接指定触发器data_out_reg的时钟引脚CK到数据引脚D的时序弧失效一样。

2024-03-06 00:31:45 1303 10

原创 静态时序分析:SDC约束命令set_disable_timing详解

上一章中,我们学习了如何使用set_case_analysis模式分析命令,它通过指定某个端口或引脚为固定值,从而使设计中的一些时序弧失效。本章将学习set_disable_timing命令,它可以用于直接指定失效时序弧,这会导致时序路径的中断,常常用于减少DC分析的复杂度。

2024-03-05 20:25:40 1432 15

原创 C&Python:比较运算符串联的差异

在C语言和Python中,比较运算符是一个常用的运算符,但这两种语言在某些情况下对比较运算符的解析缺存在差异,本文旨在明确这一点。

2024-03-04 15:33:07 1417 17

原创 Python:getattr()函数

getattr()是一个python内置的函数,用于获得一个对象的某个属性,一般情况下,可以通过点运算符(.)完成相同的功能,但是getattr()拥有一个点运算符无法实现的功能,就是允许你使用变量来表示属性名,从而可以在运行时动态地选择要获取的属性。这对于编写通用的代码或者处理动态数据结构很有用。

2024-03-03 13:30:59 413 13

原创 静态时序分析:SDC约束命令set_case_analysis详解

set_case_analysis命令用于对电路进行特定模式的设定,例如对于一个工作在正常模式下的芯片,其扫描触发器的测试引脚应该设定为0;对于一个时钟选择器的选择引脚,在特定模式工作时应该为确定值。这个命令很有用,因为它可以帮助减少很多不必要的时序路径分析。

2024-03-02 15:43:39 1764 14

原创 CUDA C:查看GPU设备信息

了解自己设备的性能是很有必要的,为此CUDA 运行时(runtime)API给用户也提供了一些查询设备信息的函数,下面的函数用于查看GPU设备的一切信息。

2024-02-29 20:55:05 984 11

原创 CUDA C:核函数、主机函数、设备函数

主机函数(Host Function)指的是在主机(CPU)调用,在主机(CPU)上执行的函数,可以使用__host__限定符修饰,一个普通的C函数其实就是一个主机函数。核函数(Kernel Function)指的是在主机(CPU)调用(某些情况下也可以在设备调用),在设备(GPU)上执行的函数,使用__global__限定符修饰。设备函数(Device Function)指的是在设备(GPU)调用,在设备(GPU)上指定的函数,使用__device__限定符修饰。也可以在设备调用,设备执行。

2024-02-26 00:46:18 578 12

原创 静态时序分析:SDC约束命令set_load详解

set_load命令用于指定端口(port)或线网(net)的负载电容,该指令的BNF范式(有关BNF范式,可以参考以往文章)为:

2024-02-25 16:11:34 1795 18

原创 静态时序分析:SDC约束命令set_input_transition详解

DC工具在使用set_drive和set_driving_cell建模输入端口驱动能力时,会自动计算输入端口的转换时间,以及由于电阻或驱动单元带来的额外输入端口延迟。

2024-02-24 15:55:58 1240 19

原创 静态时序分析:SDC约束命令set_driving_cell详解

在上一章中,我们不建议使用set_drive命令而是使用set_driving_cell命令,这是一个描述输入端口驱动能力更精确的方法。因为大多数情况下,只有库单元的设计者熟悉单元门内部的输出电阻情况,因此直接指定驱动单元而不是指定驱动电阻更容易。

2024-02-23 23:00:14 1606 15

原创 静态时序分析:SDC约束命令set_drive详解

本章将讨论使用set_drive命令,它用于对输入端口的驱动能力建模。首先需要说明的是,默认情况下,DC在STA时默认输入端口的转换时间是0,这对于大多数情况来说过于理想。set_drive命令设置了驱动端口的上拉/下拉电阻,因此电阻值越大,意味着驱动能力越弱;电阻值越小,意味着驱动能力越强。

2024-02-22 00:09:43 1544 17

原创 静态时序分析:保持时间分析

在静态时序分析中,保持时间检查约束了触发器时钟引脚(时钟路径)和输入数据引脚(数据路径)之间的时序关系,以满足触发器的保持时间要求。简单来说就是,保持时间要求数据在时钟的有效沿到达之后依然稳定一段时间,这是为了数据被有效(锁存)捕获。

2024-02-21 20:40:38 720 5

原创 静态时序分析:SDC约束命令set_input_delay详解

静态时序分析本章将讨论使用set_input_delay命令对输入端口的约束。首先需要说明的是,在进行静态时序分析时,任何一条时序路径都需要有约束,约束指的是时序路径的起点(发射触发器)和终点(捕获触发器)都有时钟信号的控制。但是对于起点是输入端口、终点是输出端口的时序路径而言,没有显然的发射触发器、捕获触发器,因此需要使用set_input_delay命令进行约束。

2024-02-20 22:02:40 1758 17

原创 静态时序分析:SDC约束命令set_clock_latency详解

静态时序分析时钟的延迟可以使用set_clock_latency命令设置,这里的时钟延迟包括源延迟(source latency),即时钟对象到时钟源对象(时钟定义点)的延迟,又叫插入延迟(insertion delay);以及网络延迟(network latency),即时钟源到各触发器时钟引脚的延迟。正如上一篇文章中说的一样。

2024-02-18 22:46:26 1350 14

原创 静态时序分析:SDC约束命令set_clock_transition详解

​在静态时序分析:SDC约束命令create_clock详解一文的最后,我们谈到了针对理想(ideal)时钟,可以使用set_clock_transition命令直接指定理想时钟到达各触发器时钟引脚的转换时间(这是一种估计),而不是在时钟端口使用set_input_transition命令(即使使用了,对理想时钟也是无效的),因为时钟树尚未创建,时钟端口的高扇出会导致,任何在时钟路径上的转换时间和延迟的计算都是毫无意义的。

2024-02-16 15:23:45 1889 20

原创 静态时序分析:SDC约束命令set_clock_uncertainty详解

set_clock_uncertainty是用来指定设计中时钟周期的不确定性,不确定性指的是对那些会对时钟周期造成的负面影响。这些不确定性可能来源于时钟抖动(clock jitter)或时钟偏差(clock skew)等一切想要在时序分析中考虑的悲观因素。

2024-02-14 16:14:53 1552 20

原创 C&Python:表达式的求值顺序(evaluation order)

C语言针对表达式的计算,设置了操作符的优先级和结合性这两个特性,优先级用于解析不同优先级的符号,结合性用于解析相同优先级的符号。但是这两个特性并不能完全确定表达式的计算顺序,这就给编译器留下了一定的优化的空间,下面举例说明这一点。假设有如下所示的简单表达式。

2024-02-13 16:53:27 1517 10

原创 静态时序分析:建立时间分析

在静态时序分析中,建立时间检查约束了触发器时钟引脚(时钟路径)和输入数据引脚(数据路径)之间的时序关系,以满足触发器的建立时间要求。简单来说就是,建立时间要求数据在时钟的有效沿到达之前提前到达且稳定一段时间,这是为了数据被有效(锁存)捕获。

2024-02-11 21:56:09 1570 19

原创 静态时序分析:工艺库的特征化条件和工作条件

一个工艺库(technology library) 会指定该库的特征化条件(characterization condition)和工作条件(operating condition)。一般在工艺库的开头会看见以下信息。

2024-02-09 23:37:18 850 16

原创 静态时序分析:静态时序分析的原理及其两种模式PBA、GBA

静态时序分析有两种模式:PBA(Path Based Analysis)和GBA(Graph Based Analysis),PBA是基于路径的分析模式而GBA则是基于图的分析模式。在Design Compiler中,时序分析是使用GBA模式;而在PrimeTime中,既可以使用默认的GBA模式也可以使用PBA模式进行时序分析。下面将详细讨论这两种模式的区别与联系。

2024-02-08 18:13:26 1317 13

原创 C语言:当函数定义时遗漏函数返回值类型以及函数遗漏return语句

这种写法已经被普遍认为是不专业的,在C99标准中,规定main函数的返回值必须显式说明为int。而在C90标准中,可以如果不显式说明函数返回值,int类型为默认返回值类型,这是因为当时的函数大多数返回int类型。对于main函数来说,C99规定如果遗漏return语句,在执行到main函数的右括号}时,会自动返回0值,而对于其他函数则没有此要求。C99规定不允许在返回值类型不是void的函数中使用没有表达式的return语句(如果遗漏return,也能返回)。

2024-02-01 18:57:40 781 18

原创 静态时序分析:时序弧以及其时序敏感(单调性)

在静态时序分析中,不管是组合逻辑单元(如与门、或门、与非门等)还是时序逻辑(D触发器等)在时序建模时都拥有多条时序弧(Timing Arc)。时序弧是用来描述信号(翻转)传播路径一种抽象。举例来说,对于组合逻辑单元,每个输入引脚(Pin)到输出引脚都有相应的时序弧;对于时序逻辑单元,有从时钟引脚到输出引脚的时序弧,也有从时钟引脚到数据引脚的建立、保持时间约束时序弧。每个时序弧都有时序敏感(Timing Sense),它描述了信号(翻转)在沿着时序弧传播过程中的翻转特性,即对应不同的输入翻转,输出是如何翻转的

2024-02-01 14:43:58 1173 10

Verilog实现的RISC存储程序CPU

来自于《Verilog HDL高级数字设计》,电路包含三个功能单元:处理器(数据通路)、控制器和存储器。程序指令及数据放在存储器中。程序执行时同步地进行指令的读取、译码和执行:(1)对ALU中的数据进行操作;(2)修改寄存器的内容;(3)修改程序计数器(PC);指令寄存器(IR)和地址寄存器(ADD_R)的内容;(4)修改存储单元的内容;(5)获取存储器中的数据和指令;(6)控制系统总线上的数据传送。其中,指令寄存器IR用于存放当前正在执行的指令,程序计数器PC用于存放下一条将要执行指令的存储地址,而地址寄存器ADD_R则用于保存下一个将要读/写的存储单元地址。

2023-03-12

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

TA关注的人

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