自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 华为海思数字芯片设计笔试第八套

B. 时钟顿率(假设这里指的是时钟分布和管理,即“时钟管理”):ASIC设计中时钟树的设计对于确保整个芯片中时钟的一致性和性能至关重要。FPGA中虽然有固定的时钟资源和分布网络,但设计者仍需注意时钟域之间的交互和潜在的时钟偏差。在处理异步信号时,确实需要考虑发送和接收时钟之间的频率关系,因为这影响到信号同步策略的选择和可能出现的亚稳态问题。D. 使用内部产生的时钟:使用内部产生的时钟(例如,通过PLL或振荡器)可能会对DFT产生不利影响,因为这些时钟源可能在测试配置下不易控制,尤其是在没有外部测试设备时。

2024-04-17 10:08:20 1883

原创 华为海思数字芯片设计笔试第七套

声明下面的题目作答都是自己认为正确的答案,并非官方答案,如果有不同的意见,可以评论区交流。这些题目也是笔者从各个地方收集的,感觉有些题目答案并不正确,所以在个别题目会给出自己的见解,欢迎大家讨论。因为这里我只会设计的题目,所以验证的题目我就没放上去了题目1.关于亚稳态的描述错误的是()A.多用几级寄存器打拍可以消除亚稳态。B.亚稳态是极不稳定的,理论上来讲处在亚稳态的时间可以无限长。C.亚稳态稳定到 0 或者 1,是随机的,与输入没有必然的关系。D.如果数据传输中不满足触发器的建文时间 T

2024-04-16 23:11:06 1648

原创 华为海思数字芯片设计笔试第六套

在one-hot编码的状态机中,每个状态由一个独立的触发器(比如一个D触发器)表示,且在任何时刻只有一个触发器的输出为高电平(表示当前状态),而其他所有触发器的输出都为低电平。initial主要用于仿真的初始化和一次性操作,而always用于描述持续的或重复的行为,包括组合逻辑和时序逻辑。20.一个 D 触发器, 其数据 Tsu=2ns,Tcq=3ns,Thd=1ns,则此触发器的最高工作频率为: (注:Tsu 数据相对时钟的建立时间,Thd 数据相对时钟的保持时间,Tcq 输出相对时钟的延迟)

2024-04-16 22:49:28 1410 1

原创 华为海思数字芯片设计笔试第五套

虽然温度的变化也会影响电子器件的特性,例如电容的变化,从而间接影响翻转功耗,但相比静态功耗,温度对翻转功耗的影响通常较小。题属于边沿敏感路径,(out+in)表示的是从in到out的数据路径是同向的,(8,10)表示的是在clk上升沿,clk到out的路径上升延迟为8,下降延迟为10.参考菜鸟教程中的verilog教程。即定义了占空比为40%,周期为20ns的时钟。2.为了降低功耗,在某个状态下,对不关心的存器的输出值(即对系统运行没有影响的寄存器),优化的低功耗设计方法是将其固定为0或者1()

2024-04-12 11:04:12 1673

原创 华为海思数字芯片设计笔试第四套

9 进制,那么 16 就是 10 + 6,这里的 10 表示 9,因此 16 就是 'd15,同理,27 就是 'd25,二者之和十进制是 'd40,转换成九进制就是 44。A.用待分频时钟上升沿采样计数,产生占空比1/3的分频时钟A;B.用待分频时钟上升沿采样计数,产生占空比1/3的分频时钟A;用待分频时钟下降沿采样计数,产生1个占空比1/3的分频时钟;C.用待分频时钟上升沿采样计数,产生占空比1/3的分频时钟A;D.用待分频时钟上升沿采样计数,产生占空比1/3的分频时钟A;

2024-04-11 09:48:13 2377

原创 华为海思数字芯片设计笔试第三套

