IC笔试有:JL科技、TR半导体、HZW、MX半导体、RSKX、TCL

部分题目暂时还是做不出来,先好好复习一遍,会有柳暗花明的时候的。


目录

RY10.11

TCL10.9

位宽定义正确的是

逻辑与或和按位与或的题目

运算符优先级的题目

代码覆盖率有哪些的题目

使用fifo实现monitor和scoreboard之间的通信,当monitor占据主动地位,scoreboard被动接收时,下列说法不正确的?

有关sequence说法不正确的?

linux修改权限

关于寄存器级流水线设计描述正确的是?(多线)

简述一下带rsp的master vip的流程(主观题)

时序违例有哪几种,解决办法是什么?(主观题)

简述TLM定义,tlm端口分为几类,简述其之间通常的连接使用和区别,ap分为几个类型,写出端口连接的实例

RSKX10.7

采用shift register的方式实现fifo的设计,1:输出的数据信号pop直接从reg输出,不需要pointer选择对应的entry,同时将剩余有效信息移位,保证下个clk开始等待输出的信息一定位于顶端,2:输入时会自动输入至最接近output口的尚未占用的reg中

design a module for finding the position of the leftmost 1'b1 or 1'b0 from a given input. output position counting from the left if targer exists, if not, output 0.

XD科技9.24

编写一个program,输入是不确定长度的动态数组,功能是打印输入数组的所有元素;并编写一个module,在module中调用该program时运行打印的结果为1、2、3

一个RTL如图所示,正常工作时,复位后需要先通过AXI-lite总线配置B模块寄存器,再通过APB总线配置A模块寄存器,最后A模块接收输入数据,最终由B模块处理后输出。请通过画图或文字描述,不需要代码,设计UVM验证平台,对该BLOCK进行验证,重点描述如何满足寄存器配置与输入数据的激励先后顺序。

画出APB4总线接口写操作波形图(包含pready信号),并编写assertion,检测psel与penable信号同时为1时下一个clk的penable应该为0

在tb中至少通过两种方法产生50MHz频率的时钟clk1,并通过clk1生成另一个时钟为10MHz频率的clk2,要求clk1与clk2为同步时钟,自拟timescale,没有的话不得分。

有一个BLOCK包含ABC三个IP如图,加入对B模块进行IP级验证,请问如果要求验证代码覆盖率为100%,项目即将结束时B模块代码覆盖率只有90%,最后阶段如何有效提高代码覆盖率?如何保证B模块已经验证充分?代码和功能覆盖率都是100%的话能否保证该模块验证充分?

自定义一个UVM component,并将该comp加入UVM平台中,该comp可以实现对全局每个phase的超时进行单独控制,例如run_phase的超时为10ms,mainphase的超时为5ms,任意phase超时后fatal退出,请写出关键代码

一个dut的输入是din_a和din_b,输出是dout,编写接口和class,通过接口将dut和class连接;class通过随机随机的方式产生din_a和din_b,要求每次随机的值都和历史值不一致,且每次随机时a!=b;同时在class内编写覆盖组,在dout取值范围内分四个bin统计dout的覆盖率

代码输出题

停止线程disable

MX半导体9.22

以下位宽定义正确的是:

verilog变量名合法的是:

下列表达式中正确的是?

下列运算符优先级由高到低的是?

两个数组占用的word是多少个?

SV中用于打乱数组排序的是

SV中声明队列的方式

verilog中以下可用于批量实例化同类型可综合block的是

关于类的构造不正确的是

不属于OOP特性的是

代码输出:句柄和对象的问题

代码输出

SV中默认的成员属性是?

等价语句 x==0 -> y==0

约束

约束生效的条件?​编辑

fork...join的三种形式,哪一种表示等待至少一个进程完成然后再执行后续的语句

下面不属于代码覆盖率的是?

以下不是uvm_component的是:env?seq?sequencer?configure_phase?

以下phase需要消耗仿真时间的是:report_phase,shutdown_phase,main_phase,configure_phase

Verilog中哪种变量定义合法:input [3:-2] b; output reg[0:0] y; input [3:0] signal [7:0]; output reg [31:0] 3_d;

以下关于寄存器级流水线pipeline设计描述正确的是?

添加断言SVA的作用是?

任务和函数的调用关系

简述队列、动态数组、关联数组的声明、特征、通常使用的场景、仿真时内存使用有何不同?

fork join有哪几种形式,画出流程示意图,如何关闭?给出代码示例?

请列出三种以上的随机函数并简要说明,编码实现随机约束一个变量,在大于2小于等于255的集合中,且30%为5~16,40%为115~200,10%为125,10%为100,变量在0~17,7,8,10,115~255之间选择,采用内联约束的形式实现,需要带$形式

HZW电子笔试9.21

解释触发器和锁存器的差别,写出带同步复位功能的D触发器的Verilog代码

在做同步复位之前,先来看异步复位D触发器

基本逻辑门实现的二选一MUX电路图,用此实现4选1MUX,画图

用最少数目的D触发器设计三分频电路,写出设计思路并画出原理图

状态机实现序列检测器的功能,检测串行输入序列1011时输出高电平,画出状态转移图

