10.6 习题
1.在下列电路中用到了哪种类型的延迟模型?给模块Y写Verilog描述。
Y
m n e #11 #4 p q f #8 out
答:用到了分布延迟。Verilog描述如下:
module Y(out,m,n,p,q); output out; input m,n,p,q;
wire e,f;
or #11 a1(e,m,n); and #8 a2(f,p,q); or #4 a3(out,e,f);
endmodule
2.在模块中用最大延迟把电路转换成集总延迟模型。用集总延迟模型重写模块Y的Verilog
描述。 答:代码如下:
module Y(out,m,n,p,q);
output out; input m,n,p,q;
wire e,f;
or a1(e,m,n); and a2(f,p,q); or #15 a3(out,e,f);
endmodule
3.计算习题1中的电路的每条输入到输出路径的延迟。使用路径延迟模型写Verilog描述。使用
specify块。
第10章 时序和延迟
145
答:代码如下:
module Y(out,m,n,p,q); output out; input m,n,p,q;
wire e,f;
specify
(m=>out) =15; (n=>out) =15; (p=>out) =12; (q=>out) =12;
endspecify
or a1(e,m,n); and a2(f,p,q); or a3(out,e,f);
endmodule
4.考虑下图所示的负边沿触发的异步复位D触发器。写模块D_FF的Verilog描述,只给出输
入/输出端口和路径延迟说明。使用并行连接描述路径延迟。
146 Verilog HDL数字设计与综合(第二版)
d clock
D_FF
q qbar
路径延迟 d->q ? 5 d->qbar ? 5 clock->q ? 6 clocd->qbar ? 7 reset->q ? 2 reset->qbar ? 3
reset
答:代码如下
module D_FF(q,qbar,d,clock,reset); output q,qbar; input d,clock,reset; reg q,qbar;
//bit to bit specify
(d=>q) =5; (clock=>q) =6; (reset=>q) =2; (d=>qbar) =5; (clock=>qbar) =7; (reset=>qbar) =3; endspecify
endmodule
5.假设所有路径延迟是5个单位时间,修改习题4中的D触发器。使用q和qbar的全连接来描
述路径延迟。 答:
module D_FF(q,qbar,d,clock,reset); output q,qbar; input d,clock,reset; reg q,qbar;
//full connection specify
(d,clock,reset *> q) = 5; (d,clock,reset *> qbar) = 5;
第10章 时序和延迟
147
endspecify
endmodule
6.假设所有路径延迟定义都使用6个延迟参数的形式,所有路径延迟相等。在specify块中,定义参数t_01 = 4,t_10 = 5,t_0z = 7,t_z1 = 2,t_1z = 3,t_z0 = 8。使用习题4中的D触发器,以全连接的方式给所有路径写6个延迟参数的说明。 答:代码如下:
module D_FF(q,qbar,d,clock,reset); output q,qbar; input d,clock,reset; reg q,qbar;
specify
specparam t_01 = 4,t_10 = 5,t_0z = 7; specparam t_z1 = 2,t_1z = 3,t_z0 = 8;
(d,clock,reset *> q) = (t_01 ,t_10 ,t_0z ,t_z1 ,t_1z ,t_z0); (d,clock,reset *> qbar) = (t_01 ,t_10 ,t_0z ,t_z1 ,t_1z ,t_z0);
endspecify
endmodule
7.在习题4中,如果延迟值对d值有如下依赖关系,修改D触发器延迟说明。
如果d = 1’b0, 那么,clock ?> q = 5,否则,clock ?> q = 6 如果d = 1’b0, 那么,clock ?> qbar = 4,否则,clock ?> qbar = 7 所有其他延迟是5个单位时间。 答:代码如下:
module D_FF(q,qbar,d,clock,reset); output q,qbar; input d,clock,reset; reg q,qbar;
specify
(d=>q) =5; (reset=>q) =5; (d=>qbar) =5; (reset=>qbar) =5;
if (d) (clock=>q) =6; if (~d)(clock=>q) =5;
148
Verilog HDL数字设计与综合(第二版)
if (d) (clock=>qbar) =7; if (~d)(clock=>qbar) =4;
endspecify endmodule
8.对于习题7中的D触发器,在specify块中给它加上下列时序检查内容:
d相对于clock的最小建立时间是8。 d相对于clock的最小保持时间是4。
reset信号高有效。reset脉冲的最小宽度是42。
答:在第7题的代码中添加如下代码,注意题目中要求负沿触发:
specify
$setup(d,negedge clock,8); $hold (negedge clock,d,4); $width(posedge clock, 42);
endspecify
9.描述什么是延迟反标注。为延迟反标注画流程图。
答:简单来说,在前端的设计中,我们在设计模块的过程中不能考虑电路在实际布局布线过程中带来的时序影响。而且在综合的过程当中,类似于a<= #10 1 之类的句子,语句中的延迟部分是被忽略的。所以,在综合之后,电路与之前设计的模块会有很大不同,最突出的就是加入了各种延迟,包括器件延迟、布线延迟等等。而所谓的反标注,就是把这些综合之后带来的电路延迟标注到原来的设计模块中,使原来的模块更加的符合电路的实际工作状态。加入了反标注信息的模块就具有了各种延迟信息,这时的仿真我们俗称后仿真。
相关推荐: