单选
1. 题目内容
影响芯片成本的主要因素是 Die Size 和封装,但电源、时钟等因素,特别是功耗对解决方案的成本影响较大,因此低成本设计需要兼顾低功耗设计:()
1. 解题步骤
1.1 分析题目
- Die Size:芯片面积直接影响制造成本,面积越小,成本越低。
- 封装:封装类型和复杂度也会影响成本。
- 功耗:功耗影响电源设计、散热方案和系统整体成本,高功耗会增加电源和散热成本。
- 电源和时钟:电源和时钟设计影响芯片的稳定性和性能,间接影响成本。
1.2 结论
低成本设计不仅需要优化 Die Size 和封装,还需要考虑功耗、电源和时钟等因素,特别是低功耗设计对降低成本至关重要。
2. 最终答案
正确答案:B. 正确
2. 题目内容
reg [31:0] big_vect; 那么 big_vect[0+:8] 是多少?()
1. 解题步骤
1.1 分析语法
- big_vect[0+:8]:这是 Verilog 中的位选择语法,表示从起始位开始选择连续的位。
- 0+:起始位为 0。
- 8:选择 8 位。
- 结果:从第 0 位开始,选择 8 位,即 big_vect[0:7]。
1.2 选项分析
选项 | 描述 | 正误 |
---|---|---|
A | big_vect[0:7] | 正确 |
B | big_vect[7:0] | 错误 |
//下面 2 种赋值是等效的
A = data1[31-: 8] ;
A = data1[31:24] ;
//下面 2 种赋值是等效的
B = data1[0+ : 8] ;
B = data1[0:7] ;
参考答案:https://www.runoob.com/w3cnote/verilog-data-type.html
2. 最终答案
正确答案:A. big_vect[0:7]
3. 题目内容
generate 语句中的循环控制变量应该定义为 integer 类型()
1. 解题步骤
1.1 分析语法
- generate 语句:用于在编译时生成硬件结构,通常与循环(
for
)结合使用。 - 循环控制变量:在
generate
语句中,循环控制变量通常定义为 genvar 类型,而不是 integer 类型。- genvar:专门用于
generate
语句中的循环变量。 - integer:用于仿真中的整数变量,不能用于
generate
语句。
- genvar:专门用于
1.2 选项分析
选项 | 描述 | 正误 |
---|---|---|
A | 错误 | 正确 |
B | 正确 | 错误 |
2. 最终答案
正确答案:A. 错误
4. 题目内容
o10 换算成十进制是多少?()
A. 8
B. 16
C. 10
D. 2
解析
1. 题目分析
这道题考察的是 八进制(Octal) 数转换为 十进制(Decimal) 数的基本知识。
- o10:表示一个八进制数,前缀
o
或O
用于标识八进制数。 - 八进制数的规则:每一位的权值是 8 的幂次方,从右到左依次为 (8^0, 8^1, 8^2, \dots)。
2. 转换步骤
将八进制数 o10
转换为十进制:
- 分解每一位:
- 第 0 位(最低位):
0
- 第 1 位:
1
- 第 0 位(最低位):
- 计算每一位的十进制值:
- 第 0 位:(0 \times 8^0 = 0)
- 第 1 位:(1 \times 8^1 = 8)
- 将各位的值相加:
(0 + 8 = 8)
因此,o10
的十进制值为 8。
3. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 8 | 正确 | 计算结果为 8 |
B | 16 | 错误 | 16 是十六进制 0x10 的十进制值 |
C | 10 | 错误 | 10 是十进制 10 的值 |
D | 2 | 错误 | 2 是二进制 10 的十进制值 |
4. 常见误区
- 混淆八进制、十六进制和二进制的表示方法:
- 八进制:前缀
o
或O
,例如o10
。 - 十六进制:前缀
0x
或0X
,例如0x10
。 - 二进制:前缀
0b
或0B
,例如0b10
。
- 八进制:前缀
最终答案
正确答案:A. 8
5. 题目内容
哪些情况下不会产生 Latch 电路?()
A. 组合逻辑中条件不全的 case 语句没有 default 赋值
B. 时序逻辑中 if 选择语句,没有 else 部分表达
C. 使用 if 选择语句的组合逻辑没有 else 部分表达
D. 使用 case 选择语句的组合逻辑没有 else 表达
解析
1. Latch 电路的产生条件
Latch 电路通常在 组合逻辑 中由于 条件不全 而产生,例如:
- if 语句 缺少
else
分支。 - case 语句 缺少
default
分支。
在 时序逻辑 中,由于寄存器的存在,不会产生 Latch。
2. 选项分析
选项 | 描述 | 是否产生 Latch | 依据 |
---|---|---|---|
A | 组合逻辑中条件不全的 case 语句没有 default 赋值 | 会产生 Latch | 组合逻辑中条件不全会导致 Latch |
B | 时序逻辑中 if 选择语句,没有 else 部分表达 | 不会产生 Latch | 时序逻辑中寄存器的存在避免了 Latch |
C | 使用 if 选择语句的组合逻辑没有 else 部分表达 | 会产生 Latch | 组合逻辑中条件不全会导致 Latch |
D | 使用 case 选择语句的组合逻辑没有 else 表达 | 会产生 Latch | 组合逻辑中条件不全会导致 Latch |
3. 最终答案
正确答案:B
6. 题目内容
关于类的构造函数,以下说法中正确的有()
A. 函数体中必须有 new 语句
B. 返回类型是 void 类型
C. 函数名与其类名完全相同
D. 不能有形参
解析
1. 构造函数的特性
- 函数名:与类名完全相同。
- 返回类型:没有返回类型(包括
void
)。 - new 语句:构造函数在对象创建时自动调用,不需要显式调用
new
。 - 形参:可以有形参(用于参数化构造)。
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 函数体中必须有 new 语句 | 错误 | 构造函数不需要显式调用 new |
B | 返回类型是 void 类型 | 错误 | 构造函数没有返回类型 |
C | 函数名与其类名完全相同 | 正确 | 构造函数名必须与类名相同 |
D | 不能有形参 | 错误 | 构造函数可以有形参 |
3. 最终答案
正确答案:C
7. 题目内容
中断指示寄存器由实时告警的状态触发,是只读寄存器。()
A. 错误
B. 正确
解析
1. 中断指示寄存器的特性
- 功能:用于指示中断或告警状态。
- 读写属性:通常为 只读,因为其值由硬件状态自动更新,软件不应修改。
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 错误 | 错误 | 中断指示寄存器通常是只读的 |
B | 正确 | 正确 | 中断指示寄存器由硬件状态触发,软件只能读取 |
3. 最终答案
正确答案:B
8. 题目内容
下面的选项中关于宏定义的说法不正确的是?()
A. 宏定义文件最好放在一个文件中集中管理,防止出现不同项目需要修改为不同的宏定义值,但是却漏改了某些地方的情况出现。
B. 综合的时候,define 可以跨文件列表生效
C. 如果模块中有很多宏定义,在模块的文件列表最后需要 undef 掉使用的宏,防止和其他模块的宏定义冲突。
D. 仿真时如果出现宏定义冲突,后面的 define 值会覆盖前面的 define 值
解析
1. 宏定义(`define)的基本特性
- 作用范围:
define 宏定义是全局的,从定义点开始到编译结束都有效,除非显式地用
undef` 取消定义。 - 跨文件生效:在 Verilog/SystemVerilog 中,`define 宏可以跨文件生效(前提是宏定义在文件被读取之前已经定义)。
- 冲突处理:如果同一宏被多次定义,后面的定义会覆盖前面的定义(仿真和综合均如此)。
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 宏定义文件最好集中管理,防止漏改 | 正确 | 集中管理宏定义可避免维护问题 |
B | 综合时 define 可以跨文件列表生效 | 正确 | define 是全局的,综合和仿真均支持跨文件 |
C | 模块最后需要 undef 宏防止冲突 | 不正确 | 通常不需要主动 undef ,除非有特殊需求 |
D | 仿真时宏定义冲突,后面的覆盖前面的 | 正确 | 宏定义冲突时,后定义的生效 |
3. 关键结论
- 不正确的说法是 C:
- 在模块中
undef
宏定义并不是常规做法,反而可能导致后续代码无法使用该宏。 - 通常采用 命名空间管理(如加前缀)或 文件隔离 来避免宏冲突,而不是频繁
undef
。
- 在模块中
4. 最终答案
正确答案:C
9. 题目内容
在 SystemVerilog 中,任务(task)可以调用函数(function)。()
A. 错误
B. 正确
解析
1. SystemVerilog 中 task 和 function 的区别
特性 | 任务(task) | 函数(function) |
---|---|---|
返回值 | 可以没有返回值,或通过 output/inout 参数返回 | 必须返回一个值(通过 return 或同名的变量) |
耗时操作 | 可以包含时间控制语句(如 #, @, wait) | 不能包含任何时间控制语句 |
调用方式 | 可以调用 function 和 task | 只能调用 function,不能调用 task |
用途 | 用于需要延迟或事件触发的操作 | 用于纯计算逻辑,无延迟 |
2. 题目分析
- task 可以调用 function:
- 因为 function 是纯计算逻辑,不涉及时间控制,task 完全可以调用 function。
- 例如:
function int add(int a, int b); return a + b; endfunction task calculate; int sum; sum = add(3, 4); // task 调用 function $display("Sum = %0d", sum); endtask
- function 不能调用 task:
- 因为 task 可能包含时间控制(如
#10
),而 function 必须立即返回,不能等待。
- 因为 task 可能包含时间控制(如
3. 选项判断
- B. 正确:task 可以调用 function,这是 SystemVerilog 的合法用法。
4. 最终答案
正确答案:B. 正确
10. 题目内容
假设输入信号 X 位宽为 12bit,inA 位宽为 6 bit,inB 位宽为 17bit,实现 Y = X*inA + inB 功能,并要求不损失精度,那么输出信号 Y 位宽应不小于()?
A. 17bit
B. 12bit
C. 18bit
D. 19bit
解析
1. 计算步骤
-
乘法运算(X * inA):
- X 位宽:12bit
- inA 位宽:6bit
- 乘积位宽:12 + 6 = 18bit
-
加法运算(X*inA + inB):
- X*inA 位宽:18bit
- inB 位宽:17bit
- 加法结果位宽:max(18, 17) + 1 = 19bit(考虑进位)
2. 最终答案
正确答案:D. 19bit
11. 题目内容
reg [7:0] mem [1:256]; initial $readmemh(“mem.data”, mem, 128, 1);对于 mem 行为正确的描述是()?
A. 从地址128开始,写到地址1
B. 从地址128开始,写1个地址
C. 从地址1开始,写128个地址
解析
1. $readmemh 语法
$readmemh("file", mem, start, end)
:
- file:文件名。
- mem:目标存储器。
- start:起始地址。
- end:结束地址。
2. 题目分析
$readmemh("mem.data", mem, 128, 1)
:- 从地址 128 开始,向地址 1 写入数据。
- 由于起始地址 > 结束地址,数据从高地址向低地址写入。
3. 最终答案
正确答案:A. 从地址128开始,写到地址1
12. 题目内容
九进制数 16 与九进制数 27 相加的结果用九进制表示为()?
A. 45.0
B. 46.0
C. 43.0
D. 44.0
解析
1. 转换与计算
-
九进制数 16:
- 十进制值:(1 \times 9^1 + 6 \times 9^0 = 9 + 6 = 15)
-
九进制数 27:
- 十进制值:(2 \times 9^1 + 7 \times 9^0 = 18 + 7 = 25)
-
相加结果:
- 十进制值:15 + 25 = 40
-
转换为九进制:
- (40 \div 9 = 4) 余 (4)
- 九进制表示:44
2. 最终答案
正确答案:D. 44.0
13. 题目内容
有关 DFT,以下说法不正确的是()?
A. scan 的设计规则,需保证时钟复位可控
B. ECO 时无须关注 DFT 网表
C. 主流的 scan 方式采用 MUX‐DFF
D. MBIST 指的是对 memory 的 BIST 测试
解析
1. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | scan 的设计规则,需保证时钟复位可控 | 正确 | DFT 要求时钟和复位可控 |
B | ECO 时无须关注 DFT 网表 | 不正确 | ECO 需要同步更新 DFT 网表 |
C | 主流的 scan 方式采用 MUX‐DFF | 正确 | MUX-DFF 是主流 scan 方式 |
D | MBIST 指的是对 memory 的 BIST 测试 | 正确 | MBIST 是 memory 的内建自测试 |
2. 最终答案
正确答案:B. ECO 时无须关注 DFT 网表
14. 题目内容
对芯片性能影响最大的三个因素是 PVT,分别是指?()
A. package, voltage, temperature
B. process, voltage, temperature
C. process, verification, temperature
D. process, voltage, test
解析
1. PVT 的定义
PVT 是芯片设计和性能分析的三个关键因素:
- P (Process):半导体制造工艺的偏差(如晶体管尺寸、掺杂浓度等)。
- V (Voltage):工作电压的变化。
- T (Temperature):芯片工作温度的变化。
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | package, voltage, temperature | 错误 | “package” 不是 PVT 的组成部分 |
B | process, voltage, temperature | 正确 | 标准 PVT 定义 |
C | process, verification, temperature | 错误 | “verification” 不属于 PVT |
D | process, voltage, test | 错误 | “test” 不属于 PVT |
3. 关键点
- Process:制造工艺的波动直接影响晶体管性能。
- Voltage:电压降低会减少功耗但可能降低速度,电压升高则相反。
- Temperature:高温会降低载流子迁移率,影响芯片速度和可靠性。
4. 最终答案
正确答案:B. process, voltage, temperature
15. 题目内容
下面这段代码,说法错误的是()?
always @(posedge clk) begin
din_dly <= din;
end
A. din_dly 用来当控制信号是安全的
B. din_dly 不受复位影响
C. 数据寄存推荐这样的写法
D. din 的不定态会传递到 din_dly
解析
1. 代码分析
- 这是一个简单的 D 触发器,
din_dly
在每个时钟上升沿采样din
。 - 复位:代码中没有复位信号,因此
din_dly
不受复位影响。 - 不定态传递:如果
din
为不定态(X),din_dly
也会传递不定态。
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | din_dly 用来当控制信号是安全的 | 错误 | 没有复位信号,din_dly 可能为不定态,不安全 |
B | din_dly 不受复位影响 | 正确 | 代码中没有复位信号 |
C | 数据寄存推荐这样的写法 | 正确 | 这是标准的 D 触发器写法 |
D | din 的不定态会传递到 din_dly | 正确 | 不定态会传递 |
3. 最终答案
正确答案:A. din_dly 用来当控制信号是安全的
17. 题目内容
关于功耗,以下描述不正确的是()
A. 改变芯片的供电电压和时钟频率都会对芯片功耗产生影响
B. 设计者需要关注平均功耗、峰值功耗和功耗跳变
C. 芯片的功耗会受实际信号的影响,所以功耗测试需要结合业务来开展
D. 对于可关断的模块,使用时钟门控即可降低功耗
解析
1. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 改变芯片的供电电压和时钟频率都会对芯片功耗产生影响 | 正确 | 电压和频率是功耗的主要影响因素 |
B | 设计者需要关注平均功耗、峰值功耗和功耗跳变 | 正确 | 这些是功耗设计的关键指标 |
C | 芯片的功耗会受实际信号的影响,所以功耗测试需要结合业务来开展 | 正确 | 实际信号会影响动态功耗 |
D | 对于可关断的模块,使用时钟门控即可降低功耗 | 不正确 | 可关断模块应使用电源门控,时钟门控仅降低动态功耗 |
2. 最终答案
正确答案:D. 对于可关断的模块,使用时钟门控即可降低功耗
18. 题目内容(详细波形分析)
为实现占空比 50% 三分频时钟,正确的电路描述是()?
1. 三分频电路设计原理
要实现 占空比50%的三分频时钟,必须结合 上升沿和下降沿 的计数结果,通过逻辑运算合成。
关键点:
- 用 上升沿 产生一个 占空比1/3 的时钟A(高电平1周期,低电平2周期)。
- 用 下降沿 产生一个 占空比1/3 的时钟B(相位与A错开半个周期)。
- 将A和B 相或(OR),合成占空比50%的时钟。
2. 波形图解
假设原始时钟周期为 T,三分频后周期为 3T。
时钟边沿 | 时钟A(上升沿生成) | 时钟B(下降沿生成) | A OR B(输出时钟) |
---|---|---|---|
0T | 1(高电平) | 0(低电平) | 1 |
1T | 0 | 1(下降沿触发) | 1 |
2T | 0 | 0 | 0 |
3T | 1(下一个周期) | 0 | 1 |
波形示意图:
原始时钟: _|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_ (周期 T)
时钟A: ‾|___|‾|___|‾ (占空比 1/3,上升沿触发)
时钟B: _|‾|___|‾|___|‾ (占空比 1/3,下降沿触发)
输出: ‾|‾|___|‾|‾|___|‾ (占空比 50%,A OR B)
- 输出时钟的高电平时间为 1.5T,低电平时间为 1.5T,实现 50%占空比。
3. 选项验证
选项 | 方法描述 | 问题 | 结果 |
---|---|---|---|
A | 上升沿生成1/3 + 上升沿生成2/3,相或 | 2/3占空比无法合成50% | 错误 |
B | 上升沿生成1/3 + 下降沿生成1/3,相与 | 相与会缩短高电平时间 | 错误 |
C | 上升沿生成1/3 + 下降沿生成1/3,相或 | 正确合成50%占空比 | 正确 |
D | 上升沿生成1/3 + 上升沿生成2/3,相与 | 逻辑错误 | 错误 |
4. 为什么其他选项错误?
- 选项A/D:使用同一沿(上升沿)生成的两个信号相位相同,无法错开相位。
- 选项B:相与(AND)会导致高电平时间更短(如0.5T),无法达到50%。
5. 最终答案
正确答案:C
关键步骤:
- 上升沿生成占空比1/3的时钟A。
- 下降沿生成占空比1/3的时钟B。
- 将A和B相或(OR)。
19. 题目内容
关于冯诺依曼结构和哈佛结构的描述中,错误的是()?
A. 冯诺依曼接口中程序计数器负责提供程序执行所需要的地址
B. 哈佛结构中取指令和执行不能完全重叠
C. 冯诺依曼结构的计算机中数据和程序共用一个存储空间
D. 哈佛结构的计算机在一个机器周期内科同时获得指令和操作数
解析
1. 冯诺依曼结构与哈佛结构
特性 | 冯诺依曼结构 | 哈佛结构 |
---|---|---|
存储空间 | 数据和程序共用 | 数据和程序分离 |
取指与执行 | 不能完全重叠 | 可以完全重叠 |
地址提供 | 程序计数器提供地址 | 程序计数器提供地址 |
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 冯诺依曼接口中程序计数器负责提供程序执行所需要的地址 | 正确 | 程序计数器提供地址 |
B | 哈佛结构中取指令和执行不能完全重叠 | 错误 | 哈佛结构可以完全重叠 |
C | 冯诺依曼结构的计算机中数据和程序共用一个存储空间 | 正确 | 冯诺依曼结构的特点 |
D | 哈佛结构的计算机在一个机器周期内科同时获得指令和操作数 | 正确 | 哈佛结构的特点 |
3. 最终答案
正确答案:B
20. 题目内容
状态机必须有1个缺省状态?()
A. 正确
B. 错误
解析
1. 状态机设计
- 缺省状态:用于处理未定义或异常情况,确保状态机不会进入未知状态。
- 必要性:在硬件设计中,缺省状态是必需的,以避免锁死或异常行为。
2. 最终答案
正确答案:A. 正确
21. 题目内容
a1 和 a2 的检查效果完全一样?()
property p1;
@(posedge clk) a |=> b |=> c;
endproperty
a1: assert property(p1);
property p2;
@(posedge clk) a ##1 b ##1 |-> c;
endproperty
a2: assert property(p2);
A. 正确
B. 错误
解析
1. 属性分析
-
p1:
a |=> b |=> c
a |=> b
:如果a
为真,则在下一个时钟周期b
必须为真。b |=> c
:如果b
为真,则在下一个时钟周期c
必须为真。- 整体效果:
a
为真后,b
和c
分别在接下来的两个时钟周期为真。
-
p2:
a ##1 b ##1 |-> c
a ##1 b
:a
为真后,b
在下一个时钟周期为真。b ##1 |-> c
:b
为真后,c
在下一个时钟周期为真。- 整体效果:
a
为真后,b
和c
分别在接下来的两个时钟周期为真。
2. 结论
p1
和 p2
的逻辑效果完全一致。
3. 最终答案
正确答案:A. 正确
22. 题目内容
以下关于 false-path,正确的是()?
A. 一般模拟 IP 和系统的互联接口都可以设置为 false-path
B. 一般异步电路可以设置为 false-path
C. 一般异步复位可以设置为 false-path
D. 两个不同频率之间的接口一定可以设置为 false-path
解析
1. False-path 的定义
False-path 是指在时序分析中不需要检查的路径,通常用于以下情况:
- 异步信号(如异步复位)。
- 跨时钟域的信号(如不同频率的时钟域接口)。
- 模拟电路与数字电路的接口(通常不适用 false-path)。
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 一般模拟 IP 和系统的互联接口都可以设置为 false-path | 错误 | 模拟 IP 和数字系统的接口通常需要时序检查 |
B | 一般异步电路可以设置为 false-path | 正确 | 异步电路通常不需要时序检查 |
C | 一般异步复位可以设置为 false-path | 正确 | 异步复位信号通常不需要时序检查 |
D | 两个不同频率之间的接口一定可以设置为 false-path | 错误 | 跨时钟域接口需要特殊处理(如同步器),不能直接设为 false-path |
3. 最终答案
正确答案:B, C
23. 题目内容
在 Verilog 中,比算数运算符 + 优先级高的是?()
A. &
B. %
C. >
D. !==
解析
1. Verilog 运算符优先级
从高到低:
!
、~
(逻辑非、按位非)*
、/
、%
(乘、除、取模)+
、-
(加、减)&
、|
、^
(按位与、或、异或)==
、!=
、===
、!==
(相等、不等)>
、<
、>=
、<=
(比较)
2. 选项分析
选项 | 运算符 | 优先级 | 是否高于 + |
---|---|---|---|
A | &(按位与) | 低于 + | 否 |
B | %(取模) | 高于 + | 是 |
C | >(大于) | 低于 + | 否 |
D | !==(不全等) | 低于 + | 否 |
3. 最终答案
正确答案:B. %
24. 题目内容
有关功耗,以下说法不正确的是()?
A. 电压越大,工作频率越高,其动态功耗越高
B. 低功耗设计的目标就是采用各种优化技术和方法,在各个设计目标之间找到最佳的结合点
C. 设计层次越高,功耗优化所能达到的效果越好
D. 芯片单位面积的动态功耗和静态功耗随着工艺的发展呈下降趋势
解析
1. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 电压越大,工作频率越高,其动态功耗越高 | 正确 | 动态功耗与电压和频率成正比 |
B | 低功耗设计的目标就是采用各种优化技术和方法,在各个设计目标之间找到最佳的结合点 | 正确 | 低功耗设计需要权衡性能、面积和功耗 |
C | 设计层次越高,功耗优化所能达到的效果越好 | 错误 | 设计层次越低(如 RTL 或门级),功耗优化效果越好 |
D | 芯片单位面积的动态功耗和静态功耗随着工艺的发展呈下降趋势 | 正确 | 先进工艺通常降低功耗 |
2. 最终答案
正确答案:C. 设计层次越高,功耗优化所能达到的效果越好
25. 题目内容
generate for 循环语句中使用的标尺变量可定义为 integer?()
A. 错误
B. 正确
解析
1. generate for 循环的特性
- generate for:用于在编译时生成硬件结构,通常用于实例化模块或生成重复的逻辑。
- 标尺变量:用于控制循环的变量,必须是 genvar 类型,而不是 integer 类型。
2. 为什么不能使用 integer?
- genvar:专门用于
generate
语句中的循环变量,只能在编译时使用。 - integer:用于仿真中的整数变量,不能在
generate
语句中使用。
3. 示例代码
generate
genvar i; // 必须使用 genvar
for (i = 0; i < 4; i = i + 1) begin
// 实例化模块或生成逻辑
end
endgenerate
4. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 错误 | 正确 | 标尺变量必须为 genvar ,不能为 integer |
B | 正确 | 错误 |
5. 最终答案
正确答案:A. 错误
这道题目考察的是 SystemVerilog Assertions (SVA) 的序列操作符的使用,尤其是如何描述信号在时钟上升沿采样后的行为。我们需要分析每个选项中使用的 SVA 语法是否正确地描述了题目中的行为要求。
题目分析
题目要求:
- 在时钟上升沿检测到
start
信号有效(即start
上升沿)。 - 两个时钟周期后,信号
a
连续或间断地出现 3 次为高电平。 - 紧接着,在下一个时钟周期,信号
stop
为高。
我们需要选择一个正确的 SVA 属性描述来满足上述行为。
选项分析
A.
property p0;
@(posedge clk) $rose(start1) |-> ##2 (a[=>3]) ##1 stop;
endproperty
a0: assert property(p0);
-
解释:
$rose(start1)
:检测start1
的上升沿。##2
:表示从检测到start1
上升沿后延迟 2 个时钟周期。(a[=>3])
:表示信号a
至少出现 3 次为高电平,但不一定是连续的(非重叠匹配)。##1 stop
:表示紧接着在下一个时钟周期,stop
为高。
-
问题:
(a[=>3])
是一个合法的操作符,但它并不符合题意。因为题目明确要求a
连续或间断地出现 3 次为高电平,而[=>3]
表示的是非重叠的至少 3 次高电平,不符合 “连续或间断” 的精确描述。
B.
property p0;
@(posedge clk) $rose(start1) |-> ##2 (a[*3]) ##1 stop;
endproperty
a0: assert property(p0);
-
解释:
$rose(start1)
:检测start1
的上升沿。##2
:表示从检测到start1
上升沿后延迟 2 个时钟周期。(a[*3])
:表示信号a
连续 3 次为高电平。##1 stop
:表示紧接着在下一个时钟周期,stop
为高。
-
问题:
(a[*3])
表示a
必须连续 3 次为高电平,但题目要求的是a
可以是连续或间断地出现 3 次为高电平。因此,这个选项不符合题意。
C.
property p0;
@(posedge clk) $rose(start1) |-> ##2 (a[->3]) ##1 stop;
endproperty
a0: assert property(p0);
-
解释:
$rose(start1)
:检测start1
的上升沿。##2
:表示从检测到start1
上升沿后延迟 2 个时钟周期。(a[->3])
:表示信号a
出现 3 次为高电平,且可以是连续或间断的(非重叠匹配)。##1 stop
:表示紧接着在下一个时钟周期,stop
为高。
-
匹配性:
(a[->3])
符合题目要求的 “连续或间断地出现 3 次为高电平”。- 整体描述完全符合题意。
D.
property p0;
@(posedge clk) $rose(start1) |-> ##2 (a[=3]) ##1 stop;
endproperty
a0: assert property(p0);
-
解释:
$rose(start1)
:检测start1
的上升沿。##2
:表示从检测到start1
上升沿后延迟 2 个时钟周期。(a[=3])
:表示信号a
出现 3 次为高电平,但这是基于重叠匹配的方式(即允许部分重叠)。##1 stop
:表示紧接着在下一个时钟周期,stop
为高。
-
问题:
(a[=3])
的含义是a
出现 3 次高电平,但允许重叠匹配。这与题目要求的 “连续或间断地出现 3 次为高电平” 不一致。
正确答案
根据上述分析,只有 C 选项完全符合题目要求:
property p0;
@(posedge clk) $rose(start1) |-> ##2 (a[->3]) ##1 stop;
endproperty
a0: assert property(p0);
总结
(a[*3])
表示连续 3 次高电平。(a[->3])
表示非重叠匹配的 3 次高电平(可以是连续或间断的)。(a[=3])
表示重叠匹配的 3 次高电平。
题目要求的是 “连续或间断地出现 3 次为高电平”,因此正确答案是 C。
27. 题目内容
ASIC 开发流程中,如下环节的先后顺序是?()
A. synthesis -> P&R -> RTL
B. RTL -> P&R -> synthesis
C. RTL -> synthesis -> P&R
D. synthesis -> RTL -> P&R
解析
1. ASIC 开发流程
- RTL 设计:编写硬件描述代码。
- 综合(Synthesis):将 RTL 转换为门级网表。
- 布局布线(P&R):将门级网表映射到物理芯片。
2. 最终答案
正确答案:C. RTL -> synthesis -> P&R
28. 题目内容
以下关于 false-path,正确的是()?
A. 一般模拟 IP 和系统的互联接口都可以设置为 false-path
B. 一般异步电路可以设置为 false-path
C. 一般异步复位可以设置为 false-path
D. 两个不同频率之间的接口一定可以设置为 false-path
解析
1. False-path 的定义
False-path 是指在时序分析中不需要检查的路径,通常用于以下情况:
- 异步信号(如异步复位)。
- 跨时钟域的信号(如不同频率的时钟域接口)。
- 模拟电路与数字电路的接口(通常不适用 false-path)。
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 一般模拟 IP 和系统的互联接口都可以设置为 false-path | 错误 | 模拟 IP 和数字系统的接口通常需要时序检查 |
B | 一般异步电路可以设置为 false-path | 正确 | 异步电路通常不需要时序检查 |
C | 一般异步复位可以设置为 false-path | 正确 | 异步复位信号通常不需要时序检查 |
D | 两个不同频率之间的接口一定可以设置为 false-path | 错误 | 跨时钟域接口需要特殊处理(如同步器),不能直接设为 false-path |
3. 最终答案
正确答案:B, C
29. 题目内容
有关综合的说法,以下哪个选项是错误的?()
A. 综合网表可用于 EDA 功能仿真
B. 时序逻辑 always 语句中,if-else 如果 else 的分支缺乏,会综合成 latch
C. casez 是不可综合的
D. 相同的 RTL 代码,每次综合出来的网表可能是不一样的
解析
1. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 综合网表可用于 EDA 功能仿真 | 正确 | 综合后的网表可用于仿真 |
B | 时序逻辑 always 语句中,if-else 如果 else 的分支缺乏,会综合成 latch | 错误 | 时序逻辑不会综合成 latch,组合逻辑才会 |
C | casez 是不可综合的 | 错误 | casez 是可综合的 |
D | 相同的 RTL 代码,每次综合出来的网表可能是不一样的 | 正确 | 综合工具优化可能导致不同网表 |
2. 最终答案
正确答案:B
30. 题目内容
下面是一个什么电路?()
always @(posedge clk) begin
if (rst_n == 1'b0)
a <= 2'b0;
else if (b > 2'b0)
a <= b;
end
A. 综合成 Latch
B. 带异步复位的 D 触发器
C. 组合逻辑
D. 带同步复位的 D 触发器
解析
1. 代码分析
- 时钟信号:
posedge clk
表示时序逻辑。 - 复位信号:
rst_n
在时钟上升沿生效,是 同步复位。 - 逻辑功能:复位时
a
清零,否则根据b
的值更新a
。
2. 选项分析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 综合成 Latch | 错误 | 时序逻辑不会综合成 latch |
B | 带异步复位的 D 触发器 | 错误 | 复位是同步的 |
C | 组合逻辑 | 错误 | 有时钟信号,是时序逻辑 |
D | 带同步复位的 D 触发器 | 正确 | 复位在时钟上升沿生效 |
3. 最终答案
正确答案:D
不定项
1. 关于状态机编码,如下描述中正确的是()
【A】状态编码用 parameter 定义
【B】状态机必须有 default 态
【C】用组合逻辑和时序逻辑分离的风格描述 FSM
【D】用 case 语句描述状态的转移
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 状态编码用 parameter 定义 | 正确 | parameter 用于定义状态编码,提高可读性和可维护性 |
B | 状态机必须有 default 态 | 错误 | 如果 case 语句覆盖所有状态,可以不用 default 态 |
C | 用组合逻辑和时序逻辑分离的风格描述 FSM | 正确 | 分离风格是状态机设计的推荐方法 |
D | 用 case 语句描述状态的转移 | 正确 | case 语句是描述状态转移的常用方式 |
正确答案:A, C, D
2. 业界常用的验证方法学有()
【A】SystemC
【B】UVM
【C】SystemVerilog
【D】VMM
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | SystemC | 错误 | SystemC 是硬件建模语言,不是验证方法学 |
B | UVM | 正确 | UVM(Universal Verification Methodology)是业界主流验证方法学 |
C | SystemVerilog | 错误 | SystemVerilog 是硬件描述和验证语言,不是方法学 |
D | VMM | 正确 | VMM(Verification Methodology Manual)是早期的验证方法学 |
正确答案:B, D
3. 逻辑电路的动态功耗一般跟以下哪个因素相关()
【A】电压
【B】频率
【C】工艺
【D】工作温度
解析
动态功耗由 开关功耗 和 短路功耗 组成:
- 开关功耗:
- 公式:( P_{\text{switch}} = C_L \cdot V_{DD}^2 \cdot f )
- 影响因素:电压 ( V_{DD} )、频率 ( f )。
- 短路功耗:
- 公式:( P_{\text{short}} = t_{sc} \cdot V_{DD} \cdot I_{\text{peak}} \cdot f )
- 影响因素:工艺(影响 ( I_{\text{peak}} ) 和 ( t_{sc} ))、工作温度(影响晶体管性能)。
因此,电压、频率、工艺、工作温度 都会影响动态功耗。
正确答案:A, B, C, D
4. 下列哪些项是异步处理需要考虑的因素()
【A】异步信号的电平或脉冲特性
【B】异步信号是不是总线
【C】两个异步时钟时间的频率关系
【D】异步信号是不是寄存器输出
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 异步信号的电平或脉冲特性 | 正确 | 电平或脉冲特性影响同步器设计 |
B | 异步信号是不是总线 | 错误 | 总线与否不影响异步处理 |
C | 两个异步时钟时间的频率关系 | 正确 | 频率关系影响同步器设计 |
D | 异步信号是不是寄存器输出 | 错误 | 寄存器输出与否不影响异步处理 |
正确答案:A, C
5. 下列不属于分解测试点时的关注点的是()
【A】性能
【B】无充分理由的揣测
【C】偶然的设计失误
【D】可测性
【E】功能
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 性能 | 错误 | 性能是测试点分解的关注点 |
B | 无充分理由的揣测 | 正确 | 无理由的揣测不属于测试点分解的关注点 |
C | 偶然的设计失误 | 正确 | 偶然失误不属于测试点分解的关注点 |
D | 可测性 | 错误 | 可测性是测试点分解的关注点 |
E | 功能 | 错误 | 功能是测试点分解的关注点 |
正确答案:B, C
6. 异步设计的特点是()
【A】没有时钟skew问题
【B】可移植性高
【C】低电源消耗
【D】设计可靠性高
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 没有时钟 skew 问题 | 错误 | 异步设计仍需处理时钟同步问题 |
B | 可移植性高 | 正确 | 异步设计不依赖特定时钟频率 |
C | 低电源消耗 | 正确 | 异步设计可降低动态功耗 |
D | 设计可靠性高 | 错误 | 异步设计需额外处理亚稳态问题 |
正确答案:B, C
7. 关于状态机编码,下面描述中正确的是()
【A】用组合逻辑和时序逻辑分离的风格描述FSM
【B】用case语句描述状态的转移
【C】状态编码用parameter定义
【D】状态机必须有default
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 组合逻辑和时序逻辑分离 | 正确 | 推荐设计风格 |
B | 用 case 语句描述状态转移 | 正确 | 标准实现方式 |
C | 状态编码用 parameter 定义 | 正确 | 提高可读性 |
D | 状态机必须有 default | 错误 | 完全覆盖时可省略 |
正确答案:A, B, C
8. 如果功能覆盖率没有达到100%的话,可以采取的措施有()
【A】分析是否进行组合的项太多,导致功能覆盖率不高,适当减少组合项
【B】适当提高属性值的采样频率,对覆盖率报告中的漏洞进行覆盖
【C】检查激励产生机制,采用一些必要的约束,继续进行仿真
【D】再做一些定向测试,直接命中覆盖率报告中的漏洞
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 减少组合项 | 错误 | 可能掩盖真实漏洞 |
B | 提高采样频率 | 错误 | 采样频率不影响覆盖率本质 |
C | 检查激励机制 | 正确 | 修正激励生成逻辑 |
D | 定向测试补漏洞 | 正确 | 直接针对未覆盖点 |
正确答案:C, D
9. 对于双触发器异步处理电路说法正确的是()
【A】对任何单bit信号都可以用此电路处理
【B】各个寄存器之间不能有组合逻辑
【C】需要考虑两个时钟的频率与信号的宽度
【D】无法绝对避免亚稳态的产生
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 适用于任何单 bit 信号 | 错误 | 需满足信号宽度 > 时钟周期 |
B | 寄存器间无组合逻辑 | 正确 | 避免增加亚稳态风险 |
C | 需考虑时钟频率与信号宽度 | 正确 | 关键设计约束 |
D | 无法绝对避免亚稳态 | 正确 | 只能降低概率 |
正确答案:B, C, D
10. 影响CMOS电路静态功耗的因素有哪些?()
【A】供电电压
【B】工作频率
【C】工艺
【D】温度
解析
选项 | 描述 | 正误 | 依据 |
---|---|---|---|
A | 供电电压 | 正确 | 静态功耗与电压正相关 |
B | 工作频率 | 错误 | 仅影响动态功耗 |
C | 工艺 | 正确 | 工艺节点影响漏电流 |
D | 温度 | 正确 | 温度升高增加漏电流 |
正确答案:A, C, D