这种方法使用范围有限,考虑的情况比较多,在不同输入的时候,冗余项会不一样,所以如果考虑所有情况,会花费比较多的资源,如果设计的好,适用范围可以适当增加,所以B选项正确;在FSM设计中,为了提高设计的安全性,避免所设计的FSM进入死循环,一般要求加上default关键字来描述FSM所需状态的补集状态下的操作,default是个可选的关键字,用以指明当所列的所有case项不完全时的操作,如果case项表达完全,那可以不用,所以不是必须的,D错误。单bit数据可以用打两拍来进行同步,多bit的数据不能,D错误。

2024-04-10 10:10:56 2208

原创 华为海思数字芯片设计笔试第二套

这种方法使用范围有限,考虑的情况比较多,在不同输入的时候,冗余项会不一样,所以如果考虑所有情况,会花费比较多的资源,如果设计的好,适用范围可以适当增加。虽然在设计跨时钟域接口时,应尽量避免在信号路径上使用组合逻辑,因为组合逻辑可能会加剧亚稳态问题的严重程度,但问题的核心不在于是否使用组合逻辑,而在于如何合理设计信号的同步机制和确保时序的正确性。组合逻辑可以使用,但需要谨慎处理,并确保信号在进入另一个时钟域前已经稳定。解析: C 是⼀个争议点,语法上当然是能⽤的,但可能会导致设计的困难,所以可以认为不能⽤。

2024-04-09 10:15:56 2030 4

原创 华为海思数字芯片设计笔试第一套

峰值功耗指的是最大功耗,可以想象,当各个模块都在工作时并且正好翻转到NMOS和PMOS都处于开启状态时(也就是短路状态下),芯片的功耗是最大的,而由HVT(高阈值电压)的器件组成的电路的短路电流是小于由LVT(低阈值电压)的器件组成的电路的短路电流的,所以大幅度提高HVT的比例,可以降低峰值时的电流,所以可以降低峰值功耗。例如,D触发器是一种最简单的触发器,在触发边沿到来时,将输入端的值存入其中,并且这个值与当前存储的值无关,D触发器并没有翻转的功能,D选项错误。最终结果q3等于in的值,为0。

2024-04-08 11:11:35 2891 2

原创 2.数据在fpga中的存储

2023-04-14 17:45:13 345

原创 1.原码反码补码

2023-04-14 17:36:59 184

原创 0.项目框架

2023-04-14 17:32:37 139

原创 1.sdram介绍

SDRAM 英文全称“Synchronous Dynamic Random Access Memory”,译为“同步动态随机存取内存”或“同步动态随机存储器”,是动态随机存储器(Dynamic Random Access Memory,简称 DRAM)家族的一份子。

2023-04-03 23:29:50 5141

原创 3.sfp+接口协议

输入信号:在拉高时SFP+模块输出不工作,图中经过一个MOS管连接到SFP0_TX_DISABLE,进一步连接到了芯片管脚。SFP+的输出信号,为高时表示tx通路检测到错误,是一个开漏输出,通过4.7k电阻上拉 到vcc_host。除了测试信号外,传输速率选择在板上操作、SFP0_TX_DISABLE需要在FPGA代码内拉高。在KCU105开发板上通过板上跳帽选择,4.25GBd以下选择低速,以上选择高速。TX/RX速率选择,給RS0和RS1不同的值,就能决定不同的TX/RX频率。1.sfp+的接口信号。

2023-04-03 23:16:45 6011

原创 2.aurora 8b10b ip核说明

因为图中很多信号都是用的总线接口,这里我们从核里的顶层文件来看每个信号的使用。

2023-04-03 23:14:46 1861

原创 1.ultraScale GTH核使用说明

gtwiz_reset_clk_freerun_in: 复位控制器辅助块的运行时钟,要启用此模块,必须提供此时钟(注意改时钟频率要和我们在ip核的Physical Resources 配置的一致)且不能以用户时钟为源。gtwiz_reset_all_in:复位TX和RX的PLL和Datapath(Datapath=PMA+PCS)。gtwiz_reset_tx_pll_and_datapath_in:复位TX的PLL和Datapath.

2023-04-03 23:09:28 3119