画出数字芯片的设计流程图,各个步骤常用的EDA工具名称

JL笔试9.7

有符号数和无符号数的加减

画出同步时序逻辑电路的结构示意图,阐述建立时间保持时间、时钟抖动的含义,以及对前两个时间的影响?

请阐述在数字电路中什么是亚稳态,危害,如何防止?

一个理想ADC的采样率为100kHz,ADC输入信号为sin1kHz,对ADC输出结果做频谱分析会发现信号出现在?kHz位置;当输入信号为sin60kHz时,对ADC输出结果做频谱分析会发现信号出现在?kHz的位置。请阐述采样定理

异步总线同步电路:输入clka,clkb,rst_i,en_i,data_i,输出en_o,data_o;clka频率1MHz,clkb频率10MHz,rst_i与两个clk都是异步,当rst为0时复位整个电路;en_i和data_i为clka信号,1位和32位,当en_i为1,data_i有效,en_i不会连续为1;请把en_i,data_i正确传递到clkb下的en_o,data_o

用C语言设计一个排列函数,把输入输出int a[10]={1~9乱序}按由大到小排列输出;再设计一个函数计算数组a的方差

TR半导体笔试9.18(感谢信)

数据类型:有符号和无符号分别有哪些?

枚举类型?

接口?

代码覆盖率有哪些?

program可以定义什么?

program和module的区别?

队列

等式运算符

A和B都是3’b1x0,assign了c=(A==B)和d=(A===B),c和d分别是多少?

数据类型和数组题目

什么是可综合的?

phase机制的build_phase

function和task哪一个耗时?

timescale 10ns/100ps

需要new创建的数组?

线程同步的方法有哪些?

将字符串a转换成十进制整数?

用任意脚本去除字符串前后的空格?

linux修改tauren.pl文件的属性为不可写、可读、可执行

linux查找当前目录及其子目录下所有后缀为sv的文件

脚本实现矩阵转置

有个猫狗狼的题,经过子父类等转换问最后的输出结果是怎么样的?

线程同步调度问题:定义5个任务a-e,a执行后同时执行b和c;d必须在b完成后执行;e必须在b和c都完成后才执行;f必须在d和e都完成后执行?

main phase和run phase的关系?


RY10.11

看不懂,题目全部是嵌入式和计算机的,一共几十道

题目写的:芯片与器件设计工程师-芯片开发

TCL10.9

其实也是MX半导体,有些题目和之前现场做的一样。ctrl+F搜寻关键字,很多答案下面已经有,没有的就是还不会做的

位宽定义正确的是

逻辑与或和按位与或的题目

看书

运算符优先级的题目

背图

代码覆盖率有哪些的题目

什么是代码覆盖率? - 知乎

使用fifo实现monitor和scoreboard之间的通信,当monitor占据主动地位,scoreboard被动接收时,下列说法不正确的?

A该FIFO本质上是一块缓存加两个imp

Bscoreboard与fifo连接时,scoreboard使用get_port端口

C使用fifo连接后sb需要定义write函数

Dmonitor与fifo连接时monitor使用ap端口

有关sequence说法不正确的?

A uvm支持统一sequencer同时启动多个seq

B 使用uvm_do宏产生的trans优先级默认为1

C 通过lock可以使seq在相应期间独占sequencer

D grab申请使用sequencer的请求优先级高于lock

linux修改权限

三个数字依次代表owner,group,other

关于寄存器级流水线设计描述正确的是?(多线)

pipeline只是提高系统的吞吐量,不能改善单个任务的latency

实际电路是在组合逻辑中插入register,分割组合逻辑,实现pipeline

通过插入pipeline单个任务的执行时间会变短

在分割组合逻辑时应使任务最终时长总和最短,而非使分割后的每段任务处理时间尽量相同

问了大神,说是选BD,关于流水线没查过。

简述一下带rsp的master vip的流程(主观题)

不知道要表达的是什么,写了apb的driver工作原理

时序违例有哪几种,解决办法是什么?(主观题)

时序违例的原因及其解决办法_耐心的小黑的博客-CSDN博客_时序违例

FPGA/数字IC秋招笔试面试020——时序违例及解决办法【setup】【hold】(2022届) - 知乎

简述TLM定义,tlm端口分为几类,简述其之间通常的连接使用和区别,ap分为几个类型,写出端口连接的实例

见mcdf中的apb_master_driver,monitor中有例化,agent中有连接

RSKX10.7

5选择题+2编程题,选择题是英文题目,也不算太难,就没记录了,主要是两道编程。

采用shift register的方式实现fifo的设计,1:输出的数据信号pop直接从reg输出,不需要pointer选择对应的entry,同时将剩余有效信息移位,保证下个clk开始等待输出的信息一定位于顶端,2:输入时会自动输入至最接近output口的尚未占用的reg中

design a module for finding the position of the leftmost 1'b1 or 1'b0 from a given input. output position counting from the left if targer exists, if not, output 0.

例如input=4'b0100, target=1'b1, then exists=1'b1, pos=1.

do not use fixed data width( ie. use DWIDTH)

XD科技9.24

