【开卷】第1期(下):乐鑫领跑者数字IC笔试题(含答案)

【单选题 4’x15=60’

1.下列verilog语句,哪个不能综合?

A.

wire [3:0] in;

reg out;

always @(*) begin

casez (in)

4'b1???:out=1'b1;

4'b01??:out=1'b0;

4'b00??:out=1'b1;

default:out=1'b0;

endcase

end

B.

wire [7:0] a, b;

reg [7:0] c;

integer i;

always@ (*) begin

for (i=0; i<8; i=i+1) begin

c[i]= a[i] & (|b[7: 7-i]);

end

end

C.

wire [31:0] in;

wire [1 :0] sel;

wire [7 :0] out;

assign out = in[8*sel+:8] ;

D.

wire [7:0] in_1in_2;

reg [7:0] out;

integer i;

always@ (posedge clk) begin

for (i=0; i<8; i=i+1) begin

out[i]<=in_1[i]^in_2[i];

end

end

参考答案:A

解析:本题主要考查应试者对Verilog中不可综合电路的理解与记忆

】:对于casez,也有些综合工具是可以综合的,这种情况下只能用“排除法”了,其他三个显然都是可以综合的嘛,没啥选了,那就只能选它了。



2.执行下面语句后,ab的值为?

reg[7:0]a, b;

initial begin

a=100;

b=200;

#10ns;

a=10;

#10ns;

b<=a;

end

initial begin

#20ns;

b<=50;

end

A. a=10b=8 'hx;

B. a=10b=50;

C. a=10b=无法确定;

D. a=10b=10;

参考答案:D(ModelSim SE-64 10.5 仿出来是D,但是我无法理解!!!)备注:我用VCS跑出来也是D,同样,无法理解

解析:本题主要考查应试者对Verilog TestBench中阻塞赋值和非阻塞赋值的理解。

测试代码:

module tb_led();

reg[7:0]a, b;

initial begin

a=100;

$display ("initial1-1 [%0t] a=0x%0h b=0x%0h", $time, a, b);

b=200;

$display ("initial1-2 [%0t] a=0x%0h b=0x%0h", $time, a, b);

#10;

a=10;

$display ("initial1-3 [%0t] a=0x%0h b=0x%0h", $time, a, b);

#10;

b<=a;

$display ("initial1-4 [%0t] a=0x%0h b=0x%0h", $time, a, b);

#1;

$display ("initial1-5 [%0t] a=0x%0h b=0x%0h", $time, a, b);

end

initial begin

#20;

b<=50;

$display ("initial2-1 [%0t] a=0x%0h b=0x%0h", $time, a, b);

#1;

$display ("initial2-2 [%0t] a=0x%0h b=0x%0h", $time, a, b);

end

endmodule

输出结果:

# initial1-1 [0] a=0x64 b=0xx

# initial1-2 [0] a=0x64 b=0xc8

# initial1-3 [10000] a=0xa b=0xc8

# initial2-1 [20000] a=0xa b=0xc8

# initial1-4 [20000] a=0xa b=0xc8

# initial2-2 [21000] a=0xa b=0xa

# initial1-5 [21000] a=0xa b=0xa



3.数字信号上采样时,一般需要添加什么样的滤波器,完成的功能为?

A.低通,抗周期延拓

B.高通,抗混叠滤波

C.低通,抗混叠滤波

D.高通,抗周期延拓

参考答案:A

解析:本题主要考查应试者对数字信号中上采样和下采样的理解



4.如果AB是两个3bit的变量:A=3'b1x0;B=3'b1x0那么下面两个式子结果分别是?

1A == B

2A === B

A.10

B.x1

C.0x

D.01

参考答案:B

解析:本题主要考查应试者对SystemVerilog中全等于(===)和等于(==)的区别理解



5. 下面哪个不是Verilog循环关键字?

A. forever

B. repeat

C. while

D. force

参考答案:D

解析:本题主要考查应试者对Verilog关键字的理解与记忆。



6. System Verilog中,关于logic类型描述错误的是?

A. logic 初始值为’x’

B. logic可以完全替换wire类型

C. logic可以完全替换reg类型

D. logic类型是四值逻辑

参考答案:B

解析:本题主要考查应试者对SystemVerilog中logic类型的理解与记忆。

B】:logic类型只能有一个驱动,可以使用它来查找表单中的漏洞。如果有多个驱动,例如双向总线,这时候这些信号就要被定义成线网类型(常用wire)。



7. 下面列出的SystemVerilog数据类型中,四值类型的是?

A. int

B. time

C. byte

D. bit

参考答案:B

解析:本题主要考查应试者对SystemVerilog中四值数据类型的理解与记忆。



8. 7bits的自然二进制码 1011110 对应的格雷码为?