原创 6.IIC驱动模块的读时序图

rd_en:高电平 表示开始一次读,当rd_en为高时延迟一段时间i2c_start会拉高,当我们读的字节数满足要求时,同时i2c_end信号为低,wr_en拉低,其实这个信号现在不用多考虑,在i2c_wr_data模块我们会仔细讲解。re_data_reg[7:0]:因为sda时串行发送一个byte数据,所以我们需要把串行数据转为并行数据。rd_data[7:0]:当我们成功接受一个byte数据时候,发送该数据。和写时序差不多,多了几个信号,这里讲解一下。

2023-04-03 23:01:53 219

原创 13.整体工程

注意:在小梅哥的板子上,scl和sda并没有接上拉电阻,这里需要我们自己去在软件中去配置,进行一个上拉。

2023-03-20 20:02:29 104

原创 11.顶层代码

注意:小梅哥fpga把hc595串行转并行芯片的使能管脚oe已经在硬件上拉高了,所以在seg_595_dynamic模块的列化中我们不需要引出oe管脚。

2023-03-20 20:01:38 101

原创 12.整个工程进行仿真

在对顶层模块进行仿真的时候,我们需要列化一个eeprom的仿真模型,给我们发送响应信号。这个模型在网上可以下载但是注意这个eeprom的仿真模型有一个bug,就是我们在仿真代码中列化该模块,设置该eeprom仿真模块A0,A1,A2的地址的时候必须配置为000,否则会有问题。所以在仿真的时候我们顶层模块代码,配置IIC设备地址的时候,最后三位地址也要是000。

2023-03-20 20:01:15 187

原创 8.IIC收发模块框图

整体思路就是:外部写有效信号r_read_valid传入之后,我们的rd_en信号拉高,然后等待5000个时钟周期之后,把i2c_start拉高,然后等待数据发送结束信号i2c_end,当接到i2c_end信号后,把读取设备的存粗地址byte_addr[15:0]改变,这里我们都加1即可,r_rd_i2c_data_num表示接受到数据的个数,当接到i2c_end信号后,加1。当w_data_num的值为3的时候,表示我们所有的数据已经全部写入到fifo中,此时我们把r_fifo_rd_vlid信号拉高。

2023-03-20 19:58:10 262

原创 10.整体模块框架

我们需要两个按键去控制从eeprom写入和读取数据,并且每隔0.5s把从eeprom读出的数据用数码管动态显示。IIC驱动模块和IIC读写模块上文都已经介绍过了,按键模块和数码管动态显示模块都比较简单,这里不再阐述。所以我们需要两个按键模块,一个数码管动态显示模块,一个IIC驱动模块,和一个IIC读写模块。

2023-03-20 19:57:42 87

原创 9.IIC收发模块rtl代码

这里简易的画一下IIC收发模块的结构。

2023-03-20 19:56:55 222

原创 7.IIC驱动模块的代码

这里讲一下r_ack的赋值,野火的代码逻辑是一到ACK_1,ACK_2,ACK_3,ACK_4,ACK_5,就采样信号的输入,然后保持不变。但是我们在时序逻辑中r_ack的赋值时ACK_1,ACK_2,ACK_3,ACK_4,ACK_5状态下信号稳定的时候再去采样,感觉会更好一点,同时能产生锁存器的问题。如果用野火的代码,它用的是组合逻辑赋值的方式,但是在组合逻辑中如果把自己的值赋值给自己会产生锁存器,这是我们不想要的,在编译的时候会报警告。

2023-03-20 19:55:28 353

原创 5.IIC驱动模块的读时序