一个钟11道大题,是骡子是马一看便知道,基本无局。

编写一个program,输入是不确定长度的动态数组,功能是打印输入数组的所有元素;并编写一个module,在module中调用该program时运行打印的结果为1、2、3

一个RTL如图所示,正常工作时,复位后需要先通过AXI-lite总线配置B模块寄存器,再通过APB总线配置A模块寄存器,最后A模块接收输入数据,最终由B模块处理后输出。请通过画图或文字描述,不需要代码,设计UVM验证平台,对该BLOCK进行验证,重点描述如何满足寄存器配置与输入数据的激励先后顺序。

画出APB4总线接口写操作波形图(包含pready信号),并编写assertion,检测psel与penable信号同时为1时下一个clk的penable应该为0

在tb中至少通过两种方法产生50MHz频率的时钟clk1,并通过clk1生成另一个时钟为10MHz频率的clk2,要求clk1与clk2为同步时钟,自拟timescale,没有的话不得分。

有一个BLOCK包含ABC三个IP如图,加入对B模块进行IP级验证,请问如果要求验证代码覆盖率为100%,项目即将结束时B模块代码覆盖率只有90%,最后阶段如何有效提高代码覆盖率?如何保证B模块已经验证充分?代码和功能覆盖率都是100%的话能否保证该模块验证充分?

自定义一个UVM component,并将该comp加入UVM平台中,该comp可以实现对全局每个phase的超时进行单独控制,例如run_phase的超时为10ms,mainphase的超时为5ms,任意phase超时后fatal退出,请写出关键代码

一个dut的输入是din_a和din_b,输出是dout,编写接口和class,通过接口将dut和class连接;class通过随机随机的方式产生din_a和din_b,要求每次随机的值都和历史值不一致,且每次随机时a!=b;同时在class内编写覆盖组,在dout取值范围内分四个bin统计dout的覆盖率

代码输出题

module test;
intital begin
main();
endtask main();
fork
#5 $display($time,"T1");
#25 $display($time,"T2");
join_any
dev_state();
$display($time, "after task call");
#100 $finish;
endtasktask dev_state();
fork
#5 $display($time,"T3");
#10 $display($time,"T4");
join_any
disable fork;
endtaskendmodule

结果是:

5 T1

10 T3

10 after task call

110 结束

分析:首先是执行任务main,第一个fork_any在5打印了T1,然后转而执行dev_state,在5+5=10打印T3,由于也是join_any,马上执行disable fork,由于dev_state是main的fork的子线程,disable没有指定具体名字关闭的是main的fork,所以打印after后#100就结束仿真了。

停止线程disable

使用fork join_any加上disable可以创建对超时的观察;

disable可以指定线程的名字来停止指定的fork

MX半导体9.22

以下位宽定义正确的是:

2'h34

verilog变量名合法的是:

3qspi;_$ack;check@;spi_

标识符可由字母、数字、下划线和 $ 符号构成;但第一个字符必须是字母或下划线,不能是数字或 $ 符号

所以选B和D?

下列表达式中正确的是?

4'b1010 && 4'b0101=1'b1

4'b1010 & 4'b0101=1'b1

4'b1010 || 4'b0101=1'b0

4'b1010 | 4'b0101=1'b0

逻辑操作符和位操作符的区别,位操作符是按位操作的,每一位都要运算一次。

A正确。C结果为1。B和D的结果应该是4位

Verilog操作符(逻辑操作符,位操作符,递减操作符Reduction Operators),异或运算_Oh_my_God_L_C的博客-CSDN博客

下列运算符优先级由高到低的是?

! / & | ?

/ ~ ^ & ||

~ && ^ / &

* + || & ^

所以选A,背图咯。

两个数组占用的word是多少个?

bit [7:0] a_array [3];
bit [3:0] [7:0] b_array;

a是非合并数组,高纬度3,低维度8。b是合并数组,高维度4,低维度8。

1word=2byte=32bit,b一共32bit占用1个word,32位系统则1word=32bit=4byte

Systemverilog中的组合数组与非组合数组详解_沧月九流的博客-CSDN博客_组合数组和非组合数组

a的答案只有8和6,b的答案只有8和2。不管是16还是32,总有一个不对吧?

a是3*8个byte独立数据,所以占用了3*8/4=6个?

b是合并数组,4个8位写在同一个32bit中,占用2个?

【system verilog】非合并数组、合并数组、混合数组和多维数组的小探讨_尼德兰的喵的博客-CSDN博客_verilog数组拼接

请教我的大神朋友后,1word是32bit,a是4,b是1。

bit应该改成logic,四值的logic要用2位来保存,全部乘2得到8和2

SV中用于打乱数组排序的是

有关数组的方法:

缩减:sum product and or xor

定位:min,max,unique,适用于关联数组

min和max返回的是数组中的最小值和最大值组成的一个队列,unique返回的是数组中唯一值组成的队列,就是排除掉重复的数值,还带排序

定位:find

find with()可以指示SV进行搜索

int d[]='{9,1,8,3,4,4};t=d.find with (itwm>3);
//输出9,8,4,4

排序:reverse反序,升序sort,rsort降序,shuffle乱序(不是disorder)

