数字IC设计笔试题汇总(二)

数字IC设计笔试题汇总(二)


快秋招了,这篇博客记录了一些最近看见的数字IC设计相关的笔试题,仅供参考


1. 在边沿敏感的时序逻辑代码中使用(A)赋值,会导致综合前与综合后仿真结果不一致。

A . 阻塞
B. 非阻塞
时序逻辑中一般使用非阻塞式赋值,组合逻辑中一般用阻塞式赋值;

2. 下列表达式中正确的是(D)

A. 8’b101010 & 8’b010101 = 1’b0
B. 8’b101010 && 8’b010101 = 1’b0
C. 8’b101010 | 8’b010101 = 1’b1
D. 8’b101010 || 8’b010101 = 1’b1

& 和 | 代表按位与,或运算, && 和 || 代表逻辑与,或运算。 两个8bit数按位与,或运算结果为8位数;非0数为逻辑真,因此D选项正确;

3. Intel FPGA器件内部的最小逻辑单元是(A),一个逻辑单元主要是由(A),(A)组成;

A. LE, LUT, 可编程寄存器;
B. LUT, LE, 可编程寄存器;
C. LC, LUT, 互连资源;
D. LUT, LC, 互连资源;

逻辑单元在Altera(Intel)中叫作(Logic Element,LE)LE,在XILNX中叫作(Logic cell, LC) LC。 一个逻辑单元主要由以下部件组成:一个四输入的查询表(LookUp Table,LUT),一个可编程的寄存器。 互连资源应该是说的互连线资源(Interconnect),布线资源连通 FPGA 内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度,FPGA 芯片内部有着丰富的布线资源,这部分应该是属于逻辑单元间的连接通信资源。FPGA内部资源的介绍参考文末的参考资料【1】.

4. 在EDA工具中,能将硬件描述语言转化为硬件电路的重要工具软件是(D)

A. 适配器
B. 仿真器
C. 下载器
D. 综合器
适配器用于不同接口间的适配,比如安卓充电器给苹果手机充电,就需要一个适配器; 下载器,顾名思义,就是将代码最终输送到器件中(FPGA)的器件; 仿真器用于进行功能的仿真,以便调试代码; 在数字IC中,综合器为Design Compiler,也j就是常说的DC, 负责将硬件描述语言转化为硬件电路。

5.对’timescale 1ns/10ps描述正确的是(AC)

A. 仿真时间精度为10ps;
B. 仿真时间精度为1ns;
C. 仿真时延单位为1ns;
D. 仿真时延单位为10ps;
此时testbench测试脚本中,#1就代表此处延时1ns,误差在10ps以内

6.verlog中,以下说法正确的是(A)

A. 1byte = 8bit;
B. 1dword = 2bytes;
C. 1word = 2bytes;
D. 1qword = 2bytes;

1 qword (quadra word, 4字) = 2 dword(double word,双字) = 4word(字)= 8B(byte, 字节)= 64b(bit, 比特位);

7.以下说法正确的是(C,D)

A. function, task可以互相调用
B. function中可以有时间控制语句
C. task中可以有时间控制语句
D. task中可以没有输入输出端口,也可以有

function的定义和调用如下所示(以简单加法器为例):

module top_sum(
input [2 : 0] a,
input [2 : 0] b,
output [3 : 0] c);

function [3 : 0]sum;
    input [2 : 0] a;
    input [2 : 0] b;
begin
    sum = a + b;
end
endfunction

assign c = sum(a,b);

endmodule

task的定义和调用如下所示:

module top_sum(
input [2 : 0] a,
input [2 : 0] b,
output [3 : 0] c); 

task sum;   
    input  [3:0] a_tmp, b_tmp;      
    output [4:0] sum_out;          
    sum_out = a_tmp + b_tmp;
endtask

sum(a, b, c);

endmodule

task和function的区别在于(1) function只能与主模块共用时延单位,而task可以自定义时延单位, (2)function不能调用task,而task可以调用其他task和function,(3) function至少要有一个输入变量,而task可以没有。(4)function有返回值,而task无返回值 ; 需要注意的是,function和task都只能描述组合逻辑,task若出现不可综合语句(如时延语句),则不可综合,function中不能出现延时语句 关于这两种语句的详细介绍参考文末的参考资料【2】.

8.verilog中case语句和if–else–语句的区别?

if语句的判断是有优先级的,若满足前面的判断条件,则后面的就不判断了,而case语句中各个条件是同时判断的。这两种语句的区别在之前的博客中有过详细介绍,参考文末参考资料【3】

9. verilog中的fork join语句是怎么执行的;如何在增加语句的基础上改成顺序执行?

fork -- join之间的各个语句并行执行,可以通过增加时延语句来改成顺序执行:比如:

initial
begin

fork
#10 sum_tmp_1 = a + b;
#20 sum_tmp_2 = sum_tmp_1 + c;
#30 sum = sum_tmp_2 + d;
join

end

虽然这三个语句是并行执行的,但由于时延的存在,可以被看作 先执行sum_tmp_1 = a + b;和sum_tmp_2 = sum_tmp_1 + c;再执行sum = sum_tmp_2 + d, 通过增加时延语句的方式将fork join改成顺序执行

10. 在设计状态机时, one-hot code和binary code的优缺点?

独热码(one-hot code)是只有一个数字为1,比如0001,0010,0100,1000这种编码方式,如果有4个状态,就需要4bit数来表示状态;
二进制编码(binary code)就是00,01, 10,11这种正常递增的编码方式,如果有4个状态,就需要2bit数来表示状态;
因此,独热码浪费资源, 而二进制编码在状态转换时,容易出现亚稳态,比如01跳转到10时,可能出现01 -> 11 -> 10 ,有很短的时间出现11这个状态,从而导致电路出现亚稳态;而独热码可以避免这种情况,独热码减少了编码的复杂度,在一定程度上提高了系统的速度.

参考资料

【1】CSDN博客:FPGA内部硬件资源介绍
【2】CSDN博客:Verilog中task/function说明语句
【3】CSDN博客:数字IC设计经验整理(一)
【4】CSDN博客:verilog中的fork…join用法

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值