我是靠谱客的博主 土豪夕阳,最近开发中收集的这篇文章主要介绍笔试 | FPGA和数字IC刷题——Verilog语法类笔试题合集(1),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

汇总了华为海思、乐鑫科技等多家的笔试题中有关Verilog语法部分的题目,涉及位拼接、阻塞赋值与非阻塞赋值、Latch锁存器、量化、运算位扩展、可综合与不可综合、三目运算符(?:)等。

目录

1. 位拼接

2. Latch锁存器

3. 存储器声明

4. ==和===

5. ?:条件运算符(三目运算符)

6. 乘加运算位宽扩展

7. 变量名称定义

8. 数据定义与量化

9. 阻塞赋值与非阻塞赋值

10. 地址编码问题

11. Verilog关键字

12. Verilog可综合与不可综合语句

13. Verilog标识符


1. 位拼接

已知【a=1'b1; b=3'b001;】,那么{a,b}=?

A. 3'b001

B. 3'b101

C. 4'b0011

D. 4'b1001

答案:D

解析:

{}为位拼接运算符,顾名思义:把信号按位拼接起来,左边的在高位。

{}还可以用于复制,比如{3{a}} = 3’b111,等效于{a, a, a}是3个拼接;

2. Latch锁存器

描述组合逻辑时,当if语句不需要有else分支时,不写else分支,可以节省面积。

A. 正确

B. 错误

答案:B

解析:

组合逻辑中,if...else完整可能是综合出选择器;if如果不写else,默认进行保持,此时会综合出【锁存器】,比选择器占用更多的面积。

锁存器的缺点:不利于时序分析,需要更多资源。

3. 存储器声明

reg [255:0] mem [31:0]; 该声明定义了一个位宽32 bit、深度256的memory。

A. 正确

B. 错误

答案:B

解析:

reg [7:0] addr; 表示 8 bit位宽的信号addr;

reg [255:0] mem [31:0]; 表示256位宽、32深度的存储器mem,前面的表示位宽,后面的是深度;

4. ==和===

如果A和B是两个3bit的变量:A=3'b1X0,B=3'b1X0,那么【A == B】和【A === B】的结果分别是?

A. 1,0

B. x,1

C. 0,x

D. 0,1

答案:B

解析:

==,判断相等,但是只能比较0、1,一旦出现X和Z结果就为X;

===,范围更大的判断,能判断0、1、X、Z。

5. ?:条件运算符(三目运算符)

现有表达式expr = cond_expr ? expr1 : expr2,如果cond_expr为X或者Z,expr1=1001,expr2=1010,则expr应为()

A. 1010

B. 10XX

C. 1001

D. 101X

答案:

解析:

  三目运算符?:,expr = cond_expr ? expr1 : expr2

  等效于

  if(cond_expr == 1’b1)

    expr = expr1;

  else

    expr = expr2;

  这里当cond_expr为X或者Z时,不满足if(cond_expr == 1’b1),所以执行else,结果是expr = expr2 = 4’b1010。

6. 乘加运算位宽扩展

假设输入信号X位宽为10 bit,InputA位宽为5 bit,InputB位宽为14 bit,实现Y = X*InputA + InputB功能,并要求不损失精度,那么输出信号Y位宽应不小于()

A. 16 bit

B. 29 bit

C. 15 bit

D. 24 bit

答案:A

解析:

  M bit + N bit的和,位宽为max(M, N) + 1 bit时才能保证结果不溢出且不损失精度,其中max(M, N)表示取M和N中的最大值;

  M bit * N bit的积,位宽为M+N bit时才能保证结果不溢出且不损失精度;

因此,X*InputA要用15 bit,Y要用16 bit。

7. 变量名称定义

编写Verilog HDL程序时,变量的定义不可以与关键词冲突。

A. 正确

B. 错误

答案:A

解析:

变量命名规则:

(1)不能与关键词冲突;

(2)不能以数字开头;

8. 数据定义与量化

表示任意两位无符号十进制数需要()位二进制数

A. 7

B. 8

C. 6

D. 5

答案:A

解析:

最大的两位十进制:99,无符号表示时在0~127范围内,7 bit表示即可。

0000000~1111111:0~127。

如果是有符号数表示的99呢?

要多添加1 bit的符号位,8 bit表示范围:-128 ~ 127

9. 阻塞赋值与非阻塞赋值

下面两段代码中in、q1、q2和q3的初值分别为0、1、2、3,那么经历1个时钟周期后,左侧q3的值和右侧q3的值分别变成了()

always @(posedge clk) begin    q1 = in;    q2 = q1;    q3 = q2;end​​​​​
always @(posedge clk) begin    q1 <= in;    q2 <= q1;    q3 <= q2;end

A. 0,0

B. 0,3

C. 2,0

D. 0,2

答案:D

解析:

=阻塞赋值,<=非阻塞赋值;

阻塞赋值:当前语句的赋值会阻塞后面赋值,后面的必须等当前语句赋值完成后再执行,所以先执行q1 = in = 0,此时q1已经变为0;再执行q2 = q1 = 0,q2也变为了0;最后q3 = q2 = 0,q3也变为0,和C语言的赋值类似,顺序执行;

非阻塞赋值:当前语句的赋值不会阻塞下面语句的赋值,当在begin...end块中时,块内的<=语句在块结束时一起更新赋值,所以更新时完成的是q1 = 0,,q2 = 1,q3 = 2;

10. 地址编码问题

十六路数据选择器的地址输入端至少需要几根线()

A. 2

B. 4

C. 16

D. 8

答案:B

解析:

2^4 = 16。

4根地址线,实现4-16译码器。(3根地址线,3-8译码器)

11. Verilog关键字

下面()不是Verilog循环关键字

A. forever

B. repeat

C. while

D. force

答案:D

解析:

ABC都是循环用的,D是强制赋值用的。

12. Verilog可综合与不可综合语句

可综合的verilog语法包括()

A. assign

B. for

C. always

D. wait

E. time

F. initial

G. generate

答案:ABCG

解析:

A. assign赋值可综合;

B. for循环可综合;

C. always 可综合;

D. wait等待,不可综合,一般用于Testbench中调试;

E. time时间类型的变量,不可综合;

F. initial赋初值,不可综合,一般Testbench中赋初值;

G. generate可综合,generate for时必须把循环变量定义为genvar类型,for后面的begin必须用冒号:后起名字;

13. Verilog标识符

在verilog中,下面哪个标识符是非法的

A. IsErr

B. ERR

C. 0_is_err

D. Error

答案:C

解析:

不能以数字开头,不能与关键字冲突。

最后

以上就是土豪夕阳为你收集整理的笔试 | FPGA和数字IC刷题——Verilog语法类笔试题合集(1)的全部内容,希望文章能够帮你解决笔试 | FPGA和数字IC刷题——Verilog语法类笔试题合集(1)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部