今日头条
比特大陆笔试题
IC验证 – 华振
1. 请对面向对象编程中多态性(polymorphism)的概念以及多态性对代码可重用的意义进行阐述。
在面向对象编程中一般是这样表述多态性:向不同的对象发送同一条消息(!!!obj.func():是调用了obj的方法func, 又称为向obj发送了一条消息func),不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己 的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。这种多态性使得, 在非必需的情况下我们可以从一个现存的基类里面继承与共享一些变量与子程序得到扩展类。而扩展类只需要有选择性的改 变或增加其部分方法与属性。
2. 列出哪些Verilog语法是不可以综合。
解析:time,defparam,$finish, $monitor, $readmemh, fork,join,initial,delays(#10),UDP,wait,casex,casez,wand,triand,wor,trior,real,disable,event,string
思考题:Verilog中哪些语法是可综合的?
3. 输入信号如下图,请画出组合逻辑输出波形。
F = XYZ+X’Y’Z+X’YZ+XY’Z’
4. (1) 谈谈对OOP中,浅拷贝和深拷贝的区别。
(2) 用一段代码实现如下图class A的浅拷贝(命名为copy)和深拷贝函数(命名为deepcopy)。实现语言为SystemVerilog。
该class的定义是:
class A;
int a;
int b;
C c;
function new();
endfunction;
endclass
其中class C定义为:
class C;
int t;
endclass
解析:(1)如果是对象之间是浅拷贝的话,会将对象的指针(句柄)指向被拷贝类对象的空间,这样两个对象就相当于绑定在一起,当改变某个对象中的变量,其实两个对象中的变量都被改变了,如果要把两个对象进行拆分的话需要重新对该对象进行new操作。而深拷贝时,是对对象中元素的复制,因此不涉及指针转移的问题,当改变某个对象中的属性变量时,对另外一个没有影响。
(2)
function A copy () copy = new(); endfunction |
function A deepcopy () deepcopy = new(); deepcopy.a=a; deepcopy.b=b; deepcopy.c=c.copy(); endfunction |
A a, copy, deepcopy;
a=new();
copy = new a; // shallow copy
deepcopy = new();
deepcopy.copy(a);
5. 请用Verilog实现逻辑功能:当检测到输入序列p中包含“010”时,输出信号a拉高一拍,当检测到输入序列p中包含“101”时,输出信号b拉高一拍。
module (
input clk,
input p,
input reset_n,
output a,
output b
);
reg[2:0] d3;
always @( posedge clk )
if( !reset_n )
d3<=3'b000;
else
d3<={d3[1:0],p};
assign a = (d3==3'b010) ? 1'b1:1'b0;
assign b = (d3==3'b101) ? 1'b1:1'b0;
endmodule
6. 用任何脚本语言计算π,精确到小数位后5位,并予以解释,不得直接调用内部数学函数或接近数学函数获取π值。
解析:有数学公式
Python:
全部0条评论
快来发表一下你的评论吧 !