setup time是指在触发器的时钟讯号触发之前,资料需要稳定不变的时间
hold time 是指在触发器的时钟讯号触发之后,资料需要稳定不变的时间
在考虑时钟skew的情况下,setup time和hold time需要满足
根据上述公式,
setup time违例可能是因为工作频率过大,工艺库标准单元速度慢,触发器之间组合逻辑太长
hold time违例可能是因为时钟skew过大,触发器之间组合逻辑太短
2. verilog 中的阻塞赋值、非阻塞赋值有什么区别?
阻塞赋值:”=”,同一个语句块中,在阻塞赋值执行完之前,后面的语句是不执行的。
非阻塞赋值:”<=”, 同一个语句块中,非阻塞赋值并发执行,前面的语句是否执行完毕不会影响后面的语句。
3.解释什么是STA、formal形式验证和DFT ?
STA(Static Timing Analysis, STA)静态时序分析,根据设计的约束和电路结构将设计划分为一条条时序路径,计算各路径的时序是否满足要求。 它主要考虑通过每个逻辑闸的最差延迟,而不是电路的逻辑功能。与动态模拟相比,静态时序分析不需要测试向量,能更快地检查所有路径下的时序。
formal形式验证:使用数学方式进行设计的形式验证,主要用来对设计过程中不同阶段的设计进行逻辑功能一致性的对比,判断工具是否对电路工作造成了影响。
DFT(design for test,DFT)可测性设计:在设计规模变得复杂时,需要考虑设计的可测试性,在设计中插入设计功能之外的测试逻辑。
4请画出数字ASIC设计从程式码编写到tapeout的流程,并写明每步会使用到的工具。
ASIC设计流程是一个需要很多EDA工具协同工作的设计流程。
具体工具主要是三家EDA巨头Synopsys/Mentor/Cadence
5请画出一种安全的门控时钟结构
在同步设计中,可以使用工具方便地分析电路的时序以优化设计满足建立时间和保持时间,而对于异步设计则无法使用静态时序分析进行时序分析。这可能会造成时序违例,进而导致电路的亚稳态发生。
通常可以使用两级同步器,握手讯号和异步FIFO解决跨时钟域问题
7. 数位电路的静态功耗和动态功耗有哪几部分构成?与哪些因素有什么关系。
动态功耗是电路逻辑转换期间消耗的功耗,由两个部分组成,开关功耗和短路功耗。 开关功耗来自对电路负载电容充放电的功耗。 短路功耗来自在电路逻辑转换期间,流过PMOS-NMOS的短路电流。所以,动态功耗取决于电源电压和电容负载以及时钟频率和开关活动。
然而,随着晶体管尺寸和阈值电压降低,静态(泄漏)功耗正在变得越来越大,通过减慢或停止时钟不能减少泄漏功耗。但是,可以通过降低或关闭电源电压来减少或消除泄漏功耗。
8. 阈值电压Vt对静态功耗有什么影响?对电路速度有什么影响?
HVt可以有效地降低静态功耗。但电路的速度会降低。
LVt可以提高电路的速度,但是静态功耗会增大。
9. 请画出下面Verilog程式码对应的电路图
化简后:
b = a[1] ^ a[0]
当a[1] = 1’b1时,生成latch
生成触发器
上述是Verilog对电路的行为级描述,可以有不同电路结构实现同一功能。可以化简后,用最简单的门搭建。
10. 画出检测10010序列的状态转换图,并用verilog实现
check.v
module check(
input clk ,
input rst_n ,
input data_in ,
output data_out
);
parameter IDLE = 3\'b000 ;
parameter S0 = 3\'b001 ;
parameter S1 = 3\'b010 ;
parameter S2 = 3\'b011 ;
parameter S3 = 3\'b100 ;
parameter S4 = 3\'b101 ;
reg [2:0] current_state,next_state ;
[email protected](posedge clk or negedge rst_n) begin
if(!rst_n) begin
current_state <= IDLE ;
end
else begin
current_state <= next_state ;
end
end
[email protected](*) begin
case(current_state)
IDLE : begin
if(data_in == 1\'b1) next_state <= S0 ;
else next_state <= IDLE ;
end
S0: begin
if(data_in == 1\'b0) next_state <= S1 ;
else next_state <= S0 ;
end
S1: begin
if(data_in == 1\'b0) next_state <= S2 ;
end
S2: begin
if(data_in == 1\'b1) next_state = S3 ;
else next_state = IDLE ;
end
S3: begin
if(data_in == 1\'b0) next_state <= S4 ;
end
S4: begin
end
endcase
end
assign data_out = (current_state == S4)?1\'b1 :1\'b0 ;
endmodule
check_tb.v
11. 根据如下总线的读写时序用systemverilog语言写出总线的driver,并通过interface的方式在testcase中呼叫读写函式。
lexin_io.v
lexin_test.v
lexin_test_top.v
由于没有DUT的参考模型,testbench没有输入rdata,所以是不定值
12. 根据表一和表二 资料包的约束,在class中产生约束的资料,在程式中每次呼叫这个函式都产生一个新的包,并且产生后的包资料可以从class外部直接更改。
资料格式表一:
资料包表二:
lexin_random_test.v
输出:
13. 请写出Linux操作系统下复制档案,删除档案,修改档名称,打压缩包的命令
cp,rm,mv,tar zcvf