- 博客(40)
- 收藏
- 关注
原创 C语言的知识分类
数据类型char short int long float double void变量修饰auto const volatile static extern register signed unsigned循环跳转for while do break continue条件选择if else switch case default goto结构体struct typedef union enum其它return sizeof
2024-02-21 23:11:39
441
原创 寄存器 Flip-Flop
组合逻辑是电平输入和电平输出。(组合逻辑虽然符合人的思维习惯,并且元器件结构简单,但问题是如果输入含有毛刺,输出就有毛刺。eg. 如果输入信号突然从0变成1后又在短时间内恢复0,可以视为毛刺,输出信号受到输入信号的影响,也产生了毛刺)时序逻辑就是以时钟作为驱动源的电路。一个触发器,在时钟的驱动下,将D输入端的信号送到Q端输出。时序逻辑上的时钟,一个周期为一拍(1T)。复位信号rst_n解复位,该触发器才正常工作。触发器的Q端上一拍的D输出。如果是组合逻辑,则Q端应该在D变化的同时发生变化,但时序逻辑的特
2024-02-20 14:32:43
771
原创 面积换速度:Carry Look-ahead Adder
And from the different comparisions, we learned higher frequency requires higher gate count.
2024-02-19 13:35:33
525
原创 Synchronous and Asynchronous FIFO的一些相关问题
是同步fifo还是异步fifo?异步fifo为什么要通过打拍的方式做同步?fifo是基于credit base的,还是握手?如何cover credit耗尽的情况?什么情况下需要用到带反压的fifo?如果fifo不带反压,上游该如何控制读写节奏?fifo余量的检测机制?需不需要做余量检测?fifo内部的存储是用sram还是flip-flop构成的?各自的优缺点是什么?fifo水线怎么开启?用状态机实现fifo水线的控制逻辑?这个fifo的controller对应的interface协议是什么
2024-02-17 23:24:22
460
原创 复杂的Synchronous FIFO设计
FIFO,即First Input First Output,是一种先入先出的存储器,其功能是:用户将数据写入该器件进行存储,当用户读数据时,先写入的数据会被先读出,即读出的数据的顺序仍然是写入时的顺序。
2024-02-17 19:28:57
505
原创 同步缓冲器设计(Synchronous FIFO)
缓冲器又称为队列,是一种数据暂存的机制。缓冲器存在的必要是因为当数据传出端传出数据时,接收端不一定能实时地接收,如果接收端不能实时地接收,又无缓冲器的存在,数据将不可避免会遗失。如果输出输入端的时钟频率一致,称之为同步缓冲器,如果输出输入端的时钟频率不一致,称之为异步缓冲器。缓冲器能存储的数据个数,称之为其深度,每一个数据有多少位数,称之为其宽度。在使用缓冲器时必须了解,如果输入端不断地将数据写入,而输出端却不去将数据取走的话,就会造成Overflow。反之,若输出端不断地将数据取走,输入端却不将数据写
2024-02-17 19:25:56
732
原创 ASIC Design Flow
设计规格阶段(Design Specification)架构与设计划分阶段(Architecture & Design Partition)编程与测试环境设计阶段(RTL Coding & Test Bench)集成和仿真阶段(Integration & Simulation)综合阶段(Synthesis)布局前仿真阶段(Pre-Layout Simulation)布局与布线阶段(Auto Placement & Route, AP&R)布局后仿真/静
2024-02-13 11:34:31
647
原创 时钟信号和复位信号的来源
数字的总体复位信号来源于数字电路的电源VDD。模拟电路中有一个电压比较器,它包含一个阈值,当VDD上升到超过该阈值时,复位信号就拉高,否则就是低电平。假设VDD为1.8V,并且比较器的阈值为1.2V,当电压未升至1.2V之前时,复位信号为为0,当高于1.2V时复位信号为1。复位信号在模拟电路中常被称作POR(Power On Reset),即上电时产生的复位信号。复位信号在数字电路中常写作 rst_n, "_n"的意思是低电平有效,用低电平可以复位,取Negative一词的首字母,之所以用低电平复位,而不
2024-02-12 15:28:18
1375
原创 异步复位同步释放原则
复位信号有一个非常重要的原则,叫作异步复位同步释放原则。异步复位指一个寄存器的复位信号随时可以复位,不必考虑该寄存器的时钟信号正处在哪个相位上。同步释放是指一个寄存器的复位信号从复位态回到释放态的时机,必须与该寄存器的时钟信号保持同步关系。概括地讲,就是对复位信号什么时候复位没有要求,而对什么时候释放有严格要求。为什么复位时不需要复位信号与时钟保持同步呢?因为保持同步是为了避免亚稳态,而处于复位状态的寄存器,即使短暂地出现了亚稳态,也会马上进入复位状态。如果数字电路共享同一个复位信号,则亚稳态传播也不需
2024-02-12 14:40:49
800
原创 电路的时序
延时路径:3条通道.从输入端口到寄存器,in2reg.从寄存器到寄存器,reg2reg.从寄存器到输出端口,reg2out.路径2不仅包括从寄存器AA到寄存器BB的走线,还包括寄存器内部从clk到Q端的延时,即一个信号从被采样到被输出,中间的延迟。分析时序(Timing),就是3种路径上的延时是否满足寄存器的要求,因此分析工具会先辨认出一个设计中有哪些路径,然后将每条路径进行时序分析。路径的端点只有寄存器和端口,没有组合逻辑,因此,分析时序时,不能从组合逻辑开始,也不能以组合逻辑结束。从复
2024-02-11 20:32:01
442
原创 信号的状态类型
verilog专用常见的信号状态有4种,分别是0、1、z、x,其中,0和1是数字电路本身的状态,它的本源是零电平和VDD电平。例如,将一根导线接地,它的电平就是0,可以用数字0表示,将一根导线接VDD电平,那么它传出的信号就是1。VDD是数字电源的常用标号,整个芯片的电源常称为VCC,芯片的地常标注为VSS。不同工艺和元器件库需要的电压VDD不同,例如0.9V、1.8V、3.3V等,而同一个元器件库中的所有元器件,其需要的供电电压VDD一般相同的,只有I/O器件等少数元器件,其输入端和控制端是比较低的电压
2024-02-11 15:18:47
1281
原创 03. 驱动和负载
驱动(Driver)和负载(Load)如果将关注点聚焦到一个元器件上,则驱动就是这个元器件的输入信号,负载就是这个元器件的输出信号。如果关注点是芯片,则驱动就是这颗芯片的输入信号,负载就是这个元器件的输出信号。在verdi中,选中一个信号后,点击左上角的driver图标,则会找到此信号的驱动信号也即其作为负载时;点击load图标,则会找到此信号的负载信号也即其作为驱动时。在电路中所讨论的驱动和负载,往往其关注的是整个设计或者设计中的一块局部电路。通常可以将一个信号接入多少个门电路作为衡量驱动和负载大小
2024-01-26 15:57:41
866
原创 02. 电平信号和脉冲信号的转换
一个电平信号若想变成脉冲信号,有3种转换方式,一个电平a_latch可以经过处理,获得它的上升沿脉冲(抓取上升沿),下降沿脉冲(抓取下降沿),或同时得到其上升,下降的双沿脉冲(抓取双边沿)。电路设计是一个因果系统,即诱发因素先发生,相应结果后出现。有时,设计需要在电平上升沿或下降沿之前就起脉冲,那就不能用电平转脉冲的方法,而是需要去寻找什么因素引起电平的上升和下降,即去找更早的诱发因素。电平信号表示一种状态,只要这种状态存在,波形就持续为1,状态消失,波形就变为0,而脉冲表示一种命令,或触发信号。
2024-01-26 13:40:01
1885
原创 lint error in casez (use spyglass)
使用spyglass是check lint时,check出一个error。spyglass里的error源代码这里,其实4’b0?0?和4’b?0?0已经包含了4’b0000的情况,所以三个分支存在冲突,还是需要全部列出来。之后将源代码修改如下,就没有w398此errors啦。
2024-01-15 23:39:19
444
原创 00. perl正则匹配的元字符
perl有12个特殊字符,在模式中不代表其自身,而是另有特殊含义,常被称为元字符(meta character):星号 *加号 +问号?大扩号?{}圆括号 ( )方括号 [ ]KaTeX parse error: Expected group after '^' at position 1: ^̲KaTeX parse error: Expected group after '^' at position 1: ^̲竖线 |反斜杠 \句点.尖角。
2024-01-10 11:11:48
412
原创 01. for中循环变量i以及数组的range访问
如果i没有初始化的话,dc是报错i必须要初始化,而终点就不需要将终点设置为变量值时就没有问题啦。
2024-01-06 16:04:18
397
原创 testbenh里读取bmp文件和其他文件的方法
1. 将整体文件以Byte为单位读入到二维数组里integer SampleImg_prt;integer iCode_sample;reg [7:0] Sample_DATA [0:10_000_000];读入bmp文件并将数据copy到二维数组里。通过Byte单位来拼接出Bmp文件头。2. 通过fopen(),fread(),fseek(),ftell()来读取信息头。
2024-01-04 17:29:21
442
原创 testbench里二维数组copy时的问题
在进行如下大小的二维数组copy时vcs仿真时会非常慢,在关闭$fsdbDumpMDA也是一样的,仿真速度会非常慢,然后将二维数组copy关闭后,就仿真非常快。当fopen(),读取一个文件后。并用fread(),将文件的Byte值1B的copy到二维数组时,仿真速度不会受到影响,应该 vcs仿真时针对fread()做了优化,或者值copy时,其实fread把文件的Byte值的指针地址复制而已。
2024-01-04 16:48:10
392
原创 04. Getopt::Long::GetOptions
具体而言,Getopt::Long::GetOptions 模块的作用是解析命令行参数,使得你的 Perl 脚本能够识别和处理用户在命令行中提供的选项和参数。=s,代表获得options是个字符串,同时也要写入到字符串变量中,$input_file代表是引用$input_file,即传递指针。Getopt::Long::GetOptions 是 Perl 编程语言中的一个模块,用于处理命令行参数。通过使用这个模块,你可以轻松地从命令行中获取和解析用户提供的选项和参数。
2024-01-04 11:36:40
558
原创 02. Algorithm:Loops qw(Filter)
Algorithm::Loops 模块提供了一些用于数组和列表处理的有趣而强大的工具。Filter 函数特别用于根据指定的条件过滤数组的元素。下面代码的例子分别表示 s/a/X/G,a替换成X;将数组中的大于10的值提取出来。Filter 函数接受一个子例程(匿名子程序或代码块),该子例程定义了过滤的条件。
2024-01-02 20:36:06
367
原创 perl与vim正则匹配的区别
用上图所示的指令,在.vimrc中,加入ab指令,可以在文件中输入 ab可以直接出来一个 always寄存器块。verilog中,如果需要对很多个寄存器打一拍,那么一个一个打就会很麻烦,或者在top顶层连线。可以结合vim的快捷指令以及正则匹配就会让速度很快。在vim用以上正则匹配指令可以直接顶层连线替换。
2023-12-26 20:40:04
368
原创 pipeline流水线
pipelien流水线clk级流水线function/block级流水线(ping-pong/fifo)pipeline bubblepipeline hazard
2023-12-20 21:05:14
435
原创 三. 利用perl对SoC中的IP进程lint check: Process lint_check_run lint_report_check子程序
【代码】三. 利用perl对SoC中的IP进程lint check: Process lint_check_run lint_report_check子程序。
2023-12-12 10:46:11
381
原创 二. 利用perl对SoC各个ip进行lint check:top_core_build和get_ipname子程序设计
然后根据文件句柄进行while循环,一行一行处理出来对应的IP_NAME和IP_VERISON。然后同时把IP_NAME和IP_VERSION写入hash%IPS_LIST中。其思路是先进入到top_core_dir目录下,然后编译,生成vfiles文件。top_core_build子进程(subroutine)其思路是首先读取vfiles到文件句柄中。get_ipname子程序。然后再切换回到ip目录下。
2023-12-11 11:21:21
422
原创 一. 使用perl对Soc中的digital ip进行lint check
因为对于此perl脚本运行时,给出的options至少有 customized vfiles mode 和 toplevelbuild mode 以及 restart mode(因为通常编译一个top core需要较久的时间,如果之前check时编译过top core,那么此模式直接去对应目录读取vfiles即可)以及help模式。首先是top core build模式,对于此模式需要先进到top core目录下,编译rtl,生成vfile,因此需要一个top_core_build函数来做相应的处理。
2023-12-10 21:45:07
467
原创 【AXI Stream协议的Master和Slave设计】
由于复位结束后,AXIS_Master里的状态机自动会跳转到发送状态,所以在testbenh里只需要给时钟和复位信号即可。然后在传输完成后进行memory check。TX_FIFO和RX_FIFO中的数据比对成功。TX_FIFO总共有8个数据要发送。
2023-10-15 16:05:50
1833
3
原创 Chapter11 设计运算模块
Chapter11 Arithmetic Circuits11.3 Adders加法是最常用的运算操作,它也常常是限制速度的原件。因此仔细优化加法器及其重要。优化可以在逻辑层或电路层上进行。逻辑层上的优化意在重新安排布尔方程以得到一个速度较快或面积较小的电路。(eg. carry lookahead adder)电路层优化则着眼于改变晶体管的尺寸以及电路的拓扑连接来优化速度。11.3.1 the definition of addersAdder module and Truth
2021-08-18 23:18:09
323
原创 Logic Effort
Logic Effort1. Propagation DelayInverter Dalaytp=ln2 ReqCint(1+CL/Cint) = tp0(1+f/γ)t_p = ln2\ R_{eq}C_{int}(1+ C_L / C_{int}) \ = \ t_{p0}(1 + f/\gamma)tp=ln2 ReqCint(1+CL/Cint) = tp0(1+f/γ)f=CL/Cginf = C_L / C_{
2021-08-18 17:09:24
1241
原创 异步FIFO
异步FIFO(Asynchronous First In First Out)1. 前言 由于EDA工具的广泛支持,采用同步电路设计的方法是目前Soc设计的基本要求,但在一个功能复杂的Soc系统中,难免会有异步信号与同步电路交互的问题。特别是在由许多核组成的Soc中,通常采用全局异步局部同步(GALS)的设计。而跨时钟域传输数据时很容易造成亚稳态的现象,本文主要讲解Asyn_FIFO来解决跨时钟域传输多bit信号的问题。2. Asyn_FIFO的结构与原理Asyn_FIFO: 写数据wdata在写
2021-08-17 21:48:50
372
原创 Chapter6 CMOS组合逻辑门设计
Chapter 6 CMOS组合逻辑门设计深入讨论CMOS逻辑系列——静态和动态、传输晶体管、无比和有比逻辑优化逻辑门的面积、速度、能量或稳定性低功耗高性能的电路设计技术6.1 引言门电路从高层次上分为组合逻辑电路(非再生电路)和时序电路(再生电路):Combinational logic circuits:假设有足够的时间使逻辑门稳定下来,在任何时刻电路输出与其当前输入信号间的关系服从某个布尔表达式,而不存在任何从输出返回至输入的连接。Sequential logic circuit
2021-08-16 01:20:02
7602
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人