笔试题-2023-大疆-FPGA【附答案及解析】
一、单选题 5分
1、关于Verilog中的function语句,以下说法错误的是:( )
A.函数的定义只能位于module中,不能位于过程块中
B.函数的定义中不能出现过程块语句
C.函数内部可以调用函数,也可以调用task
D.函数的调用可以位于过程块中,也可以位于assign语句中
答案:C
2、针对跨时钟域处理,以下说法正确的是:( )
A.异步信号经过跨时钟域处理后,相关的路径可以设置为false path或者max delay
B.单bit单周期脉冲信号展宽成2个周期后,即可采用打两拍的方式同步到另一个200M异步时钟域
C.单bit异步信号使用打两拍方式同步时,两级同步寄存器直接允许出现组合逻辑
D.单bit信号要送到多个采用相同异步时钟的模块中使用时,可以在各模块内部分别作同步处理
答案:A
解析*:
A.异步信号经过跨时钟域处理后,相关的路径可以设置为false path或者max delay是正确的说法。
B.单bit单周期脉冲信号展宽成2个周期后,即可采用打两拍的方式同步到另一个200M异步时钟域是错误的说法。因为脉冲信号展宽后产生的持续信号,其有效宽度与目标时钟域的时钟周期有关,需要进行时序约束以确保可靠地同步。
C.单bit异步信号使用打两拍方式同步时,两级同步寄存器直接允许出现组合逻辑是错误的说法。两级同步寄存器之间需要插入组合逻辑以实现时序转换和消除冒险。
D.单bit信号要送到多个采用相同异步时钟的模块中使用时,可以在各模块内部分别作同步处理是错误的说法。由于异步时钟域的不确定性,同一信号在不同时刻可能出现不同的采样时刻,因此需要在异步时钟域的边沿处对信号进行同步,并在异步时钟域输出同步后的信号,在同步时就要采用同一时钟的同步策略,以防止同步的不一致性。
3、以下关于软件中的堆栈的说法,错误的是:( )
A.堆中的数据可以多线程/进程共享
B.堆一般由程序员手动分配及释放
C.局部变量会存放在堆中
D.栈通常由系统自动分配和释放
答案:C
解析*:
C.局部变量会存放在堆中是错误的说法。局部变量是存放在栈中的,随着函数调用结束而自动释放。而堆是存储动态分配的内存块的区域,由程序员手动分配和释放,并且堆中的数据可以被多个线程/进程共享。因此,A、B、D是正确的说法。
4、十进制数1.625的二进制表示是多少( )
A.1.1011
B.1.011
C.1.11
D.1.101
答案:D
解析*:
将1.625转换成二进制的过程可以采用乘2取整法,即将小数部分乘以2,取出整数部分,依次迭代直到小数部分为0或达到所需精度为止。具体求解如下:
1.625 × 2 = 3.25,整数部分为1,小数部分为0.25
0.25 × 2 = 0.5,整数部分为0,小数部分为0.5
0.5 × 2 = 1,整数部分为1,小数部分为0
因此,1.625的二进制表示为1.101。因此正确答案为D。
5、关于GPIO说法不正确的是:( )
A.GPIO只具有0和1态
B.GPIO的引脚一般可以复用
C.GPIO引|脚作为输出时有锁存功能
D.GPIO引|脚作为输入时有缓冲功能
答案:C
解析*:
C.GPIO引脚作为输出时有锁存功能是不正确的。
GPIO的引脚既可以作为输入,又可以作为输出。作为输出时,可以设置为高电平或低电平,具有驱动能力;作为输入时,可以读入高电平或低电平,具有输入缓冲区。GPIO引脚只有0和1两态,即低电平和高电平。GPIO的引脚一般可以复用,即在不同的功能模式下使用同一个引脚。因为嵌入式系统中GPIO资源相对较少,如何合理地利用GPIO资源成为嵌入式系统中的一个重要课题。所以,A、B、D都是正确的答案。
6、两个8bit有符号位相乘,其结果最少需要的位宽是多少?( )
A.16
B.15
C.17
D.14
答案:A
解析*:
两个8bit有符号位相乘的结果最多需要16位,但是需要注意到乘积的最高位(符号位)的计算。使用符号扩展将两个8位有符号数扩展为两个16位有符号数,并将它们相乘,产生一个32位的结果。因此,最少需要的位宽是16位,答案选项A。
7、reset后,将数值按照32bit的数据从msb到lsb依次输入给din,经过32个时钟后,最终dout输出为2’ b10的数为( )
A.963964
B.166666665
C.6
D.302
答案:D
解析*:
根据题目给出的代码和所描述的操作,我们可以得出以下推导过程:
给定的模块中含有一个输入信号 din,它包含 32 位数据;
输入信号 din 中的数据按照 MSB (Most Significant Bit) 到 LSB (Least Significant Bit) 的顺序依次输入到模块中;
模块中有一个 2 位输出信号 dout;
模块每接收一个时钟信号时,会进行一次计算;
如果 rst (Reset) 信号为高,那么 dout 的值为未定义,即无法得知具体数值;
否则,将上一个时钟周期 dout 中的值与当前输入信号 din 中相应位的数据相加,并将结果交给 3 位中间变量 tmp 处理;
tmp 中最低的一位(即 LSB)不做处理;
如果 tmp 中最高的一位为 1,那么应减去 3 再将结果交给 dout 作为输出;
否则,直接将 tmp 的值作为 dout 的输出。
根据以上计算规则,我们可以对输入信号 din 的具体数值进行计算,并得到最终的输出:
将 32 位二进制数 1000000000110110111101110111100 按照 MSB 到 LSB 的顺序依次输入;
经过 32 个时钟周期后,最终的输出结果为二进制数 10。
因此,本题的答案为 D. 302。
8、下面哪个不是CPU流水线操作:( )
A.编译
B.译码
C.取指
D.访存
答案:A
解析*:
A. 编译不是 CPU 流水线操作。
CPU 流水线操作是指将处理器的指令执行过程划分成若干个阶段,不同阶段的处理过程并行执行,从而提高指令执行效率的技术。一般来说,CPU 流水线操作可以划分为以下几个阶段:
取指(Instruction Fetch,IF):从指令缓存中读取该指令;
译码(Instruction Decode,ID):将该指令解码,并检查是否需要读取操作数;
执行(Execute,EX):根据解码后的指令和操作数执行对应的操作;
存储访问(Memory Access,MEM):将指令执行的结果存储到内存中,或从内存中读取数据;
写回(Write Back,WB):将指令执行的结果写回到寄存器中。
因此,选项 A 不属于 CPU 流水线操作,是编写应用程序时需要进行的操作之一,答案为 A。
9、以下verilog模块m1执行结束后,变量data的结果为:( )
A.8'd255
B.8'd0
C.8'd254
D.8'd2E8d1
答案:D
解析*:
根据题目中给出的模块代码,我们可以得到以下推导过程:
模块中定义了一个 1 个比特的时钟信号 clk 和一个 8 个比特的寄存器 data;
初始时 data 的值为 -1(即 8 个 1), clk 的值为 0;
使用forever #4 clk = !clk; 来不断翻转 clk 信号;
在初始块中,使用 repeat 循环,每次等待下一个时钟上升沿,并根据 data 的值进行加一或加 255 的操作,重复执行 3 次,并在循环结束后立即停止仿真;
在模块执行结束后,会输出变量 data 的值。
根据以上推导过程,我们可以执行如下的仿真:
初始化 data 的值为 -1, clk 的值为 0;
在第一个时钟周期上升沿时,在 data 的当前值 11111111 上加 1,得到 00000000,赋给 data;
在第二个时钟周期上升沿时,在 data 的当前值 00000000 上加 1,得到 00000001,赋给 data;
在第三个时钟周期上升沿时,在 data 的当前值 00000001 上加 1,得到 00000010,赋给 data;
仿真结束,输出变量 data 的值。
因此,最终的输出结果为 D. 8'd2。
10、书写状态机时,状态机的状态推荐使用哪一种编码( )
A.格雷码
B.独热码
C.补码
D.二进制码
答案:
解析*:
11、在64位cpu.上选择缺省对齐的情况下,sizeof(A)的值为( )
A.9
B.13
C.16
D.32
答案:A
解析*:
根据结构体成员在内存中的对齐方式和填充规则,我们可以先分析出该结构体各个成员的偏移量,如下表所示:
成员 | 偏移量 |
|-----|------|
a | 0 |
b | 3 |
C | 4 |
d | 5 |
index | 9 |
因为 a 占用 19 位,在 64 位系统中会占用 3 个字节的空间。b 占用 11 位,在同一字节中已经可以存放下,因此不需要额外的空间。C 占用 4 位,在同一字节中剩余的 4 位已经可以存放下,因此不需要额外的空间。由于 d 占用 29 位,在 64 位系统中会占用 4 个字节和 1 个字节的空间,分别被分配给低 3 个位和高 29 个位。index 为字符类型,需要一个字节的空间。
因此,结构体 A 的总大小为 9 个字节,即 sizeof(A) 的值为 9。因此,答案为 A。
12、下列不是C语言关键字的是:( )
A.sizeof
B.volatile
C.free
D.goto
E.default
答案:A
解析*:
A. sizeof 不是 C 语言关键字。在 C 语言中,sizeof 是一个操作符,用于返回一个变量或类型所占用的内存字节数。
B. volatile 是 C 语言的关键字,用于指定变量在程序执行期间可能被意外更改,并告诉编译器不要对这样的变量进行优化。
C. free 是 C 语言的关键字之一,用于释放由 malloc 、calloc 和 realloc 函数分配的动态内存。
D. goto 是 C 语言的关键字之一,用于使程序跳转到代码中的另一行,一般使用时应慎重考虑代码结构和可读性。
E. default 是 C 语言的关键字之一,一般用于 switch 语句中,表示所有 case 都不匹配时应执行的语句块。
因此,选项 A 不是 C 语言的关键字。
二、多选题 5分
1、以下哪些手段/技术能够提高AXI总线带宽效率?( )
A.调整Burst Length
B.优化总线仲裁算法
C.乱序传输
D.Outstanding操作
答案:A B C D
解析*:
A、B、C、D 都能够提高 AXI 总线带宽效率。
解析:
AXI(Advanced eXtensible Interface)是 ARM 公司推出的一种高性能、低延迟、面向 AMBA(Advanced Microcontroller Bus Architecture)系统的总线接口标准。在 AXI 总线上,通过以下方式可以提高带宽效率:
A. 调整 Burst Length
Burst Length 是指在进行 AXI 传输时在一个传输周期中传输的数据总量,可以通过调整它的大小来提高带宽效率。如果 Burst Length 太小,则会浪费总线带宽,如果 Burst Length 太大,则可能会导致总线拥塞。因此,需要根据具体的应用场景来选择合适的 Burst Length 大小。
B. 优化总线仲裁算法
总线仲裁算法是指在多个 AXI 设备同时请求访问总线时,如何进行优先级决策,并给出访问总线的许可。优化总线仲裁算法可以避免因访问冲突而浪费总线带宽,从而提高带宽效率。常用的优化算法包括分级仲裁(Priority-based arbitration)和时分复用(Time-Division Multiplexing,TDM)等。
C. 乱序传输
AXI 支持乱序传输,即在一个传输周期内同时传输多个数据,这样可以有效地利用总线带宽,提高带宽效率。但需要注意的是,乱序传输会增加实现的复杂性和软件驱动的难度,并且可能会导致总线带宽的不确定性。
D. Outstanding 操作
Outstanding 操作是指在一个传输周期内同时对多个操作进行响应,从而提高带宽效率。AXI 允许同时具有多个 outstand 请求,但是应该适当地限制 outstanding 的数量,避免因同时进行太多的操作而导致总线拥堵。
因此,选项 A、B、C、D 都是能够提高 AXI 总线带宽效率的手段/技术。
2、下面消除竞争和冒险的办法正确的是:( )
A.加滤波电路来消除
B.加选通信号来消除
C.增减几余项来消除
D.用格雷码代替二进制码来消除
答案:B
解析*:
选项 B 是正确的:加选通信号来消除冲突和竞争。
解析:
在数字电路中,例如在 CPU 的控制逻辑或者在振荡器电路中等,当信号在传输中和其他信号发生冲突或竞争时,会产生传输错误、数据误差等问题。为了避免这些问题,常用的方法有:
A. 加滤波电路
滤波电路可以过滤掉信号中的毛刺、干扰等噪声,使信号更稳定。但对于冲突和竞争这种信号传输错误,滤波电路并不能真正解决问题。
B. 加选通信号
在信号传输过程中,可以加入选通信号(例如时钟),来控制不同信号的传输时间和优先级,从而避免冲突和竞争。例如,CPU 中的总线仲裁器通过选择不同的时钟来判断不同设备的访问优先级,从而可以实现多个设备之间的冲突和竞争控制。
C. 增减几余项
在电路中,通过增加或减少几余项可以避免部分竞争和冒险问题,但并不能完全解决问题。
D. 用格雷码代替二进制码
因为格雷码中相邻的码之间只有一位二进制位数不同,与二进制码相比可以减少信号传输中的冲突。但是这种方法同样需要按照设定的规则进行调整。
因此,选项 B 是正确的:加选通信号来消除冲突和竞争。
3、在FPGA中,以下哪些方法可以用于减轻或修复同源时钟下的时序问题:( )
A.打拍
B.减少寄存器间的逻辑层级
C.使用速度等级更高的器件
D.降低主频
E.逻辑复用
答案:A B C D
解析*:
A、B、C、D 都可以用于减轻或修复同源时钟下的时序问题。
解析:
同源时钟在 FPGA 中的设计中难免会出现时序问题,因为每个时钟都会增加延迟并且在不同的设备中有不同的振荡周期。以下方法可以用于减轻或修复同源时钟下的时序问题:
A. 打拍
打拍是指在设计中设置适当的触发边缘,例如在时序问题发生的传输接口处设置数据端口和时钟端口的触发边缘,在数据端口有效的时候立即将其打入寄存器,从而避免不同的时钟导致的时序问题。
B. 减少寄存器间的逻辑层级
寄存器间的逻辑层级越多,延迟就越高。在设计中,可以尽量减少逻辑层级的数量来降低传播延迟。
C. 使用速度等级更高的器件
速度等级更高的器件可以在保证可靠性的前提下更快地传输信号,从而减小总延迟。
D. 降低主频
主频越高,时序问题就越容易发生。如果遇到时序问题,可以尝试降低主频。
E. 逻辑复用
如果某些模块只需要部分时间才需要访问,在 FPGA 设计中,可以使用逻辑复用的方法,将多个模块共享一个时钟。例如,计算机硬盘控制器可使用 DMA 控制器共享时钟。
因此,选项 A、B、C、D 都可以用于减轻或修复同源时钟下的时序问题。
4、FPGA中的主要资源中包括有:( )
A.BRAM
B.电容
C.CPU
D.AXI总线
E.DLL
答案:A B E
解析*:
A、B、E 是 FPGA 中的主要资源。
解析:
FPGA(Field Programmable Gate Array)是一种可编程逻辑电路,它由大量的可编程逻辑单元(FPGA 芯片上的 LUT、寄存器等器件)以及其他资源组成,其中主要资源包括:
A. BRAM
BRAM(Block RAM)是一种硬件块,可以存储数据和程序等信息。FPGA 芯片通常具有多个 BRAM 块,用于存储计算中需要的数据。
B. 电容
FPGA 芯片中的电容用于存储器件状态和中间计算结果等信息。这些电容可以在芯片上自由重配,从而实现完全可定制的逻辑电路设计。
C. CPU
FPGA 可以作为嵌入式系统的中央处理部件(CPU),但 CPU 并不是 FPGA 中的主要资源,因为 FPGA 的主要设计思想是通过逻辑布线网络实现可编程的电路设计。
D. AXI 总线
AXI 总线是基于 AMBA(Advanced Microcontroller Bus Architecture)总线协议的一种高性能、低延迟、面向系统级的总线接口。FPGA 中可以使用 AXI 总线协议实现高速数据传输。
E. DLL
DLL(Digital Lock Loop)是一种时钟同步电路,可用于 FPGA 中实现时钟同步。它可以消除电路中时钟偏差和抖动的影响,从而提高电路的稳定性。
因此,选项 A、B、E 是 FPGA 中的主要资源。
5、常见的相机防抖技术包括哪些( )
A.BIS
B.CIS
C.EIS
D.OIS
答案: A B C D
解析*:
常见的相机防抖技术包括:
A. BIS(Body Image Stabilization):通过相机机身内部的机械部件来实现防抖;
B. CIS(Chip Image Stabilization):通过图像传感器内部的机械部件来实现防抖;
C. EIS(Electronic Image Stabilization):通过在图像处理过程中对图像进行实时处理来达到防抖效果,例如利用计算机视觉算法进行图像去抖动;
D. OIS(Optical Image Stabilization):通过相机镜头内部的机械部件来实现防抖,通过控制一个或多个光学元件的位置来抵消手持相机时的抖动。
因此,选项 A、B、C、D 都是常见的相机防抖技术。
6、下列有关12C总线描述正确有:( )
A.SCL和SDA均为可双向控制且需要接上拉电阻
B.同一个主机可以控制多个从机
C.通信过程可不需要对方应答信号
D.从机可通过Clock-Stretching机制限制主机通信速率
答案:B D
解析*:
正确的描述有:
B. 同一个主机可以控制多个从机。
D. 从机可通过 Clock-Stretching 机制限制主机通信速率。
解析:
I2C(Inter-Integrated Circuit)总线是一种串行通信总线,常用于连接微控制器、传感器、存储器等设备。下面分别对每个选项进行说明。
A. SCL 和 SDA 均为可双向控制且需要接上拉电阻
SCL(Serial Clock)线用于传送时钟信号,SDA(Serial Data)线用于传输数据信号,均为双向控制的。同时,由于 SDA 线在通信过程中是双向的,需要接上拉电阻来确保在 I2C 总线空闲时,SDA 线保持高电平状态,避免死锁。
B. 同一个主机可以控制多个从机
在 I2C 中,同一个主机可以连接多个从机设备,从机通过地址选择方式实现通信。
C. 通信过程可不需要对方应答信号
I2C 通信过程需要双方设备之间进行应答信号的传输,确保数据的正确传输。
D. 从机可通过 Clock-Stretching 机制限制主机通信速率
从机可以通过 Clock-Stretching 机制实现限制主机通信速率的目的。当从机需要在处理器芯片集成电路或IO口上完成特定操作时,通过拉低 SCL 来延长总线的时钟脉冲,同时向主机发送 NACK 信号,从而实现限制主机通信速率的目的。
因此,只有选项 B 和 D 是正确的描述。
7、串口通信中,除过数据负载,还包括哪些控制位( )
A.起始位
B.结束位
C.控制位
D.校验位
答案:A B C D
解析*:
串口通信中,除了数据负载外,还包括以下控制位:
A. 起始位(Start Bit):用于表示数据传输的开始,通常为低电平。
B. 结束位(Stop Bit):用于表示数据传输的结束,通常为高电平。
C. 控制位(Control Bit):用于控制数据传输的行为,可分为硬件流控制和软件流控制两种方式。
D. 校验位(Parity Bit):用于检测串行数据传输过程中的错误,可以分为奇校验、偶校验和无校验三种方式。
因此,选项 A、B、C、D 都是串口通信中的控制位。
8、Xilinx fpga常用的调试工具有哪些( )
A.ILA
B.selectio
C.VIO
D.Ibert
答案:A B C D
解析*:
常用于Xilinx FPGA调试的工具包括:
Integrated Logic Analyzer(ILA):内部逻辑分析器,可用于在开发过程中监视内部信号和状态。
SelectIO:用于调整器件与外部设备之间的输入和输出信号的驱动程序。
VIO:一种虚拟输入/输出模块,可用于在调试过程中对FPGA进行仿真并检查内部状态和信号。
IBERT:内部比特错误率测试。它是一种自测试工具,用于检测FPGA器件的性能是否符合设计要求。
可以根据具体的调试需求,选择合适的工具进行使用。
整理不易,如果觉得对你有帮助的话,可以收藏下来慢慢刷!
回顾往期精彩笔试真题:
笔试题2023-燧原-数字IC设计(附答案及解析)收藏不易,如果觉得对你有帮助的话,可以收藏下来慢慢刷!
#笔试##FPGA数字IC笔试面试系列##数字IC##芯片##春招你拿到offer了吗#