自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 sky18流水线设计

数据吞吐率Throughput = Freq_max *Toggle_rate;//Toggle_rate:如两个时钟,输入变一次,就是50%;每个时钟周期都变,就是100%。在组合逻辑中插入寄存器,减小组合逻辑delay,可以提高电路频率。时钟周期要大于等于组合逻辑的delay(最大的那条delay)1.最大时钟频率确定。

2024-06-30 22:41:55 242

原创 Verdi操作

6.将两个信号组合在一起:在波形上将两个信号选中,右击,Bus Operation -Creat Bus,定义新的Bus name.2.保存信号,file -> save signal,存为.rc文件;4.waveform里的信号切换进制:Waveform ->Set Radix。5.根据edge找信号:可以选择任意变化、上升沿、下降沿,也可以通过信号值查找。3.标记波形,鼠标左键点一下,在需要标记处,鼠标中键再点一下。8.选中信号,按h显示绝对路径,再按h复原。

2024-06-06 15:07:21 226

原创 sky 14.01仿真环境笔记

/系统函数获取仿真时间。//100ps精确到0.1ns。//100ps精确到0.1ns。//10ps精确到0.01ns。DUT输出给pattern的信号也在tb的顶层故意加一个#0.1。4.timescale 定义延时的时间单位/时间精度。使用random 测试:测试信号/时序间的随机情况。//delay 1.3ns,作四舍五入。能够产生足够多的测试向量,把功能覆盖全面;

2024-05-10 10:33:51 203

转载 TFT材料a-Si,IGZO以及LTPS的区别

它利用在Si上进行微电子精细加工的技术,移植到在大面积玻璃上进行tft阵列的加工,再将该阵列基板与另一片带彩色滤色膜的基板,利用已成熟的lcd技术,形成一个液晶盒相结合,再经过后工序如偏光片贴覆等过程,最后形成液晶显示器。早期的TFT-LCD都是用a-Si作为基底材料,a-Si为非晶硅技术,是目前应用最广的一种,技术简单、成本低廉,但开关所占的像素本身的面积很大导致亮度无法做得很高(也就是开口率低),另外PPI(Pixels Per Inch)也只能做到较低的一个水平。

2024-04-28 17:26:21 310

原创 sky13笔记

FPGA工具自动推断这是个ram,但是asic就不行,它必须要用memory compile生成,因为不知道工艺库(28nm or 40nm, tsmc台积电 or smic中芯国际)硬件行为本身是并行的,而CPU是串行行为,为了用串行行为去仿真并行行为,规定了阻塞/非阻塞赋值。generate是物理上的展开,在compile时完成展开。5.为什么要定义阻塞赋值,非阻塞赋值?定义成reg的时序逻辑,用<=赋值。定义成reg的组合逻辑,用=赋值;4.参数化SP-SRAM模型。1.generate用法。

2024-04-23 10:49:36 277

原创 sky12笔记

1.敏感列表变量不全,会导致RTL sim和Gate sim结果不一致,也就是仿真和综合结果不一致,仿真时c的变化不触发out1,但是在综合电路里触发。4.在always block 开始赋default值,这样即使if-else /case不全,也不会综合成latch。5.组合逻辑回圈(combination logic loop)可能导致rtl sim 挂死,仿真时间不往前推进。2.if-else 或 case条件没有列全,导致综合出latch。readmemh把文件读进来。

2024-04-18 10:47:08 178

原创 sky08、09笔记常用组合逻辑电路

3.为了减小delay,设计了carry select adder,delay由两个4bit adder减少为一个4bit adder 和一个MUX,但是面积增加了50%先把每bit对应相加,再把{c[4:1],1’b0}与{1’b0,s[4:1]}做加法。(同[3:0],这里1为最低bit)4.进一步优化,设计了8bit adder (carry look ahead)超前进位加法器,从算法上改进。生成信号Gi = Ai *Bi;以4bit为例,delay缩小为三级门延迟。也可以综合成类似的结构。

2024-04-15 10:29:47 312

原创 sky07笔记

