澜起科技数字验证笔试
时间.8.11
简答题(共11题)
1.[简答题]Please provide Linux shell command(s)to find all files which contains string "Montage" or "montage" in the/home/user.(5 points)
find /home/user -regex ".*[mM]ontage.*"
2.[简答题]What's the Non_Blocking assignment(b <= a)and Blocking assignment(b = a)?(5points)
阻塞赋值与非阻塞赋值区别:b = a : a的值立即赋值给b,b的值是立即更新的,通常用于组合逻辑赋值。b <= a : 等号右端a的值不会立即赋值给b,在块结束后才完成赋值操作,通常用于时序逻辑赋值。
3.[简答题]Please use verilog write an 8bits asynchronous reset D flip-flop(8bits低有效异步复位的D触发器).(5points)
module f8(input clk,input rst_n,input [7:0] data,output reg [7:0] data_r);always @(posedge clk or negedge rst_n)beginif(!rst_n)data_r <= 1'b0;else data_r <= data;endendmodule
(Ps:知识点 同步复位的触发器面积更小,因为rst可以直接接到D上,异步复位需要触发器具有clr引脚,面积更大,想起这个事了)
4.[简答题]What's the difference between "task" and "function" in Verilog?(5points)
task 可以调用task 和function,function不行。task 可以延时,执行过程可以消耗时间,function是立即返回的。function至少要有一个输入变量,task可以没有或者多个输入变量。task function在sv里面是可以返回的,verilog不行。
// Code your testbench here// or browse Examplesmodule tb;task delay();#1;return;#5;endtaskinitial begindelay();$display("tb now end at %t", $time);$finish;endendmodule// -------------------------// output: tb now end at 1
5.[简答题]Please use two methods to generate a 100MHz Clk signal in testbench,you can use verilog or system verilog;(5 points)
// -------------- method1---------------module tb;reg clk;inital beginclk <= 1'b0;#5clk <= 1'b1;forever clk <= ~clk;endendmodule// -------------- method 2-------------module tb;reg clk;initial clk <= 0;always #(10/2) clk <= ~clk;endmodule// --------------- method 3 ------------module tb;reg clk;always beginclk <= 1'b0;#5clk <= 1'b1;#5endendmodule
6.[简答题]What's the setup time and hold time in Synchronous circuit,and how to resolve if setup time was not met?(10 points)
建立时间:时钟上升/下降沿来临之前,信号需要保持稳定的时间保持时间:时钟上升/下降沿来临之后,信号需要保持稳定的时间如何解决setup违例:插入寄存器增大时钟周期降低Tcq降低Tsetup
7.[简答题]请用下面CMOS组成反相器,与非门,或非门。(10 points)
左边N沟道增强型MOS管,右边P沟道增强型MOS管
与非门:AB = 00 时, NMOS导通,输出0;其他时候两个PMOS至少有一个导通。
对应的或非门就是结构反过来,AB=00的时候,PMOS导通,输出1;其他时刻NMOS至少有一个导通,输出0.
8.[简答题]What's the result of these function print A and print B?(10 points)
class BasePacket;int A=1;int B=2;function void printA;$display ("BasePocket::A is %0d", A);endfunctionvirtual function void printB; $display ("BasePacket::B is %0d",B);endfunction endclassclass My_Pocket extends BasePucket; int A=3;int B=4;function void printA;$display("My_Pocket::A is %0d", A);endfunction virtual function void printB;$display("My_Pocket::B is %0d",B);endfunction endclass BasePacket P1;My_Packet P2;initial beginP1=new();P2=new();P1.printB;P1=P2;P1.printA;P1.printB;P2.printA;P2.printB;end/* ------------------- output -------------1. BasePacket::B is 22. BasePocket::A is 13. BasePocket::A is 4 子类对象赋值给父类句柄,父类下的printB是virtual,于是向子类查找函数。父类句柄可以访问子类方法,但是不能访问子类成员变量。4. BasePacket::B is 35. BasePacket::B is 4----------------------------------------*/
9.[简答题]Please use any a programming language to locate the largest element in the matrix(矩阵)and print largest value,row and column of this largest value.(10 Points)
Matrix: matrix 3={{0,1,2,3},
{8,7,6,5}
{-5,9,-3,4}
#!/usr/bin/python3matrix = [[0,1,2,3], [8,7,6,5], [-5,9,-3,4]]max_value = 0max_row = 0max_col = 0for i in range(len(matrix)):for j in range(len(matrix[0])):if(max_value < matrix[i][j]):max_value = matrix[i][j]max_row = imax_col = jprint(max_value, max_row, max_col)#输出是9,2,1 行列要不要加1没细说 可以加上
10.[简答题]Please translate below c code to Assembly language(can use pseudo code)(15 Points)
C code: for(int i=0;i<3;i++) {a+=i*3;}
Assembly code:
Line1: mv S0 0 // iLine2: mv S1 1 // 1 Line3: mv S2 3 // 3Line3: mul S0 S1 S3 // cal i*3Line4: add S5 S3 S5 // cal a+=i*3Line5: add S0 S1 S0 // cal i++Line6: sub S2 S0 S4 // cal 3 - iLine7: bneqz S4 #3 // jump to line3Initial values in register $0-$5:Reg$1$2$3$4$5ValueemptyemptyemptyemptyaAssembly command example to use;bneqz $1,#5(branch to line s if $1 !=0)sub $1,$2, $3($3=$1-$2)mv $0,0 (store value 0 to $0)add $1, $2, $3 ($3=$1+$2)mul $1, $2, $3 ($3=$1*$2)
11.[简答题]请用verilog或VHDL设计一个模块,完成有符号数除法,被除数为16-bit整数,除数为16-bi整数,输出16-bit商和16-bit余数,所有输入输出都是有符号数(最高位1代表负数,0代表正数).(20 points
没写... 有空补上