(9) 数据接收完成后,主机产生应答信号回传给从机,从机接收到应答信号开始下一字节数据的传输,若数据接收完成,执行下一操作步骤;(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。(4) 待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后,若为 2字节地址,跳转到步骤(6);(6) 地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始信号;(8) 主机接收到从机回传的应答信号后,开始接收从机传回的第一个单字节数据;

2023-03-20 19:51:22 404

原创 4.写时序的时序图

通过看 AT24C64的芯片手册,知道 AT24C64的最大时钟scl为400K,这里我们不妨用250K。

2023-03-17 22:20:54 268

原创 3.IIC的写时序

对传入从机的控制命令最低位读写控制位写入不同数据值,主机可实现对从机的读/写操作,读写控制位为 0 时,表示主机要对从机进行数据写入操作;读写控制位为 1 时,表示主机要对从机进行数据读出操作。对于 I2C 协议的读/写操作,我们将其分为读操作和写操作两部分进行讲解。首先讲解 I2C 写操作,由于一次写入数据量的不同,I2C 的写操作可分为单字节写操作和页写操作,详细讲解如下。

2023-03-17 22:19:28 1065

原创 1.IIC理论学习

(2) 图中标注②表示“起始信号”,在 I2C 总线处于“空闲状态”时,SCL 依旧保持高电平时, SDA 出现由高电平转为低电平的下降沿,产生一个起始信号,此时与总线相连的所有 I2C 设备在检测到起始信号后,均跳出空闲状态,等待控制字节的输入。由图可知,I2C 协议整体时序图分为 4 个部分,图中标注的①②③④表示 I2C 协议的 4个状态,分别为“总线空闲状态”、“起始信号”、“数据读/写状态”和“停止信号”,针对这 4 个状态,我们来做一下详细介绍。数据线即用来表示数据,时钟线用于数据收发同步。

2023-03-17 22:16:08 163

原创 2.EEPROM介绍

AT24C64 EEPROM 存储芯片的器件地址包括厂商设置的高 4 位 1010 和用户需自主设置的低 3 位 A0、A1、A2。在硬件设计时,通过将芯片的 A0、A1、A2 这 3 个引脚分别连接到 VCC 或 GND 来实现器件地址低 3位的设置,若 3 个引脚均连接到 VCC,则设置后的器件地址为 1010_111;而 AT24C64 的存储空间为64 Kbit(8Kbyte),需要 13 位存储地址才可满足所有存储单元的寻址,存储地址为 2 字节。

2023-03-17 22:15:52 3854

原创 Mpu9250对于读到初始数据的处理

Mpu9250对于读到初始数据的处理1去零飘1.什么是去零飘?就是在我们上电读mpu9250的数据时他的初始值并不为0,这个时候需要我们把这个零飘数据取出来,再用读到的数据减去这个零飘数据,就是真实的数据2.怎么去零飘?就是校准加速度,角速度,在四轴上电之后,静止几秒,这个时候程序就是在算这个零飘数据,并储存起来3.代码实现/********************...

2020-04-20 20:16:00 5145 3

原创 MPU9250对初始数据的读取

MPU9250对初始数据的读取1.mpu9250介绍MPU 9250是一款9轴运动跟踪装置, 他在小小的3X3X 1mm的封装中融合了 3轴加速度、3轴陀螺仪、3轴磁力计以及数字运动处理器(DMP) 并且兼容MPU 6515。其完美的I2C方案,可直接输出9轴的全部数据。因此它也是四轴姿态解算的基础, 所以正确获取MPU 9250 的原始数据显得尤为重要。注意:1.但...

2020-04-20 20:13:07 6223 1

原创 IIC的一些心得

IIC这里不是讲IIC的原理,原理啥的很多地方都有就是我看到原子哥的代码是针对24C02的IIC写的,其实IIC规定的协议都是通一的,可以相互移植,但是原子哥的代码什么函数名都是对24c02不好移植,所以就打算自己写一个方便移植IIC代码,用原子哥F4探索者开发板,代码的注释我已经标的尽可能详细了,所以就不在这里重复。可以和正点原子的代码进行对比,实际上是一样...

2020-04-17 16:37:00 433

IIC通信代方便移植.rar

用STM32F4写的IIC通讯,方便移植,只需改几个宏定义,我是用原子F4探索者板自带的AT24C02验证可行

2020-04-17

空空如也

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

TA关注的人

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