A. 1100011

B. 1100010

C. 1110001

D. 1011110

参考答案:C

解析:本题主要考查应试者对二进制码与格雷码之间的转换理解



9. C语言代码中定义了一个全局变量A,在编译器编译之后,A可能会出现在哪个段中?

A. Heap

B. Bss

C. Stack

D. Text

参考答案:B

解析:本题主要考查应试者对C语言内存分配的理解



10. 验证过程中不能作为测试用例通过准则是?

A. RTL代码

B. 协议或标准

C. 验证IP

D. 设计说明

参考答案:A

解析:本题主要考查应试者对数字IC前端验证测试用例的通过准则理解。



11. verilog中,下面哪个标识符是非法的?

A. IsErr

B. ERR

C. 0_is_err

D. Error

参考答案:C

解析:本题主要考查应试者对Verilog语言标识符命名规则的记忆



12. 根据下面的约束,哪一个选项是错误的?

rand bit [7:0] a,b,c,d;

constraint cst_abc {

a inside {[50:100]};

b>=a;

c<a;

c>10;

d<=c;

}

A. c可以取10-30之间的任意值

B. b可以取50-100之间的任意值

C. d可以取0-10之间的任意值

D. a可以取60-66之间的任意值

参考答案:A

解析:本题主要考查应试者对SystemVerilog中约束的理解。

【等效约束】:根据题意,容易写出方便我们理解的等效约束,如下图所示。c是不能取到10的!




13. XY是两个无符号定点小数,X的位宽6bit,最低4bits是小数部分,最高2bits是整数部分;Y的位宽8bit,最低4bits 是小数部分,最高4bis是整数部分;现在需要计算X乘以Y的结果Z,即Z=X"Y,为了保证之的结果不溢出,Z的整数部分和小数部分至少需要多少个bit?

A. Z的整数部分至少7bits,小数部分至少7bits

B. Z的整数部分至少7bits,小数部分至少8bits

C. Z的整数部分至少6bits,小数部分至少9bits

D. Z的整数部分至少6bits,小数部分至少8bits

参考答案:D

解析:本题主要考查应试者对二进制下定点小数乘法运算的理解



14. 写数据时钟频率fa=80MHz,读数据时钟频率fb=50MHz,在突发传输过程中,数据都是连续读写的,每次读写的突发传输长度为100。那么,在不考虑该FIFO内部读写指针跨时钟域同步延时的情况下,该FIFO的最小深度为?

A. 37

B. 59

C. 38

D. 60

参考答案:C

解析:本题主要考查应试者对FIFO最小深度计算的理解



15. RTL设计阶段,降低功耗的常用设计方法是?

A. 降低电路漏电流

B. 门控时钟

C. 多阈值电压

D. 门级电路的功耗优化

参考答案:B

解析:本题主要考查应试者对低功耗设计的理解,但是需要注意本题的前提是RTL设计阶段


【问答题 20’x2=40’


1.题目描述

Verilog写一段代码,实现如下的扰码功能。其中扰码生成器的初始种子X7~X1=7’b1010101,每拍输入、输出和扰码器更新一次。

【注】个人感觉题目给出的扰码器框图有些问题,移位输入的应该是 dinx^7x^4的值,而不是 x^7x^4的值,所以正确的框图表示如下:
解析:本题主要考查应试者的Verilog编程能力以及对通信中常用的加扰器(scrambler)理解

【编程思路】:参考网址

https://blog.csdn.net/ReCclay/article/details/122442371?spm=1001.2014.3001.5501



2.题目描述

按照row-by-row的方式,将模块输入(每个cycle输入1 bit数据,一共32bits)写入Memory中,保证每行每次写入Ncol bits数据,一共写 Nrow次,Memory总大小为 Ncol*Nrow bits

其中 Ncol=4Nrow=8w_ idx=0,1,…,31 时,数据写入Memory后的位置序号如下图所示:


每个写序号w_idx对应一个读序号r_idx r_ idx由如下公式定义:

