精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx

上传人:b****8 文档编号:10521540 上传时间:2023-02-17 格式:DOCX 页数:16 大小:67.39KB
下载 相关 举报
精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx_第1页
第1页 / 共16页
精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx_第2页
第2页 / 共16页
精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx_第3页
第3页 / 共16页
精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx_第4页
第4页 / 共16页
精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx

《精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx》由会员分享,可在线阅读,更多相关《精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx(16页珍藏版)》请在冰豆网上搜索。

精通VerilogHDLIC设计核心技术实例详解书后习题以与答案.docx

精通VerilogHDLIC设计核心技术实例详解书后习题以与答案

注意:

9.3程序代码

由于本章所涉及的实例程序太长,并因篇幅所限我们把它放到了的“下载专区”。

请到该书源代码文件的根目录寻找:

JPEG实例程序.doc,这个文件就是本章所用的代码。

第1章习题

1.解释目前市面上的MP3Player为什么多采用DSPbased的设计,而在液晶屏幕里的图像缩放控制器(Scaler)为什么都采用硬件(Hardwirebased)的设计。

mp3的动作时钟低,若采用硬件设计,则许多电路大部分时间皆在闲置状况,以DSP设计,调整程序即能解码WMA的编码格式,这是硬件设计难以办到的。

Scaler的动作频率在SVGA时高达135MHz,且功能性单纯,并不需要太大的弹性,故适宜采用硬件架构设计。

若采用DSP设计,频宽和时钟将难以满足。

2.叙述为什么需要做形式验证(FormalVerification)。

最初是因为后端(AP&R)为了满足时序上的要求而加入Buffer,这使得电路存在功能被改变的风险,因此需要做形式验证。

不过近年来形式验证已发展到RTL-RTL、RTL-Gate、Gate-Gate的互相比较,且在测试电路的加入后,形式验证显得更加重要。

3.试简述IC开发的流程。

参考本章1.2节部分

4.解释需降低系统功率消耗的原因。

5.假设电路操作情形如图1-65所示,试估计电路消耗的Internalpower及Switchingpower。

图1-65电路操作情形举例

第2章习题

1.描述一个模块通常会包含哪些部分?

其中有哪些是必要的?

模块名称、输出入管脚、管脚声明、参数定义、include声明、变量声明、程序主体、endmodule。

只有模块名称、endmodule、变量声明、程序主体是必要的。

2.利用我们在数字逻辑里学到的知识,将四输入的多任务器以其他逻辑器件(如NORGate)实现。

3.定义一输入及四输出,输入输出都为8位,两个选项的多任务器,其输出输入可以以表格描述如下。

sel1

sel0

3

2

1

0

0

0

1

1

0

1

0

1

0

0

0

in

0

0

in

0

0

in

0

0

in

0

0

0

试以Verilog语句描述其输出输入,并写出完整的测试平台测试。

moduleex2_2;

//testbench

regclk=0;

reg[7:

0]in=0;

always#10clk=~clk;

reg[1:

0]sel=0;

always(posedgeclk)

sel<=sel+1;

integerseed=4;

always(posedgeclk)

in<=$random(seed);

//Circuit

wire[7:

0]out0=(sel==0)?

in:

0;

wire[7:

0]out1=(sel==1)?

in:

0;

wire[7:

0]out2=(sel==2)?

in:

0;

wire[7:

0]out3=(sel==3)?

in:

0;

endmodule

4.定义3位输入和6位输出,输出是此3位数平方的Verilog语句及测试平台。

moduleex2_3;

//testbench

regclk=0;

reg[2:

0]in=0;

always#10clk=~clk;

integerseed=4;

always(posedgeclk)

in<=$random(seed);

wire[5:

0]out=(in==0)?

0:

(in==1)?

1:

(in==2)?

4:

(in==3)?

9:

(in==4)?

16:

(in==5)?

25:

(in==6)?

36:

(in==7)?

49:

0;

endmodule

5.绘出下列VerilogHDL语句的电路,并估计时钟周期由哪一条路径(Path)所控制。

reg[3:

0]da,db,xor_reg,and_reg,or_reg,add_reg;

always(posedgeclkornegedgenrst)

if(~nrst)begin

da<=0;

db<=0;

endelsebegin

da<=din_a;

db<=din_b;

end

wire[3:

0]xor_op=da^db;

wire[3:

0]and_op=da&db;

wire[3:

0]or_op=da|db;