SV数组的方法——缩减、定位、排序_Bunny9__的博客-CSDN博客_sv 数组

答案是shuffle。

SV中声明队列的方式

int q[];  int q[$];  int q[int];  int q[10];

ystemVerilog队列的声明格式为 data_type queue_name [$]。

答案为B

SystemVerilog队列及数组方法 - 知乎

verilog中以下可用于批量实例化同类型可综合block的是

fork join;do while;foreach;generate

前两个是肯定不可综合的,foreach没查到,答案应该是generate

【Verilog】generate和for循环的一些使用总结(1)_尼德兰的喵的博客-CSDN博客_generate

关于类的构造不正确的是

A不能有形参;B返回类型是void;C函数体中必须有new语句;

不属于OOP特性的是

继承;多态;隐藏;封装

答案是隐藏,OOP三大特性:继承、多态、封装

代码输出:句柄和对象的问题

例化了a,a赋值给b,说明a和b都是指向对象a,选择A

代码输出

class A
function void name();
$display("I am A");
endfunction virtual function void hobby();
$display("study");
endfunctionvirtual function name_hobby();
name();
hobby();
endfunctionendclassclass B extends class A;
function void name()
$display("B");
endfunctionvirtual function void hobby();
$display("playing");
endfunctionvirtual function name_hobby();
name();
hobby();
endfunctionendclassprogram C
A a;
B b;
initial begin
b=new();
a=b;
a.name_hobby();
end
endprogram

子类对象,子类句柄指向父类句柄,父类句柄调用函数仍然是父类

打印的是A+study

SV中默认的成员属性是?

这是关于类的封装问题,一共有三个,protected,public,local

默认是public,父类子类以及外部都可以访问

等价语句 x==0 -> y==0

如果y不等于0,则x不等于0

约束

两个权重分配的符号而已,记清楚就好。

约束生效的条件?

约束块中没有随机变量,A的约束不能生效,要用rand bit a

若变量类型是const,后期也不能改变了

一个表达式中最多只能使用一个关系操作符<、<=、==,B错误

在约束块中只能包含表达式,所以在约束块中不能进行赋值,要用关系运算符为rand赋一个固定的值比如len==42,也可以多个随机变量和函数更复杂的值:len==header.addr_mode*4+payload.size()

用inside产生一个值的集合,用$指定最大或最小值,可以用多个区间比如:b inside{[$:4],[20:$]};

也可以直接对整个随机集合约束的取反!(b inside{[$:4],[20:$]});

这个集合也可以是数组,比如:

rand int f;
int fib[5]=`{1,2,3,5,8};
constraint c_fibonacci {
f inside fib;
}

fork...join的三种形式,哪一种表示等待至少一个进程完成然后再执行后续的语句

这三个图要会画,有笔试考过了。

fork-join是fork后面的三个线程全部执行完毕后才能执行join后面的语句。

fork-join_any是只要完成fork后面的其中一个线程就可以执行join_any后面的语句

fork-join_none是fork和join_none的线程都同时执行

下面不属于代码覆盖率的是?

这个题考了无数次做了无数次,还是没记住

行覆盖率,路径覆盖率,翻转覆盖率,有限状态机覆盖率,各自的意义:

衡量多少行的代码已经被执行过

在穿过代码和表达式的路径中有哪些已经被执行过

哪些单比特变量的值为0或1

状态机中哪些状态和状态转换已经被访问过

以下不是uvm_component的是:env?seq?sequencer?configure_phase?

类库地图必须闭着眼睛画得出来

以下phase需要消耗仿真时间的是:report_phase,shutdown_phase,main_phase,configure_phase

phase机制中有9大phase,其中只有run_phase是任务,可以耗时,run_phase又分成12个小分支phase,称为动态运行phase,包括reset、configure、main、shutdown及其pre、post的phase。

符合条件的是BCD,report_phase是第8个phase,不耗时

Verilog中哪种变量定义合法:input [3:-2] b; output reg[0:0] y; input [3:0] signal [7:0]; output reg [31:0] 3_d;

低位只能是0或1,AB错,这是多选题,那就是选CD?

标识符可由字母、数字、下划线和 $ 符号构成;但第一个字符必须是字母或下划线,不能是数字或 $ 符号,那就D也错了啊。

以下关于寄存器级流水线pipeline设计描述正确的是?

A流水线只是提高系统的吞吐量,不能改善单个任务的latency

B实际电路中是在组合逻辑中插入register,分割组合逻辑,实现pipeline

C通过插入pipeline,单个任务的执行时间会变短

D在分割组合逻辑时,应使任务最终时长总和最短,而非使分割后的每段任务处理时间尽量相同

添加断言SVA的作用是?

A复杂逻辑中添加assertion相当于验证的白盒检查

B部分bug需要累积效应才会暴露,验证环境难以构造足够长时间的用例冲击出来,通过assertion来保证这种问题再第一次发生时便被发现

C关键节点添加assertion有利于提高问题定位的效率

D增加覆盖率检查,保证期望场景被冲击到

任务和函数的调用关系

任务可以调用任务和函数,函数只能调用函数

简述队列、动态数组、关联数组的声明、特征、通常使用的场景、仿真时内存使用有何不同?

fork join有哪几种形式,画出流程示意图,如何关闭?给出代码示例?

请列出三种以上的随机函数并简要说明,编码实现随机约束一个变量,在大于2小于等于255的集合中,且30%为5~16,40%为115~200,10%为125,10%为100,变量在0~17,7,8,10,115~255之间选择,采用内联约束的形式实现,需要带$形式

HZW电子笔试9.21

数电书都没完整看完的我,很惭愧。非常心仪的公司,希望可以侥幸通过笔试。

解释触发器和锁存器的差别,写出带同步复位功能的D触发器的Verilog代码

各自解释:

触发器FFFlip-Flop)是一种对脉冲边沿(即上升沿或者下降沿)敏感的存储电路。随着输入的变化,输出会产生对应的变化。它通常是由至少两个相同的门电路构成的具有反馈性质的组合逻辑电路。应用中为了使触发过程容易控制,而做成由时钟触发控制的时序逻辑电路。

锁存器LATCH:可以把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个 I/O 口既能输出也能输入的问题。锁存器是利用电平控制数据的输入。

差异:

锁存器是一种对脉冲电平(即0或者1)敏感的电路,而触发器是一种对脉冲边沿(即上升沿或者下降沿)敏感的电路。

锁存器对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生,这对于下一级电路是极其危险的。而触发器则不易产生毛刺。

(另一方面要注意,对于Verilog编程时,尽量避免锁存器。当使用case语句和if…else语句时,一定要注意把可能出现的情况都列出来。如case语句需要使用default关键字把剩余的情况包含起来,而使用if语句最好加上else部分,不然容易产生锁存器。)

由触发器延伸到寄存器:

寄存器REG:寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。

寄存器是同步时钟控制,而锁存器是电位信号控制。锁存器一般由电平信号控制,属于电平敏感型。寄存器一般由时钟信号信号控制,属于边沿敏感型。

寄存器的输出端平时不随输入端的变化而变化,只有在时钟有效时才将输入端的数据送输出端(打入寄存器),而锁存器的输出端平时总随输入端变化而变化,只有当锁存器信号到达时,才将输出端的状态锁存起来,使其不再随输入端的变化而变化

在做同步复位之前,先来看异步复位D触发器

核心就是复位信号的下降沿作为@里面的触发事件,不止有clk;

复位信号为0时输出为1,复位信号为1时输出为输入

module dff_async_pre (input data, clk, preset,output q
);parameter UDLY = 1;
reg q;always @ (posedge clk or negedge preset) beginif ( ~preset ) beginq <= #UDLY 1'b1;end else beginq <= #UDLY data;end
endendmodule

同步复位就是触发事件只有clk,和clk同步操作,就叫同步复位

module dff_sync_rst (input data, clk, reset,output q
);parameter UDLY = 1;
reg q;always @ (posedge clk) beginif ( !reset ) beginq <= #UDLY 1'b0;end else beginq <= #UDLY data;end
endendmodule

基本逻辑门实现的二选一MUX电路图,用此实现4选1MUX,画图

以为很简单,其实不容易

verilog语言入门 - 多路选择器 2选1 和4选1_NueyLi的博客-CSDN博客_用二选一选择器做四选一

先看二选一mux,书里内容,惭愧

4选1选择器设计_小白T_T的博客-CSDN博客_4选1数据选择器

用最少数目的D触发器设计三分频电路,写出设计思路并画出原理图

三分频是一开始的手撕代码题目

电力电子转战数字IC的2022516day0——占空比不是0.5的三分频_广工陈奕湘的博客-CSDN博客

电力电子转战数字IC20220517day1——还是1/3的三分频_广工陈奕湘的博客-CSDN博客

电力电子转战数字IC20220518day2——50%的三分频_广工陈奕湘的博客-CSDN博客

电力电子转战数字IC20220519day3——状态机1/3三分频_广工陈奕湘的博客-CSDN博客

思路:尽量少用非阻塞赋值,非阻塞赋值会综合成触发器

状态机实现序列检测器的功能,检测串行输入序列1011时输出高电平,画出状态转移图

电力电子转战数字IC20220523day7——序列检测器_广工陈奕湘的博客-CSDN博客

序列检测器最重要的是状态转移图,想清楚每个状态下的两种情况会直接跳到哪一个状态。

每个状态都考虑接下来的序列,会不会出现1011中的某个连续序列


module xuliejiance (clk,rst,a,result);input clk,rst,a;
output result;
reg [2:0] state,next_state;
parameter idle=3'b000,A=3'b001,B=3'b010,C=3'b011,D=3'b100;always @(posedge clk or negedge rst)
begin
if(!rst)state<=idle;
else state<=next_state;
endalways @(*)
begincase(state)idle: nextstate= a? A:idle;A: next_state=  !a? B:A;B: next_state=   a? C:idle;C: next_state=   a? D:B;D: next_state=   a? A:B;default state<=idle;endcase
endassign result= state==D? 1:0;
endmodule

画出数字芯片的设计流程图,各个步骤常用的EDA工具名称

数字IC设计的全流程 - 你好24h - 博客园

确定项目需求:制定芯片具体指标;

前端设计:RTL设计,用HDL对电路进行描述,基础是寄存器之间的传输;功能仿真,验证;逻辑综合,将电路的行为级描述RTL转化成门级描述,将代码翻译成各种实际元器件;STA静态时序分析,套用特定的时序模型,针对特定电路分析是否违反设计者给定的时序限制;DFT。生成nestlist交给后端

后端设计:APR自动布局布线,extrat RC提取延时信息,DRC设计规则检查是否符合芯片制造商的要求。

涉及的EDA工具:

cadence:incisive、genus、innovus、diva/dracula

synopsys:VCS、design、IC Compoler、Hercules

mentor:questasim,calibre

Compiler (DC)


JL笔试9.7

有符号数和无符号数的加减

char a,b; unsigned char c,d;
a=1; c=-1; b=a+c; d=b; //问b和d的十六进制是什么?
a=-1; c=-1; a=a>>1; c=c>>1; b=a+c; d=b; //问b和d的二进制是什么?

C语言中,char和unsigned char比较运算时,有符号数隐式转换成了无符号数,负数的补码被当成无符号数

用16位表示,有符号数a的原码是0000_0001(0001),补码也是;-1的原码是1000_0000_0000_0001,反码是1111_1111_1111_1110,补码是反码加一1111_1111_1111_1111(FFFF),补码相加0001+FFFF=10000,十六进制的原码反码补码都是10000,由于满了?所以b和d都为0。

-1给到a和c,补码是FFFF,分别右移,有符号的a右移1位第一位补1为1111_1111_1111_1111(FFFF),无符号的c右移1位第一位补0为0111_1111_1111_1111(7FFF),两个补码相加为17FFE,如果是8位就7E,多出来的1不用看。7E是补码,原码16进制也是7E,十进制是126

最后,signed char -128~127,unsigned char 0~255,一个char是8位,最后要用8位二进制表示126

画出同步时序逻辑电路的结构示意图,阐述建立时间保持时间、时钟抖动的含义,以及对前两个时间的影响?

时序电路分为同步和异步时序逻辑电路。同步就是只有一个clk,各个记忆元件统一控制。

同步时序逻辑电路分为:moore型(输出仅与存储电路的状态有关)和mealy型(输出不仅和状态有关,还和输入信号有关)

建立时间:在时钟采样沿之前数据必须保持稳定的时间。保持时间:在时钟采样沿之后数据必须保持稳定的时间。

时钟抖动:在特定的节点出现的时钟周期暂时性变化的现象。

对建立时间要求更高了,对保持时间没有影响(只受时钟偏移skew影响)

请阐述在数字电路中什么是亚稳态,危害,如何防止?

这也是一个异步电路同步化的问题。亚稳态是指触发器无法在某个规定的时间段内到达一个可以确认的状态。

一个理想ADC的采样率为100kHz,ADC输入信号为sin1kHz,对ADC输出结果做频谱分析会发现信号出现在?kHz位置;当输入信号为sin60kHz时,对ADC输出结果做频谱分析会发现信号出现在?kHz的位置。请阐述采样定理

采样定理:为了不失真地恢复模拟信号,采样频率应该大于等于模拟信号频谱中最高频率的2倍。

异步总线同步电路:输入clka,clkb,rst_i,en_i,data_i,输出en_o,data_o;clka频率1MHz,clkb频率10MHz,rst_i与两个clk都是异步,当rst为0时复位整个电路;en_i和data_i为clka信号,1位和32位,当en_i为1,data_i有效,en_i不会连续为1;请把en_i,data_i正确传递到clkb下的en_o,data_o

跨时钟域分为单比特和多比特,快到慢和慢到快。

慢到快直接打两拍即可

这里en_i就是单比特,data_i就是多比特。

用C语言设计一个排列函数,把输入输出int a[10]={1~9乱序}按由大到小排列输出;再设计一个函数计算数组a的方差

void BubbleSort(int a[10], int size)
{  int i, j, tmp;  for (i = 0; i < size - 1; i++) {  for (j = 0; j < size - i - 1; j++) {  if (a[j] < a[j+1]) {  tmp = a[j];  a[j] = a[j+1];  a[j+1] = tmp;  }  }  }
}

TR半导体笔试9.18(感谢信)

数据类型:有符号和无符号分别有哪些?

有符号:byte,shortint,int,longint,integer(分别是8,16,32,64,32bit)

无符号:bit,logic,reg,net

枚举类型?

枚举列表中的每个名称都会自动分配数值,默认类型是int,int的缺省值是0,从0开始递增,所以第一个名称不能定义为0以外的数

用typedef定义枚举类型为数据类型,后缀_e

枚举类型可以幅值给非枚举类型,但是反之不行,需要进行转换

转换方法有$cast(转换后,转换前),或者枚举=type’(非枚举)

接口?

必须用非阻塞驱动

在接口中使用modport实现信号分组和指明方向

代码覆盖率有哪些?

  • 行覆盖率
  • 路径覆盖率
  • 翻转覆盖率:比特变量0或1
  • 状态机覆盖率:状态机及其状态

代码覆盖率100%并不代表没有bug

program可以定义什么?

和module区分开来,是软件空间,存放软件验证部分,将验证和设计隔离。

不可以定义always,module,interface,不可以出现实例和program的例化。

可以定义任务、函数、类、initial

对封装验证程序的program采用automatic来定义

消除了验证和设计之间的竞争

program和module的区别?

采用非阻塞赋值对时钟中的信号进行驱动,采用阻塞赋值对本地变量进行赋值

module不能调用program里面的方法,但program可以

program不能例化module,接口,其他program

module可以定义program,program不可以定义module

队列

不能用new函数构建,直接声明即可

声明为q[$]={?,?},常量不需要’

q.insert(插入位置,插入的数或者队列)

q.delete(指定位置的元素,如果为空则删除全部元素)

以上两个操作也可以直接重写q={q[0],j,q[1:$]},q={}

q.push_front(6)在队列前插入6

j=q.pop_back从队列后面拿出数赋给j

q.push_back; q.pop_front

总结:pop为拿出来,push为塞进去,从左到右为从前到后

等式运算符

===对两个操作数进行比较,包括x和z,只有完全一致才返回1,否则返回0.

==则不能比较x和z,有x和z都认为是0

if(A==1’bx) $display(”A”); //这个语句不会执行,因为表达式返回0

A和B都是3’b1x0,assign了c=(A==B)和d=(A===B),c和d分别是多少?

==为0,===为1

数据类型和数组题目

bit [2:0][2:0]a={3'd2,3'd4,3'd5};
bit [2:0] b;
bit [2:0] c;
bit d;
bit [4:0] f;b=a[1]; c=a; d=a[2][0]; f=a;

a是合并数组,由3个3位组成,分别是2,4,5;b是a[1],所以是3‘d4;

c只够存1个数,应该是取低3位,那么第三位是2还是5呢?

假设a是100|011|010|,c是3‘b010也就是3’d2;

d是a的第[2]个3位3’d5的第0位也就是0;

f是5位,合并数组a给到f应该是取低5位11011;

什么是可综合的?

所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,supply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。记这些少数不可以的 有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。

phase机制的build_phase

build是第一个phase,自顶向下,另一个自顶向下的是最后的final phase。

除了run phase是task,其他phase都是函数。

function和task哪一个耗时?

任务和函数的异同:

函数有return返回结果,任务只能通过output、input、ref返回

函数不可耗时,任务可以置入耗时语句:@event,wait,event,#delay

任务只能被任务调用,函数可以被任意方法调用

timescale 10ns/100ps

时间单位是10ns,时间精度是100ps

需要new创建的数组?

动态数组定义int dyn[]; 在initial块中分配空间dyn=new[5];

线程同步的方法有哪些?

mailbox:两个线程之间进行数据通信,通过调用put、get、peek函数获取和发送数据

event:两个线程之间的同步运行,通过事件触发和等待进行两个线程间的运行同步

等待:@(event),wait(event.trigger);触发|->

semaphore:对共用资源的访问,通过key的获取和返回实现一个线程对资源的一次访问,调用put和get函数返回和获取key

将字符串a转换成十进制整数?

ASCII码中,小写a对应的十进制数是97

用任意脚本去除字符串前后的空格?

shell用awk来去除:

[root@localhost ~]# echo ' A B C ' | awk '{gsub(/^\s+|\s+$/, "");print}’

对于可以用scrip()的比如python直接:

‘ A BC ‘.scrip()可以得到’A BC’

linux修改tauren.pl文件的属性为不可写、可读、可执行

利用linux的chmod命令,r读为4,w写为2,x可执行为1,-表示删除

chmod 777 tauren.pl 可写可读可执行,文件名和后缀分别可用*表示所有文件或所有后缀

不可写-4可读2可执行1,总的为-1,

三个用户分别代表文件属主用户、文件所属组用户、其他用户

最后结果为:chmod 333 tauren.pl 一个3也可以

linux查找当前目录及其子目录下所有后缀为sv的文件

find [选项][目录][条件][动作]

find . -type f -name “*.sv”

这里两个条件都是条件,-type<文件类型>,f表示普通文件,d(目录)、l(符号链接)、s(套接字)、b(块模式文件)、c(字符模式文件)或p(命名管道)

-name<模式>查找文件名与给定模式匹配的文件,模式为.sv后缀

脚本实现矩阵转置

用shell

awk '{for(i=1;i<=NF;i++){a[FNR,i]=$i}}END{for(i=1;i<=NF;i++){for(j=1;j<=FNR;j++){printf a[j,i]" "}print ""}}' filename

有个猫狗狼的题,经过子父类等转换问最后的输出结果是怎么样的?

线程同步调度问题:定义5个任务a-e,a执行后同时执行b和c;d必须在b完成后执行;e必须在b和c都完成后才执行;f必须在d和e都完成后执行?

main phase和run phase的关系?

main phase是run phase的12个分支的其中之一,是并行运行的,在run phase中要raise objection和drop objection,如果在这12个分支phase中有raise和drop存在,run phase也不需要去raise就会开始执行,一般不推荐同时使用。

电力电子转战数字IC——我的IC笔试(2022.10.14更新)相关推荐

  1. 电力电子转战数字IC——路科MCDF全览(持续更新)

    经过两次面试后,对MCDF做一次全面的深入总结. 目前进度:硬件部分的node,fifo,寄存器,formatter,MCDF顶层,APB接口,TB接口 软件部分的chnl_pkg,fmt_pkg,a ...

  2. 电力电子转战数字IC——我的IC面试(2022.10.14更新)

    目录 感谢信 HKWS10.14面试 25mins JXC10.13面试 30mins JDSK9.23面试 42mins 快速的自我介绍 介绍一下这个MCDF的项目 你这里写SV搭建的验证环境,和U ...

  3. 电力电子转战数字IC20220727day57——寄存器模型(续)

    rgm的常规方法 关于reg的三个值 mirrored value镜像值:由模型预测给出,即在前门访问时通过观察总线.在后门访问时通过自动预测等方式给出 desired value期望值:先利用rgm ...

  4. 电力电子转战数字IC20220629day35——路科实验2b

    目录 tb3代码改造 tb3代码 tb4改造思路: tb4结构示意图 tb4代码 basic_test burst_test full_test 首先复习一下类的知识点 CSDNhttps://mp. ...

  5. 电力电子转战数字IC20220613day23——江哥nb!

    江哥nb! 今天的头版必须给到江哥,华为树枝江哥,FPGA设计岗,两年工资翻倍,年薪突破50,月薪突破30,向江哥学习! 想做江哥的水花兄弟,差个11号球衣  -------------------- ...

  6. 电力电子转战数字IC20220819day64——uvm实战1A

    目录 MCDF改造 APB接口 验证环境的改造 实战任务 apb_config apb_master_agent apb_master_driver 1.1实现apb_master_driver的dr ...

  7. 电力电子转战数字IC20220711day45——SV终章

    至此,SV的学习结束,实验4和实验5等回头过来重做,一定要到完全理解为止.SV DAY30 类型转换 分类:静态转换,动态转换 静态转换:在需要转换的表达式前面加上单引号,不会对转换值检查,如果转换失 ...

  8. 数字电位器程控可调电阻IC

    一.前言 数字电位器又叫可编程电阻器,是一种替代传统机械电位器的新型CMOS数字.模拟混合信号处理集成电路,不需要搭建复杂的电路环境即可简单的通过CPU数字通讯实现电路调节,数字电位器也不能完全替代传 ...

  9. 2023常用的10款电力电子系统仿真分析软件推荐

    市场上有许多电子仿真器,那么对于电力电子项目来说,哪种仿真器最好呢?或者因为期望任何软件包在各个方面都是最好的是不合理的,那么用户如何确定哪个软件是项目的最佳选择? PSIM PSIM是一种模块化封装 ...

最新文章

  1. 斩获23项冠军,日均调用破万亿!百度交出年度AI成绩单:语音语言领衔技术突破,国产自研成大趋势...
  2. 每日一皮:用户“这个项目很容易嘛”~
  3. python流程图基本元素-Python初学(十一)
  4. Ghosts for Tea
  5. Spring学习笔记:尝试Lombok简化实体类代码
  6. 019-Spring Boot 日志
  7. css居中的几种方法_css两种常用的不定宽高的水平垂直居中方法,记住它,不再为样式发愁...
  8. [转]cocos2d-x场景切换时内存过高导致crash解决方法
  9. 万能声卡驱动win10_主流最新驱动程序下载地址分享 和垃圾驱动下载软件说再见...
  10. 2022年信息学奥赛介绍
  11. 程序员眼中的中国传统文化-王阳明《传习录》17
  12. 【wordpress】wordpress自己制作主题看这一篇就够了/常用函数/注意事项
  13. 百度网盘怎么用迅雷下载
  14. Eclipse连接Github出现not authorized
  15. Codeforces Round #499 (Div. 2) 1011 C. Fly 二分
  16. 阿里云Centos系统下部署静态前端页面
  17. win10网络重置后,网卡驱动消失且装不上驱动的以及驱动带感叹号的解决办法
  18. 战地2服务器主程序修改,战地2BOT数值怎么更改BOT数值如何更改_BOT数值更改教程_游戏城...
  19. 信号与系统、数字信号处理、滤波、傅里叶变换、数字信号模拟信号采样信号、滤波器零阶保持器
  20. dnf跨几服务器比较稳定,DNF1228跨区了能干嘛 1228跨区问题解决一览

热门文章

  1. linux 计算程序运行时间
  2. 计算机管理如何格式化u盘,如何格式化U盘【图文教程】
  3. 智能未来:聚焦2018世界人工智能大会
  4. Codeforces--896A--The Artful Expedient
  5. 二年级期末计算机基础试题答案,小学二年级语文期末考试卷
  6. 先验概率、后验概率、似然函数概念的区分
  7. 前端网站资源精编!!
  8. Express4.X版本修改默认模板jade为ejs并且试用html为视图模板后缀名
  9. 调试SI4432要点
  10. 第二届SLAM暑期学校和全国技术论坛有感