r_idx = Ncol*w_idx mod Nrow+ floorw_idx/Nrow)(其中,w_idx=0,1,31

r_idx 0~31的顺序,从Memory中读出数据输出。

请用Verilog语言编写代码描述上述写Memory然后读Memory的行为,其中Memory可用寄存器数组来实现。

接口信号如下:

input din,

input din_valid,

input rst_n,

input clk,

output dout,

output dout_valid

解析:本题主要考查应试者的Verilog编程能力以及对Memory读写的理解。

RTL:

module mem_rw(

input   din,

input   din_vld,

input   clk,

input   rst_n,

output  dout,

output  dout_vld

);

parameter NCOL = 4;

parameter NROW = 8;

reg flag_add;

reg [ 1:0]  cnt0     ;

wire        add_cnt0 ;

wire        end_cnt0 ;

reg [2:0]   cnt1     ;

wire        add_cnt1 ;

wire        end_cnt1 ;

reg [3:0]   mem [0:7];

reg [4:0]   ram [31:0];

reg [4:0] w_idx;

wire [4:0] r_idx;

reg [ 1:0]  cnt2     ;

wire        add_cnt2 ;

wire        end_cnt2 ;

reg [ 2:0]  cnt3     ;

wire        add_cnt3 ;

wire        end_cnt3 ;

always @(posedge clk or negedge rst_n) begin

if (rst_n==0) begin

cnt0 <= 0;

end

else if(add_cnt0) begin

if(end_cnt0)

cnt0 <= 0;

else

cnt0 <= cnt0+1 ;

end

end

assign add_cnt0 = din_vld;

assign end_cnt0 = add_cnt0 && cnt0 == (NCOL)-1 ;

always @(posedge clk or negedge rst_n) begin

if (rst_n==0) begin

cnt1 <= 0;

end

else if(add_cnt1) begin

if(end_cnt1)

cnt1 <= 0;

else

cnt1 <= cnt1+1 ;

end

end

assign add_cnt1 = end_cnt0;

assign end_cnt1 = add_cnt1 && cnt1 == (NROW)-1 ;

genvar i;

generate

for(i = 0; i < NROW; i = i + 1 )

begin:mem_initial

always  @(posedge clk or negedge rst_n)

if(rst_n == 0)begin

mem[i] <= 'h0;

end

else if(din_vld)begin

mem[cnt1][cnt0] <= din;

end

end

endgenerate

genvar j;

generate

for(j = 0; j < 32; j = j + 1 )

begin:ram_initial

always  @(posedge clk or negedge rst_n)

if(rst_n == 0)begin

ram[j] <= 'h0;

end

else if(din_vld || add_cnt3)begin

ram[w_idx] <= r_idx;

end

end

endgenerate

//assign w_idx = (cnt1*4) + (cnt0);

always  @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

w_idx <= 0;

end

else if(din_vld) begin

w_idx <= (cnt1*4) + (cnt0);

end

end

assign r_idx = NCOL*(w_idx%NROW) + (w_idx/NROW);

always @(posedge clk or negedge rst_n) begin

if (rst_n==0) begin

cnt2 <= 0;

end

else if(add_cnt2) begin

if(end_cnt2)

cnt2 <= 0;

else

cnt2 <= cnt2+1 ;

end

end

assign add_cnt2 = (flag_add);

assign end_cnt2 = add_cnt2  && cnt2 == (NCOL)-1 ;

always @(posedge clk or negedge rst_n) begin

if (rst_n==0) begin

cnt3 <= 0;

end

else if(add_cnt3) begin

if(end_cnt3)

cnt3 <= 0;

else

cnt3 <= cnt3+1 ;

end

end

assign add_cnt3 = (end_cnt2);

assign end_cnt3 = add_cnt3  && cnt3 == (NROW)-1 ;

always  @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

flag_add <= 0;

end

else if(end_cnt1)begin

flag_add <= 1;

end

else if(end_cnt3)begin

flag_add <= 0;

end

end

wire[2:0] row;

wire[1:0] col;

wire [4:0] index;

wire [4:0] ram_data;

assign index = (cnt3*4) + cnt2;

assign ram_data = ram[index];

assign dout = (add_cnt2)? mem[row][col]:0;

assign dout_vld = add_cnt2;

assign row = ram_data/4;

assign col = ram_data%4;

endmodule

TB:

module mem_tb();

reg   din;

reg   din_vld;

reg   clk;

reg   rst_n;

parameter CYCLE = 10;

initial begin

clk = 1;

forever begin

#CYCLE clk = ~clk;

end

end

initial begin

rst_n = 0;

#(15*CYCLE)

rst_n = 1;

end

initial begin

din = 1;

forever begin

#(2*CYCLE)

din = $random;

end

end

initial begin

din_vld = 0;

#(20*CYCLE)

repeat(32)begin

#(4*CYCLE)

din_vld = 1;

#(2*CYCLE)

din_vld = 0;

end

end

mem_rw mem_inst(

.din    (din    ),

.din_vld(din_vld),

.clk    (clk    ),

.rst_n  (rst_n  )

);

endmodule


觉得有收获,希望帮忙点赞,转发~ 

本文首发于微信公众号【 数字IC打工人】

#笔经##乐鑫##数字IC设计工程师#
数字芯片笔试题 文章被收录于专栏

收录各大芯片公司笔试真题

全部评论
谢楼主分享!
点赞 回复 分享
发布于 2022-02-14 18:11

相关推荐

评论
1
8
分享

创作者周榜

更多
牛客网
牛客企业服务