7.目前计算机系统的地址编码按byte统一编码,32位CPU能访问的地址范围2^32,即4GB(1GB=1024MB=1024。中断模式:设备通过中断线(信号),向CPU表示自己有异常状况需要处理;CPU响应中断,调用对应的中断服务程序,处理设备异常。stack通常在系统memory里,如DDR,chip SRAM,不在CPU内部的寄存器里。OS会划分时间片,在每个时间片服务一个进程,进程状态:创建、阻塞、就绪、执行、终止。查询模式:CPU发起,自主访问设备地址空间,获取设备的当前情况;

2024-04-11 11:08:24 151

原创 sky06笔记下

也可以s_idle,s_1,s_10,s_101,s_1011五种状态来写,但是state和nstate就需要3bit位宽来储存,会消耗更多的资源。电路由一堆时序逻辑和组合逻辑组成,如果时序逻辑全都复位到固定值,组合逻辑的输入也是固定值,那么组合逻辑的输出也是固定值。6.用FSM实现“1011”序列检测,每周期输入1bit,检测到1011后,在下一周期输出一个周期的高电平。实际工程设计中,主要关心逻辑功能,不太关心类型。7.较长的序列检测,比如0110101,且中间有重叠部分。

2024-04-04 22:14:37 416

原创 verdi出现的问题

modelsim中加-voptargs=+acc, VCS中加 -debug_access+all \。可能是信号在rtl compile时被优化了,加上+access+rw \ 如上第一幅图。解决方法:在run脚本中加上以下设置。

2024-04-02 11:11:06 266

原创 sky 06笔记中

2.tri0,定义三态,如果这根线没有驱动,看作加了下拉电阻的线,tri1上拉电阻。通常用于模块间的连接,连接设计和仿真环境,一般可综合代码不用。//定义无符号变量,最高位符号位,补码表示。//16’h6162,把a,b的ascii码赋给c0。11.算术运算符: + , -, * , < , > , = , / , %注:a[0 +: 8] //从0bit 开始取8bit,等价于a[7 : 0]7.按bit位逻辑操作运算符:&, |, ~, ^ (与,或,非,异或), ==(相等),!

2024-04-01 14:50:23 365

原创 sky 06笔记上

其中1‘bx未知电平是不允许的,1‘bz是无驱动的未知电平,仅在pad处(IO端口)允许,比如open-drain电路,enable无效的情况下,不对外驱动,即不对外输出电流,此时在板子上,可以通过上拉/下拉电阻固定电平。比如assign语句的右边就是它的触发条件,Verilog为了匹配数字电路的行为,定义这种事件触发的语法。3.在数字电路系统中,通常使用补码表示数值,在数学上方便加减法运算的数字电路实现。补码(8bit): 1000,0000,为反码加一,注意补码的最高位不表示正负。

2024-03-29 10:06:00 224

原创 sky 05.01笔记

在实际情况中,输入信号不为无穷大的斜率导致开关过程中,即0、1切换的瞬间,VDD与GND之间短时间出现一条电流通路,此时两个管子同时导通,即短路功耗。7.nMOS/pMOS管面积越大,MOS管流过的电流越大,速度也更快,驱动能力更强。因为寄存器本身要能正常工作的话,就需要setup time和hold time,D->Q延时已经model在setup time 里面了。8.simulation tool 看波形时,CK端与D端对齐,它是理想的情况,不需要setup,hold time,与实际电路不一样。

2024-03-25 17:31:37 324

原创 sky 04.01笔记

电路输入到输出有delay,不是理想的开关,是因为电路里有RC,有寄生电容。PMOS,NMOS导通时,可以抽象成电阻,整个电路看成对RC网络的充放电,是需要时间的。用示波器看信号时,它不是真正的方波,而是类似有变化的正弦波,有上升时间和下降时间,因此定义了delay和transition time。

2024-03-20 17:44:26 131

原创 任意深度异步FIFO

经常在一些资料上看到FIFO的深度应该设置为2的幂次方,否则的话格雷码不连续,多bit数据跨时钟域传输会出现多位跳转的问题,而两级同步器只能解决单bit理论上,FIFO的深度可以是任何值,但要保证格雷码转换的时候...

2021-09-29 14:08:40 2238

转载 静态时序分析基础(一)

看到一篇讲的特别清晰的文章转载此处

2021-09-25 02:17:11 146

原创 基于uart传输数据包协议的数据回环与控制ram读写(四、数据链路层传输协议)

(一)、(二)实现了数据的物理传输,但不能保证数据传输的正确性,参考pcie数据链路层的功能:创建或解析数据链路层包、检错纠错。我们在数据链路层规定发送数据流需满足的协议。一、需求分析1、PC与FPGA之间通过UART以数据包的形式进行数据的交互,数据流由包头、长度、数据位以及CRC校验数据组成。并要求PC在发送数据包的最后要加上CRC校验数据,同时FPGA在接收到数据包的同时也进行CRC的计算,最后通过对CRC的数据进行对比判断出接收的数据包是否是正确的。PC是通过串口调试助手ecom发送数据,可以实

2021-08-25 17:03:18 599

原创 基于uart传输数据包协议的数据回环与控制ram读写(三、CRC电路实现)

一、推导过程以

2021-08-16 17:39:14 563

翻译 NVM Express Revision 1.3学习笔记(三、控制器寄存器)

3.控制器寄存器控制器寄存器位于MLBAR/MUBAR寄存器(PCI BAR0和BAR1)中,这些寄存器映射到支持顺序访问和可变访问宽度的存储空间。对于许多计算机体系结构,将内存空间指定为不可缓存会产生这种行为。主机不得发出锁定访问。主机应以寄存器的原生宽度或对齐的32位访问方式访问寄存器。违反这些主机要求都会导致未定义的行为。不支持以两个或更多寄存器的任何部分为目标的访问。所有保留寄存器和寄存器中的所有保留位都是只读的,读取时返回0h。软件不依赖于返回的0h。3.1寄存器定义下表描述了控制器的寄存器

2021-08-08 20:39:46 2803

翻译 NVM Express Revision 1.3学习笔记(二、控制器初始化与关机处理)

注意:本文翻译仅为学习交流用,版权归原文作者所有。原文出处。7.6控制器初始化和关机处理本节介绍初始化控制器的推荐步骤以及在断电状态之前关闭处理。7.6.1初始化主机应依次执行以下操作,初始化控制器,开始执行命令:1.根据系统配置设置第2节中描述的PCI和PCI Express寄存器,包括电源管理特性配置。在I/O队列的数量确定之前,应该使用single interrupt(例如pin-based, single-MSI, or single MSI-X)。2. 主机通过等待控制器的CSTS.R

2021-08-05 17:44:20 1216

原创 基于uart传输数据包协议的数据回环与控制ram读写(二、修改后的发送接收模块)

根据pcie协议,数据链路层的功能为创建或解析DLLP包(数据链路层包)以及检验纠错,总而言之就是要确保数据传输的质量。我们对物理层做一些修改,在(一)中,数据的采集发生在BPS_CNT/2处,对系统时钟计数BPS_CNT次,即接受1bit数据,理论上在计数的中心时刻采样到的数据是最稳定的,但实际情况是数据可能在任意时刻发生跳变,仅仅进行一次采样是不可靠的。方法有很多种,其中之一可以将BPS_CNT九等分,进行九次采样,如下所示:parameter CLK_FREQ = 50000000;

2021-08-03 10:36:11 301

原创 基于uart传输数据包协议的数据回环与控制ram读写(一、发送接收数据通路)

前言:首先,了解一下什么是串口通信(来自正点原子资料)。(一)、并行通信VS串行通信(二)、同步通信VS异步通信(三)、传输方向(四)、UART串口简介UART是一种采用异步串行通信方式的通用异步收发传输器(universal asynchronous receiver-transmitter),它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。UART串口通信需要两根信号线来实现,一根用于串口发送,另外一根负责串口接收。UART在发送或接收

2021-07-29 14:02:18 1273

原创 单端口异步fifo例子

写一个数据需要10ns,写完16个数据需要160ns。读一个数据需要20ns,160ns内能读走8个数据。因此最小深度为8,。又因为采用格雷码和两级同步寄存器去降低亚稳态概率,导致空满标志位的判断至少延迟2个cycle,因此最小深度比8大。modelsim仿真:只写,只读。2.写慢读快,即写一个读一个。

2021-07-25 20:09:00 515 1

原创 乐鑫科技2022提前批-数字IC类6.29

1/10[单选|3分]十六进制数0x12345678为big-endian格式,对应的little-endian格式是:0x876543210x785634120x56781234其他都不正确2/10[单选|3分]X,Y是两个无符号定点小数,X的位宽 6bit,最低4bits是小数部分,最高2bits是整数部分;Y的位宽8bit,最低4bits是小数部分,最高4bits 是整数部分;现在需要计算X乘以Y的结果Z,即Z=X*Y,为了保证Z的结果不溢出,Z的整数部分和小数部分至少需要多少个bit?

2021-07-01 19:01:52 1837

原创 一个简单的同步fifo例子

同步fifo,8*16,地址位扩展判断空满module sync_fifo_addr(clk, //时钟rst_n, //复位wr_en, //写使能rd_en, //读使能data_in, //写数据empty, //空标志full, //满标志data_out //读数据);parameter RAM_WIDTH = 8; //RAM的宽度,即存储数据的位宽8bitsparameter RAM

2021-05-14 15:06:11 685 1

原创 CRC校验码举例

CRC校验码手算举例一、首先复习一下异或运算(XOR),相同得0,相异得1.二、多项式算数 使用多项式算数是为了是为了在进行二进制计算时无需考虑进位问题。 CRC中用到的除数正是由多项式的各项系数组成。 比如+++1,CRC除数为10111。三、计算步骤1.展开多项式,得到CRC除数。 2.数据串:在原始数据末端加“0”,0的数量等于多项式的阶数(最高次)。如上例,阶数为4,加4个0。 3.将数据串第一个1与除数左对齐,按位进行异或操作,未处理的...

2021-04-09 18:30:33 2218 1

原创 仿真过程中采样和数据驱动的竞争问题

设计和仿真过程中都会存在时序竞争问题。 大家在跑仿真的过程中,将波形展开时,时钟的上升沿和数据变化的沿,看起来是一样齐的,好像没有延时。而真实电路中,时钟上升沿和驱动信号二者从物理电气特性上来说,延时是必然存在的。 那么为什么rtl仿真上没有表现呢? 因为rtl级仿真不知道具体的物理上的delay是多少,这些延迟只有在门级仿真时才会体现出来,在rtl级是不清楚的,因此默认情况下,rtl级仿真,时钟对于组合电路的驱动会添加一个无限最小时间(delta—cycle)的延迟,该延迟无法用绝...

2021-04-02 17:18:45 1772 3

原创 verilog中的除法运算/

当除数不为整数时,看其运算结果。1.testbench2.仿真结果可见,7/2=3.5,实际输出为整数3.

2021-03-30 16:03:39 18156

原创 子类句柄赋值给父类句柄,为什么是安全的?

假设有父类句柄a,子类句柄b。首先,进行a=b操作后,a和b都指向子类对象。若没有进行赋值操作,a指向父类对象。故当拿到一个父类句柄时,并不知道其当前指向的是父类对象还是子类对象。因此对编译器来讲,只允许父类句柄访问父类成员(即父类句柄只能访问子类对象里的父类成员),这样的内存访问方式是安全的。从图中看,子类句柄赋值给父类句柄,相当于将访问范围从大三角区域限制为小三角区域。访问范围缩小,这是安全的。其次,将父类句柄赋值给子类句柄,编译会直接报错。相当于将小三角区域扩大为大三角区域,这会造成内存泄露,.

2020-08-15 16:11:13 1571

空空如也

空空如也

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

TA关注的人

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