为什么一段Verilog数组代码没有推断成Block RAM?FPGA面试

浏览量:2
时间: 2026-11-15 22:39:27

在FPGA里写了reg数组,不代表综合器一定会把它映射成BRAM。读写端口数量、异步读写方式、复位行为和器件资源都可能影响综合结果。

面试官提问

FPGA面试:为什么一段Verilog数组代码没有推断成Block RAM?

Vivado真实Block Memory Generator与AXI BRAM Controller连接及参数配置界面

一、面试参考回答

Block RAM通常支持特定的同步读写端口结构。若RTL写成组合异步读、多端口冲突或逐位异步复位,综合器可能改用LUT RAM或触发器。应先确认目标FPGA的BRAM原语特性,再按工具推荐模板编写同步读写逻辑,并查看综合报告中的RAMB18/RAMB36等资源使用。

二、最常见的三类推断障碍

  1. 异步读:assign dout = mem[addr]这类写法可能无法映射到只支持同步读的块RAM结构。

  2. 对整个存储数组逐元素异步复位,往往不符合BRAM硬件特性;可考虑仅复位输出有效标志或用初始化机制。

  3. 读写端口数、位宽、字节使能和读写冲突语义与目标器件原语不匹配。

三、如何确认综合到底用了什么

  1. 看综合Utilization报告的Block RAM Tile、RAMB18/RAMB36与LUTRAM资源,而不是仅看RTL代码量。

  2. 若时序允许,增加寄存输出并按器件支持的同步读取模板调整代码。

  3. 也可以使用Block Memory Generator IP,但需理解初始化、读延迟、使能和时钟约束。

容易失分的回答

不要把“数组越大就一定用BRAM”当成规律,综合映射由RTL行为、工具和目标器件共同决定。

相关业务入口

了解电子硬件与PCB工程实战课程


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
Linux内核模块怎么编写与加载?嵌入式Linux面试从module_init讲到insmod

嵌入式Linux中级技术基础题本文概述内核模块(Kernel Module)是嵌入式Linux工程师的基本功,也是面试必考题。面试官想听的不是背一个hello模... 详情>>

2026-09-03 13:53:27
PCB测试点与可测试性设计DFT怎么做?PCB工程师面试从测试点到ICT飞针

PCB设计中级技术基础题本文概述可测试性设计(DFT)决定产品能不能快速、可靠地测试和返修,也是量产工程师和PCB工程师面试常考的实用题。面试官想听的不是“留几... 详情>>

2026-09-08 08:59:05
100 MHz频率的电磁波通过5mm厚度,相对介电常数εr = 8的透明玻璃,请问玻璃的屏蔽效能为多少?

100 MHz频率的电磁波通过5mm厚度,相对介电常数εr = 8的透明玻璃,请问玻璃的屏蔽效能为多少?a. 0 dBb. -3 dBc. 3 dBd. 6 d... 详情>>

2024-03-20 14:26:10
I2C通信原理是什么?常见问题有哪些

分类:嵌入式单片机经验级别:初级难度:★★☆☆☆题型:原理分析+代码实现I2C是单片机开发中最常用的串行通信协议之一本文概述I2C是一种两线式串行通信协议,只需... 详情>>

2026-08-12 09:57:09
看门狗电路硬件设计要点与误触发怎么排查

分类:硬件设计 经验级别:中级 难度:中等 题型:技术设计题+故障排查题本文概述看门狗电路是嵌入式系统可靠性的最后一道防线,其核心原理是在规定时间内未收到喂狗信... 详情>>

2026-08-19 09:50:23
开班信息