wire[3:

0]add_op=da+db;

always(posedgeclkornegedgenrst)

if(~nrst)begin

xor_reg<=0;and_reg<=0;

or_reg<=0;add_reg<=0;

endelsebegin

xor_reg<=xor_op;and_reg<=and_op;

or_reg<=or_op;add_reg<=add_op;

end

reg[3:

0]da,db,xor_reg,and_reg,or_reg,add_reg;

always(posedgeclkornegedgenrst)

if(~nrst)begin

da<=0;

db<=0;

endelsebegin

da<=din_a;

db<=din_b;

end

wire[3:

0]xor_op=da^db;

wire[3:

0]and_op=da&db;

wire[3:

0]or_op=da|db;

wire[3:

0]add_op=da+db;

always(posedgeclkornegedgenrst)

if(~nrst)begin

xor_reg<=0;and_reg<=0;

or_reg<=0;add_reg<=0;

endelsebegin

xor_reg<=xor_op;and_reg<=and_op;

or_reg<=or_op;add_reg<=add_op;

end

由add_op=da+db这一条语句所控制,因为加法的时间延迟最长。

6.编写下列电路的Verilog代码,其电路如图2-42所示。

图2-42电路示例

wire[3:

0]A,B;

wiretemp3=~(A[3]^B[3]);

wiretemp2=~(A[2]&B[2]);

wiretemp1=(A[1]&B[1]);

wiretemp0=(A[0]|B[0]);

wiretmp=temp3|temp2|temp1|temp0;

always(posedgeclk)dout<=tmp;

7.在ex2_7中,我们曾经编写过一个向左旋转(Rotate)一个位的Verilog程序,请试编写一个每一次时钟信号上升沿时向右旋转(Rotate)两个位的逻辑电路及测试平台。

moduleex2_6;

//testbench

regclk=0,nrst=1,sel=0;

reg[7:

0]din=0,dout;

always#10clk=~clk;

initialbegin

#50nrst=0;

#70nrst=1;

#80sel=1;

#15sel=0;

end

integerseed=4;

always(posedgeclk)

din<=#1$random(seed);

//circuit

wire[7:

0]temp={dout[1:

0],dout[7:

2]};

always(posedgeclkornegedgenrst)

if(~nrst)dout<=0;

elseif(sel==1)dout<=din;

elsedout<=temp;

endmodule

8.在本章中我们曾设计过一个3-8译码器,试着设计一个8-3编码器。

这个编码器当输入为0时具有最高的编码优先权,当输入为8时编码优先权最低。

wire[7:

0]in;

wire[2:

0]out=(in==0)?

3’b000:

(in==1)?

3’b001:

(in==2)?

3’b010:

(in==3)?

3’b011:

(in==4)?

3’b100:

(in==5)?

3’b101:

(in==5)?

3’b101:

(in==6)?

3’b110:

(in==7)?

3’b111:

0;

9.试编写一个4位计数器,系统重置后计数器的值为零,计数顺序为:

0->2->3->4->7->9>10->11->12->13->14->15->0。

reg[3:

0]tr;

wirejump2=(cntr==0)|(cntr==5)|(cntr==7);

always(posedgeclkornegedgenrst)

if(~nrst)tr<=0;

elseif(jump2)tr<=cntr+2;

elsetr<=cntr+1;

10.试对ex2_12的NRZI译码编写程序。

第3章习题

1.试以forever描述一个时间周期为20时间单位的时钟信号。

regclk=0;

initialforever#10clk=~clk;

2.在本章中提到的循环语句有for、repeat、while循环。

试以这三种循环编写一个计数器,计数到非常大的数字,以您熟悉的仿真器仿真,然后比较这三种语法所耗的时间。

3.比较下列两种VerilogHDL的reset语句,分别对其仿真,比较它们有什么不同,并绘出它们的电路图。

case1

always(posedgeclkornegedgenrst)

if(~nrst)q<=0;

elseq<=d;

case2

always(posedgeclk)

if(~nrst)q<=0;

elseq<=d;

二者的不同在于,cas1的reset信号是异步的,即使没有clk仍然能清除q;而case2的reset信号是同步的,如果没有clk就无法清除q。

case1case2

4.用您所熟悉的综合器,针对下列两种情形做综合并比较其结果。

case1

always(posedgeclk)

begin

B=A;

A=C;

end

case2

always(posedgeclk)

begin

B<=A;

A<=C;

end

case1

