FPGA技术⾯试题⼀、串⾏接⼝
1、串⾏接⼝与并⾏接⼝区别
串⾏接⼝是数据线⼀根线,通过串⾏协议传输数据,⽐如uart
并⾏接⼝是⼀个数据在多根数据线并⾏传输,⽐如rgb888、rgb565等等
2、什么是总线,有什么特点
核⼼:多个设备共⽤数据线
3、 Spi有⼏种模式,分别是什么
4种,CPHA CPOL
分别是 scl默认电平低电平、⾼电平两种
sda在时钟的第⼀个时钟沿、第⼆个时钟沿数据⽣效两种
4、i2c和spi总线如何实现多机通信的,简述
I2c通过呼叫应答⽅式,i2c每帧数据都会先发设备地址指明数据发给谁的,读谁的;
Spi通过⽚选信号,spi通信前先拉低对应从机的⽚选,然后和收发数据
5、什么是同步时钟和异步时钟
同步就是有时钟信号,实现每位数据的有效位置如spi异步,没有时钟信号标定数据的位置
6、简述⼀下什么是单⼯、半双⼯、全双⼯通信,举个例
单⼯,只能发或者收数据
半双⼯,可以发也可以收,但是收发不能同时进⾏
全双⼯,可以发也可以收,收发可以同时进⾏
7、画出spi主机四种模式波形图
8、画出i2c读、写模式完整波形图
Start addr ack data ack data nack stop
Start addr ack data ack data nack stop
9、画出异步串⼝发送⼀个字节完整波形图
10、串⾏接⼝发送接收是按多少有效数据位的格式
按字节,8bit
11、收发数据的时候,LSB是什么意思
低位先发
12、简述异步串⼝uart发送电路设计思路
⼀个计数器产⽣波特率时间,⼀个计数器产⽣发送第⼏bit,使⽤移位或者case发送对应位
13、为什么异步串⼝发送协议起始位是低电平,停⽌位⽤⾼电平,能不能⽤⾼电平,为什么?
⾼电平可以被低电平拉低,发送的时候拉低对⽅设备能检测的到低电平,不能⽤⾼电平起始,⾼电平不能拉⾼低电平14、i2c总线上为什么要⽤上拉电阻
总线默认⼀般是开漏,需要上拉电阻设置默认⾼电平
15、异步串⼝如果txd和rxd短路会怎样,如何避免和排查
发送接收是同⼀数据,应⽤层协议做好收发应答
16、异步串⼝txd对gnd短路会怎样
发送数据发不出去,接收⽅⼀个字节为0x00
17、异步串⼝rxd对gnd短路会怎样?
会接收到⼀个字节0x00,收不到对⽅发送数据
18、异步串⼝txd和rxd分别与通信设备断开会出现什么现象?
Txd断开,发送数据对⽅不能收到,对⽅发数据可以收到
Rxd断开,发送数据,对⽅能收到,对⽅发数据不能收到
19、异步串⼝通信中,gnd需要接到⼀起吗,为什么?
需要,电⽓上的电平是对gnd做参考0电压
20、异步串⼝校验位的奇、偶校验的原理
奇校验:让所有这个字节的数据中出现奇数个1,⽐如,1000110(0)则必须添0,
这样原来有3个1已经是奇数了,所以添上0之后1的个数保持为奇数
偶校验:让所有这个字节的数据中出现奇数个1,⽐如,1000110(1)则必须添1,
这样原来有3个1已经是奇数了。所以添上1之后1的个数保持为偶数。
21、spi通信中,两个设备都是主机模式,会出现什么情况
两个设备只有⼀个启动的话,读写数据都是错误没有⽤的,
两个设备都启动的话,⽆法建⽴通信
22、spi通信中,如果clk与gnd短路或者断开会怎样,如何排查
从机⽆法收到数据,主机⽆法读出数据
排查:⽰波器、逻辑分析仪、quartus⾃带的signaltap任意⼀种都⾏
23、spi通信中,如果cs断开会怎样,如何排查
从机⽆法收到数据,主机⽆法读出数据
排查:万⽤表、⽰波器、逻辑分析仪、quartus⾃带的signaltap任意⼀种都⾏
24、spi通信中,如果mosi和miso短路会怎样,如何排查
收发数据相同
排查:万⽤表打短路
python怎么读取串口数据25、i2c通信中,是如何确定设备存在正常通信
主机发送设备地址的情况下,看设备是否应答,⽆应答说明设备不存在或者通信线路异常或者器件损坏
26、i2c通信中,主机发送数据从机没有应答该如何处理
设置超时时间,在时间内没有应答通信失败
27、i2c通信中,7位地址,⼀个总线理论上可以和多少个从机通信
128
28、i2c总线,sda和gnd短路会怎么样,如何排查
Read到数据都是0x00
排查:万⽤表打短路
29、i2c总线的时钟频率最⼤多少,通信时可以都⽤最⼤吗,为什么
⾼速模式3.4M,不能都⽤,i2c通信时钟频率是从机决定的,如果⼀个总线上有不同时钟频率的从设备,需要切换时钟频率通信⼆、sdram
1、sdram的作⽤是什么?
暂存数据
2、举个例fpga上⽤sdram的地⽅,为什么要⽤?
摄像头采集图像的时候,缓存⽤sdram
因为fpga内部的ram区域不⾜以存储图⽚的⼤⼩,所以需要⼀个存储区域作为缓存
三、soc
1、什么是soc黄⾦参考⼯程
黄⾦参考⼯程是⼚商出⼚⾃⼰做的⼀个参考⼯程
2、简述verilog HDL pwm代码在quartuII封装成ip,主要是哪⼏步操作
1).根据avalon总线时许,编写avalon接⼝读写pwm寄存器
2).添加到quartus在quartus II platform designer上⾯添加新的compnement修改输出接⼝
3、简述hls如何封装成ip并在soc上使⽤
通过c语⾔编写逻辑模块和测试模块,验证功能,观察波形图,查看html报告,通过hls编译器编译⽣成ip,添加到quartus上⾯,4、 avalon总线有哪些类型的接⼝
mm slave、 mm master、流接⼝
5、 soc应⽤程序访问ip流程是什么
1. 映射avalon总线的地址
2. 计算ip的地址
3. 映射接⼝地址
4. 操作
6、 soc⾃定义常⽤外设ip使⽤的是avalon那种接⼝
Avalon mm slave接⼝
7、hps⾃⼰的外设和avalon的外设区别
Hps⾃⼰的外设是固核,不⽤也不可以拿来做其他的逻辑
Avalon外设是软核,不⽤的话逻辑资源可以拿来做其他的
8、软核、硬核、固核是什么,各有什么特点
软核:综合之前的寄存器传输级(RTL) 模型,灵活性⾼、可移植性强,但预测性低有不确定风险
硬核:经过验证的设计版图,设计⼈员不能对其修改与软核实现⽅式相⽐,硬核可以把功耗降低5~10 倍, 节约将近90% 的逻辑资源
固核:带有平⾯规划信息的⽹表,通常以RTL 代码和对应具体⼯艺⽹表的混合形式提供。
固核的设计灵活性稍差,但在可靠性上有较⼤提⾼
9、soc上⾯,linux下是如何访问接⼝的
使⽤虚拟内存映射,主要是mmap函数将总线地址拿到,通过avalon桥偏移地址到avalon桥地址,通过hps0.h⽂件⾥⾯的外设偏移地址计算外设地址,通过接⼝定义的顺序和接⼝类型直接把接⼝地址计算出来,通过指针直接访问接⼝
10、platform designer上⾯⼀定要添加cpu吗
可以不⽤
四、hls
1、hls可以对算法做那些⽅⾯的优化
优化⾯积、优化执⾏时间
2、流接⼝读写操作有那些操作函数,区别是什么
read、write、try_read、try_write
3、hls⽣成ip默认会有哪些信号
start、done、busy、stall
4、数据类型可以怎么优化
使⽤ac数据类型减⼩位宽,从⽽优化⾯积,减⼩位宽相应做计算也会增快
5、简述⼀种⾯积换时间和时间换⾯积的⽅法
⾯积换时间:使⽤hls循环展开,复制循环内部的电路
时间换⾯积:将⼤部分相同电路的做成⼀个,使⽤循环,然后每次传⼊不同的参数
6、简述hls图像灰度化和⼆值化原理
灰度化:将图⽚像素点提前出来,拆分成红绿蓝三个分量,⽤Gray = R*0.299 + G*0.587 + B*0.114公式分别代⼊,R红⾊分量G绿⾊分量B蓝⾊分量,Gray对应输出灰度值,然后将Gray分别填充三个分量合成像素点,合成图⽚;
⼆值化:将图⽚像素点提前出来,拆分成红绿蓝三个分量,⽤y= gray > b? 255:0公式分别代⼊,b设定阈值,gray灰度值,y是输出,然后将y分别填充三个分量合成像素点,合成图⽚
7、简述hls图像增亮原理
将图⽚像素点提前出来,拆分成红绿蓝三个分量,⽤y=ax+b公式分别代⼊,a对应对⽐度,b对应亮度,x对应分量,y对应输出,然后合成像素点,合成图⽚
8、简单说⼀下封装全连接神经⽹络⼿写体成ip流程
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论