分享

IC攻城狮求职宝典05 钜泉光电

 芯文苑eecourse 2018-12-28

1.   同步电路(synchronous circuits)和异步电路(asynchronous circuits)的区别?

解析:

同步电路的时钟源是一个,包括通过PLL分频和倍频的时钟,都可以认为是同步时钟电路。

异步电路是的时钟源是不同,时钟的相位和时钟周期,没有关系。

同步电路即电路的状态运转随某个时钟而跳转,所有电路之间利用时钟沿来做同步。而异步电路之间的不受某个时钟沿控制,而是各个电路之间由各种握手信号来完成数据之间的交互与同步。

同步电路相比于异步电路好分析,时序约束简单,同时能够容忍一定的毛刺。但是由于时钟一直处于跳变状态,寄存器的功耗较大。

异步电路相对于同步电路其分析与时序约束更加复杂,但是具有低电源功耗,无时钟偏斜等问题。

异步电路容易产生亚稳态问题,需要在设计是进行特殊的设计处理。比如两级同步,异步FIFO,格雷码等。

思考:可以从多个角度来解答这个问题:1. 基本概念,2电路特性,3.设计方法,4.时序分析

 

 

2.   画出下面RTL code 的逻辑电路图?

module LAGCES(SE, GCK ,CK, E);

input CK, E, SE;

output GCK;

reg clk_gate;

wire temp = SE | E;

wire clk_n = ~CK;

always @ *

if (clk_n == 1) clk_gate = temp;

     else clk_gate = clk_gate;

assign GCK = clk_gate && CK;

endmodule

解析:

生成latch

 

思考题:以上代码会生成锁存器。这在典型的电路设计中,是要避免的。

 

3.   建立时间和保持时间的概念?不考虑时钟偏移(clock skew)和时钟抖动(clock jitter),下图setup timinghold timing应满足的关系?

解析:

建立时间:对于寄存器,数据必须提前于时钟沿带来之前多长时间到来并稳定,才能保证数据的采集不出问题。

保持时间:对于寄存器数据必须在时钟沿之后再继续保持多长时间,才能使得数据的采集不会出问题。

Tcycle-Tpd-Tcq-Tsetup+Tcd>0

Tpd+Tcq-Tcd-Thold>0

 

4.    解释下面代码:

typedef volatile unsigned long *RP;

#define do(reg,data) *(RP)(reg) = data

 

解析:C语言的基本语法

 

5.    根据代码逻辑画出输出波形。

module(output out, input clk, input in, input rst_n);

reg[1:0] in_dly;

 

always @(posedge clk or negedge rst_n)

     if(~rst_n)  in_dly <= 2’b00;

     else  in_dly <= {in_dly[0],in};

 

assign out = in_dly[0]^in_dly[1];

endmodule

解析:

这题比较简单,主要考察拼接和异或。

 

 

 

 

 

 

 

 

6.    D触发器做个二分频电路,画出电路逻辑图?

解析:

     

 

7.    画出可以检测10010串的状态图,并verilog实现。

解析:

原状态

次态

条件

S0

S0

(!data_in)

S0

S1

(data_in)

S1

S2

(!data_in)

S1

S1

(data_in)

S2

S1

(data_in)

S2

S3

(!data_in)

S3

S0

(!data_in)

S3

S4

(data_in)

S4

S5

(!data_in)

S4

S1

(data_in)

S5

S1

(data_in)

S5

S3

(!data_in)

 

 

 

 

 

 

 

8.   fork/join的几种形式

解析:考察SystemVerilog验证语法

fork-join

fork-join_none

fork-join_any

例如

fork
 Statement1;
Statement2;
join||join_any||join_none
Statement3;

 

 

 

 

 

 


join子线程statement1statement2并行执行,只有当两个都结束了,线程statement3才开始执行。

join_any子线程statement1statement2并行执行,两个只要有一个结束了,线程statement3就开始执行。

join_none 线程statement3执行,所有的子线程进入排队等待,等到父线程遇到等待或者执行完成之时,子线程才statement1statement2才允许执行。

 

9.    定义一个随机数,约束其范围大于4小于100,并建仓。

解析:考察SystemVerilog验证语法

rand   bit[6:0]   c;
constraint   c_range{ 
c>4;
c<100;
}
event sample_event;
covergroup  cover_c  @(sample_evnet);
c_value: coverpoint  c;
{bins c_value[]={[4:100]};}
endgroup

 

 

 

 

 

 

 

 

 

 

 

 

 


10.  数字ic设计流程

解析:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多