always(posedgeclk)

begin

T1=A1|B1;

Y1=T1|C1;

end

always(posedgeclk)

begin

T2<=A2|B2;

Y2<=T2|C2;

end

5.试绘出下列VerilogHDL语句的电路。

functionxor_op;

input[7:

0]A;

xor_op=(A[7]^A[6])|(A[5]^A[4])|(A[3]^A[2])|(A[1]^A[0]);

endfunction

wireA,B,D;

wire[7:

0]C;

regY1,Y2;

always(AorBorCorD)

begin

Y1=A&B|xor_op(C);

Y2=Y1&D;

end

第4章习题

1.设计一个五层住户电梯的状态图,这个电梯必须满足一般的功能,每一层都可以对其做上楼或下楼的选择,如果觉得很困难,试着简化问题,编写程序及测试平台。

2.试编写下列状态变化图(如图4-39所示)的VerilogHDL程序代码。

图4-39状态变化图

parameterstate0=2'b00,

state1=2'b01,

state2=2'b10;

reg[1:

0]nxt_state,current_state;

regy;

always(posedgeclkornegedgenrst)

if(~nrst)current_state<=state0;

elsecurrent_state<=nxt_state;

always(current_stateorx)

case(current_state)

state0:

begin

if(x==0)begin

y=0;

nxt_state=state0;

endelseif(x==1)begin

y=1;

nxt_state=state1;

end

end

state1:

begin

if(x==0)begin

y=1;

nxt_state=state1;

endelseif(x==1)begin

y=0;

nxt_state=state2;

end

end

state2:

begin

if(x==0)begin

y=1;

nxt_state=state0;

end

end

default:

begin

y=0;

nxt_state=state0;

end

endcase

3.用设计程序状态机的方式,设计一个8位的格雷码(GrayCode)计数器。

modulegraycntr(gray,clk,inc,rst_n);

parameterSIZE=4;

output[SIZE-1:

0]gray;

inputclk,inc,rst_n;

reg[SIZE-1:

0]gnext,gray,bnext,bin;

integeri;

always(posedgeclkornegedgerst_n)

if(!

rst_n)gray<=0;

elsegray<=gnext;

always(grayorinc)begin

for(i=0;i

bin[i]=^(gray>>i);

bnext=bin+inc;

gnext=(bnext>>1)^bnext;

end

endmodule

第5章习题

1.试阐述同步设计与异步设计的优缺点。

同步设计

Ø优点:

易于分析,可靠、稳定,易于加入测试电路。

Ø缺点:

功率消耗大,占据较大的面积,系统整体效能难以提升。

异步设计

Ø优点:

占据面积小,节省功率消耗。

Ø缺点:

不易分析,可靠度稳定度差,且不易加入测试电路。

2.解释什么是亚稳态(Metastable)。

信号在跨越不同的clkdomain时,有时候稳定,而有时候却不稳定的情形如本章中关于Metastable的节所述。

3.试编写一个异步存的行为模型,这个存的一边接口是CS(ChipSelect)、WR(Write)、RD(Read)、DIN[15:

0]、ROW[6:

0]、COL[6:

0]、DO[15:

0],其地址由ROW,COL来替代,输出输入皆为Leveltrigger。

Row为Page的概念。

这个存总共有96个Row(每个Row有96个Column)。

每个存储元件为16位。

另外一边则为OEN(Outputenable)、RROW[6:

0](ReadRowaddress)、DO[96X16-1:

0]。

这一边能由输入Row直接读取96个Column的数据。

所有的信号皆为Highactive。

其时序图如图5-29所示。

writecycle

readcycle

图5-29时序图

第6章习题

1.从设计一个二输入的4位比较器起,设计一个四输入四输出的比较器。

这个比较器的输出能将四输出依四输入的大小排列,然后输出。

编写其VerilogHDL程序及测试平台。

见ex6_1 

2.将例ex6_3的乘法器扩展为8位乘以8位的乘法器。

见ex6_2

3.理解Ripple加法器与Ripple减法器的电路,试着设计能由一个控制信号选项来执行加法或减法的4位Ripple加减法器电路。

 

foradditiontheoperationis

for(i=0;i<=3;i++)

{

}

forsubtraction

for(i=0;i<=3;i++)

{

}

4.参考本章所介绍的CSA加法器,设计一个八输入的CSA加法器,每一个数据的输入为4位,并编写测试平台验证。

见ex6_4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1