答案Verilog HDL数字系统设计入门与应用实例王忠礼清华大学出版社.docx
- 文档编号:10055779
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:85
- 大小:388.39KB
答案Verilog HDL数字系统设计入门与应用实例王忠礼清华大学出版社.docx
《答案Verilog HDL数字系统设计入门与应用实例王忠礼清华大学出版社.docx》由会员分享,可在线阅读,更多相关《答案Verilog HDL数字系统设计入门与应用实例王忠礼清华大学出版社.docx(85页珍藏版)》请在冰豆网上搜索。
答案VerilogHDL数字系统设计入门与应用实例王忠礼清华大学出版社
思考与练习
1.EDA技术的发展经历了哪几个阶段,每一个阶段的特点是什么?
EDA技术发展大致分为三个阶段:
答:
1.CAD阶段(20世纪60年代中期~20世纪80年代初期)
(1)CAD阶段(20世纪60年代中期~20世纪80年代初期)
第一阶段的特点是一些单独的工具软件,主要有PCB(PrintedCircuitBoard)布线设计、电路模拟、逻辑模拟及版图的绘制等。
(2)CAE阶段(20世纪80年代初期~20世纪90年代初期)
这个阶段在集成电路与电子设计方法学以及设计工具集成化方面取得了许多成果。
各种设计工具,如原理图输入、编译与连接、逻辑模拟、测试码生成、版图自动布局以及各种单元库已齐全。
(3)EDA阶段(20世纪90年代以来)
此阶段主要出现了以高级语言描述、系统仿真和综合技术为特征的第三代EDA技术。
2.说明新兴的EDA硬件电路设计方法与传统的系统硬件电路设计方法的特点?
答:
传统电子设计的特点:
传统的电子设计方法是一种自底向上且费时费力的设计方法,需要按照完成的电子电路设计图的面板或PCB板上进行调试安装,然后再用电源,信号发生器,示波器等各种测试仪表来加以验证,并且这种做法在制作测试电路板的地程当中,需要花很多的时间,损耗材料多。
新兴的EDA硬件电路设计方法的特点:
随着硬件描述语言HDL的出现和可编程逻辑器件的发展,新兴的EDA设计方法采用了自上而下的设计方法,从系统总体要求出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。
在电子产品的设计理念、设计方式、系统硬件构成、设计的重用性、知识产权、设计周期等方面,新兴的EDA技术具有一定的优势。
3.可编程逻辑器件的设计流程包括那几个步骤?
答:
包括设计准备,设计输入,功能仿真,设计处理,时序仿真和器件编程及测试等七个步骤。
4.简述软IP、固IP和硬IP的特点?
答:
软IP是用VerilogHDL等硬件描述语言描述的功能块,并不涉及用什么具体电路元件实现这些功能。
固IP是完成了综合的功能块,具有较大的设计深度,以网表文件的形式提交客户使用。
硬IP提供设计的最终阶段产品:
掩模。
思考与练习
1.PLD的分类有哪些?
答:
1.按集成度可分为以下两大类:
(1)简单低密度PLD器件;
(2)复杂高密度PLD器件。
2.按结构可分为以下两大类:
(1)基于乘积项结构的PLD器件;
(2)基于查找表(LookUpTableLUT)结构的PLD器件。
3.按编程工艺可分为以下几类
(1)熔丝(Fuse)型;
(2)反熔丝(Anti_fuse)型;;
(3)EPROM型;
(4)E2ROM型;
(5)SRAM型;
(6)Flash型。
2.PLA与PAL在结构上有哪些区别?
答:
可编程逻辑阵列PLA的与门阵列和或门阵列都是可编程的
GAL的基本结构:
①缓冲器;②输出缓冲器;③反馈/输入缓冲器;④可编程与门阵列;⑤输出逻辑宏单元。
3.FPGA与CPLD在结构上有什么区别,各有什么特点?
答:
CPLD主要包含三种结构:
可编程逻辑宏功能模块(MC,MacroCell)、可编程I/O单元和可编程内部连线。
CPLD是从PAL、GAL基础上发展起来的高密度PLD器件,它们大多采用COMS、EPROM、E2PROM和快闪存储器(FlashMemory)等编程技术,因而具有高密度、高速度和低功耗等特点。
FPGA从逻辑功能块的结构上分类,可分为查找表结构、多路开关结构和多级与非门结构。
FPGA一般由三种可编程电路和一个用于存放编程数据的SRAM组成。
FPGA一般由三种可编程电路和一个用于存放编程数据的SRAM组成,这三种可编程电路是:
可编程逻辑块CLB(ConfigurableLogicBlock)、输入/输出模块IOB(I/OBlock)和互连资源IR(InterconnectResource)
4.AlteraFPGA和XilinxFPGA在器件配置都有哪几种模式?
答:
AlteraFPGA的配置有主动配置方式(AS)、被动配置方式(PS)、和JTAG配置方式和FPP模式等模式。
XilinxFPGA的配置有并行(SelectMap)、串行(Serial)和边界扫描(BoundaryScan)模式。
5.简述PLD发展趋势?
答:
(1)向高密度、大规模的方向发展
(2)向系统内可重构的方向发展
(3)向低电压、低功耗的方向发展
(4)向高速可预测延时器件的方向发展
(5)向混合可编程技术方向发展
思考与练习
1.简述QuartusII9.1的设计流程。
QuartusII的软件设计流程
2.用图形编辑输入方式设计同步10进制计数器,完成编译和仿真分析。
答:
2.用文本编辑输入方式设计32进制计数器。
要求以十六进制数显示频率值。
答:
modulecount32(clk,reset,cout,out1,out0);
inputclk,reset;
output[3:
0]out1,out0;
outputcout;
reg[3:
0]out1,out0;
regcout;
always@(posedgeclk)
begin
if(reset)
begin
out1<=0;out0<=0;cout<=0;
end
elseif((out1==3)&&(out0==1))
begin
out1<=0;out0<=0;cout<=1;
end
elseif(out0==9)
begin
out0<=0;out1<=out1+1;
end
else
begin
out0<=out0+1;cout<=0;
end
end
endmodule
3.参照本章层次设计的设计流程,完成一位二进制全加器设计的仿真分析。
答:
4.用LPM宏功能块设计32进制计数器。
答:
5.应用QuartusII9.1和目标芯片为CycloneII系列的EP2C8Q208C8器件,设计8×8硬件乘法器,进行时序仿真分析,完成引脚锁定。
答:
6.用文本编辑输入方式设计一个可变进制的计数器,根据输入数据来改变计数容量。
答:
moduleVariable_base_count(clk,rst,N,cout);
inputclk,rst;
input[11:
0]N;
outputcout;
regcout;
reg[11:
0]out;
always@(posedgeclkorposedgerst)
begin
if(rst)
out<=0;
elseif(out==(N-1))
begin
out<=0;
cout<=1;
end
else
begin
out<=out+1;
cout<=0;
end
end
endmodule
7.设计一带进位输出的十二进制加法计数器,编译并进行时序仿真分析,说明电路设计的正确性。
答:
8.设计一个4位移位寄存器,编译并进行时序仿真分析,说明设计的正确性。
答:
思考与练习
1.简述Modelsim6.5的设计流程。
(1)建立Modelsim库
(2)建立Modelsim工程
(3)编辑与编译源代码
(4)启动仿真器
(5)运行仿真
2.编写一个4位的全加器,并对其进行仿真。
3.编写一个100进制计数器,并对其进行Modelsim与QuartusII联合功能仿真。
思考与练习
1.VerilogHDL模块由几部分组成?
答:
模块声明、端口定义、数据类型声明、逻辑功能描述
2.下列标识符是否合法:
out、initial、Count、_123RT、www*、3clk、file-1、a#b、\wait、abcd$134
答:
合法:
out、Count、_123RT、\wait、abcd$134
不合法:
initial、www*、3clk、file-1、a#b
3.下列整数书写正确的有哪些?
5’b0011、8□’had1、(1+2)’o741、6’b000_111、3’□d543、4’ba01、5’b_01010、25
答:
合法:
5’b0011、8□’had1、、6’b000_111、25
不合法:
(1+2)’o741、3’□d543、4’ba01、5’b_01010、
4.reg型数据与wire数据有哪些区别?
答:
wire数据相当于硬件电路中的各种物理连接,其特点是输出的值紧跟输入值的变化而变化。
reg型数据需要被明确地赋值,并且reg型数据在被重新赋值前一直保持原值。
5.reg[3:
0]a;和rega[3:
0];两条语句功能是否相同?
如果不同,叙述它们的区别及如何为它们的每一位赋值?
答:
不同;reg[3:
0]a是定义一个4位的reg型变量reg[3:
0]a是定义了8个1位寄存器组成的存储器a
6.写出下列表达式的结果:
答:
(1)4’b0011+4’b1010=4’b1101、6’hff-5’o721=6’h2e、
4’bx*4’b0101=4’bxxxx4**2=1617%3=219%-5=4-32%5=-2
(2)5’b0101&&4’b1110=13’b000&&4’b1100=0
2’b10||2’b00=1!
(3’bx10)=0
(3)~4’b1010=4’b01014’b1100&4’b1111=4’b1100
4’b1110|3’b001=4’b11115’b10101^5’b0x101=5’b1x000
(4)4’b1010<4’b1100(0)3’b010<3’bX10(x)
4’b1010>=10
(1)
(5)3’b010==3’b01x(x)4’b00x1==4’b00x1(x)
3’b1x0===3’b1x0
(1)3’bx10===3’b1x0(0)
(6)&4’b01001=0|3’b1010=1~^4’b1011=0
(7)8’b01010101<<28’b11111000>>3
0101010000011111
7.利用always语句设计一个带有异步复位功能的十进制计数器。
答:
modulecount10(clk,clr,start,cout,daout);
inputclk,clr,start;
outputcout;
regcout;
output[3:
0]daout;
wire[3:
0]daout;
reg[3:
0]cnt;
assigndaout=cnt;
always@(posedgeclkornegedgeclr)
begin
if(!
clr)
begin
cnt<=4'b0000;
cout<=1'b0;
end
elseif(start==1'b1)
begin
if(cnt==4'b1001)
begin
cnt<=4'b0000;
cout<=1'b1;
end
else
begin
cnt<=cnt+1;
cout<=1'b0;
end
end
end
endmodule
8.利用always语句实现一个周期为100ns的矩形脉冲。
答:
`timescale1ns/1ns
moduletest;
regcin;
initialcin=0;
always#50cin=~cin;
endmodule
9.读下面的程序
`timescale1ns/1ns
initial
begin
a=0;b=1;
#10a=1;
#10b=0;
#20b=0;
#10a=0;
#20$finish;
end
请问每条语句执行的仿真时刻是多少?
整个过程共需要多长时间?
结束仿真后,每个变量的值是多少?
如果将begin-end换成fork-join后,同样回答上面几个问题。
`timescale1ns/1ns
initial
begin
a=0;b=1;//0ns
#10a=1;//10ns
#10b=0;//20ns
#20b=0;/40ns
#10a=0;//50ns
#20$finish;//70ns
end
整个过程共需要70ns,结束仿真后,每个变量a,b的值均为0。
将begin-end换成fork-join后:
`timescale1ns/1ns
initial
begin
a=0;b=1;//0ns
#10a=1;//10ns
#10b=0;//10ns
#20b=0;/20ns
#10a=0;//10ns
#20$finish;//20ns
end
整个过程共需要20ns,结束仿真后,每个变量a,b的值均为0。
10.阻塞赋值和非阻塞赋值的区别?
举例说明。
可以将赋值过程分为两个子过程:
过程1,计算右侧表达式的值;
过程2,给左侧目标赋值。
对阻塞过程赋值而言,在完成赋值之前不允许随后的其他语句执行。
而对于非阻塞赋值,其实是在某个时刻开始时执行子过程1,在这个时刻结束时执行子过程2,这两个子过程之间有一个微小的时间间隔。
在这个间隔期间,这条非阻塞赋值语句后面的其他的语句也可以执行。
阻塞过程赋值相当于顺序执行
非阻塞过程赋值当于并发执行
11.设计带有优先级的8-3编码器。
modulecode_8_3(s,I,Q,E0,GS);
input[7:
0]I;
inputs;
output[2:
0]Q;
outputE0,GS;
reg[2:
0]Q;
regE0,GS;
always@(sorI)
begin
if(s)beginQ=3'd7;E0=1;GS=1;end
else
begin
if(~I[7])beginQ=3'd0;E0=1;GS=0;end
elseif(~I[6])beginQ=3'd1;E0=1;GS=0;end
elseif(~I[5])beginQ=3'd2;E0=1;GS=0;end
elseif(~I[4])beginQ=3'd3;E0=1;GS=0;end
elseif(~I[3])beginQ=3'd4;E0=1;GS=0;end
elseif(~I[2])beginQ=3'd5;E0=1;GS=0;end
elseif(~I[1])beginQ=3'd6;E0=1;GS=0;end
elseif(~I[0])beginQ=3'd7;E0=1;GS=0;end
elsebeginQ=3'd7;E0=0;GS=1;end
end
end
endmodule
12.用两种方法设计一个8选1的数据选择器。
方法1:
modulemux8_1a(a,b,c,d,e,f,g,h,s0,s1,s2,y);
inputa,b,c,d,e,f,g,h;
inputs0,s1,s2;
outputy;
regy;
always@(aorborcordoreorforgorhors0ors1ors2)
begin
case({s1,s0,s2})
3'b000:
y=a;
3'b001:
y=b;
3'b010:
y=c;
3'b011:
y=d;
3'b100:
y=e;
3'b101:
y=f;
3'b110:
y=g;
3'b111:
y=h;
default:
y=1'bx;
endcase
end
endmodule
方法2:
modulemux8_1a(a,b,c,d,e,f,g,h,s0,s1,s2,y);
inputa,b,c,d,e,f,g,h;
inputs0,s1,s2;
outputy;
regy;
always@(aorborcordoreorforgorhors0ors1ors2)
begin
if({s1,s0,s2})==3'b000:
y=a;
elseif({s1,s0,s2})==3'b001:
y=b;
elseif({s1,s0,s2})==3'b010:
y=c;
elseif({s1,s0,s2})==3'b011:
y=d;
elseif({s1,s0,s2})==3'b100:
y=e;
elseif({s1,s0,s2})==3'b101:
y=f;
elseif({s1,s0,s2})==3'b110:
y=g;
elseif({s1,s0,s2})==3'b111:
y=h;
elsey=1'bx;
endcase
end
endmodule
13.设计一个17人投票表决器。
modulevoter17(pass,vote);
outputpass;
input[16:
0]vote;
reg[6:
0]sum;
integeri;
regpass;
always@(vote)
begin
sum=0;
for(i=0;i<=16;i=i+1)
if(vote[i])sum=sum+1;
if(sum>=6'b001001)
pass=1;
else
pass=0;
end
endmodule
思考与练习
1.分别叙述以下几对系统任务的区别?
$display和$write、$monitor和$strobe、$display和$strobe
答:
$display和$write的区别:
$display在输出结束后,具有自动换行的功能,而$write则不带有自动换行功能。
$monitor和$strobe的区别:
$monitor主要是连续监控和输出指定的参数。
只要参数表中的参数值发生变化,整个参数表就在当前仿真时刻结束时显示。
$strob探测任务用于在指定时间显示仿真数据,
$monitor相当于持续的监控器,而$strobe相当于选通监控器;$strobe只有在模拟时间发生变化时,并且所有的事件都已处理完毕后,才将结果输出,$strobe更多地用来显示用非阻塞赋值的变量值。
$display和$strobe的区别:
根据上面两个进行回答。
2.用户自定义原语UDP有什么特点?
组合逻辑电路UDP和时序逻辑电路UDP的区别是什么?
答:
UDP元件的特点:
(1)UDP元件是一个独立的定义模块,不能出现在其他模块内;
(2)UDP元件的输出端口只能有一个,且必须位于端口列表的第一项。
只有输出端口能被定义成reg型;
(3)UDP元件的输入端口可以由很多个,一般时序逻辑电路UDP的输入端口可多至9个,组合逻辑电路UDP的输入可多至10个;
(4)所有的端口变量必须是1位标量;
(5)在table表项中,只能出现0、1、x三种状态,不能出现z状态。
组合逻辑电路UDP和时序逻辑电路UDP的区别:
主要体现在table表项的描述上
时序逻辑电路UDP定义时的table表项格式与组合逻辑电路UDP的表项格式的不同之处在于:
表项中多了关于元件内部状态的描述。
要用两个冒号“:
”分别将输入逻辑值与元件内部状态、元件内部状态与输出逻辑值分隔开。
在够建table表项时要把元件内部状态对输出的影响考虑进去。
3.测试模块与设计模块的区别有哪些?
答:
1)测试模块只有模块名字,没有端口列表;
(2)输入信号(激励信号)必须定义为reg型,以保持信号值;输出信号(显示信号)必须定义为wire型:
(3)在测试模块中调用被测试模块,调用时,如果采用位置对应关系,应注意端口排列的顺序与模块定义时一致;如果采用信号对应关系,则位置可以随意变动;
(4)一般用initial、always过程块来定义激励信号波形;
(5)一般使用系统任务和系统函数来定义输出显示格式:
(6)在激励信号的定义中,可使用如下一些控制语句:
if-else和case条件语句、for、forever、while和repeat循环语句、wait、disable、begin-end,fork-ioin等,这些控制语句一般只用在always、initial、function、task等过程块中。
4.设计一个4选1的数据选择器,并写出该选择器的TestBench。
答:
modulemux4_1(a,b,c,d,s0,s1,y);
inputa,b,c,d;
inputs0,s1;
outputy;
regy;
always@(aorborcordors0ors1)
begin
case({s1,s0})
2'b00:
y=a;
2'b01:
y=b;
2'b10:
y=c;
2'b11:
y=d;
default:
y=1'bx;
endcase
end
endmodule
`timescale1ns/1ns
modulemux4_1_test;
rega,b,c,d;
regs0,s1;
wirey;
mux4_1U(a,b,c,sum,cout);
initial
begin
a=0;b=0;c=0;d=0;//初始化
#10c=1;//产生激励信号
#10b=1;
#10c=0;
#10a=1;
#10c=1;
#10b=0;
#10c=0;
#10$finish;
end
initial
$monitor($time,,,"a=%db=%dc=%dsum=%dcout=%d",a,b,c,sum,cout);
endmodule
5.设计一个带有异步复位功能的24进制计数器,并写出该计数器的TestBench。
答:
modulecount24_asyn(clk,reset,cout,out1,out0);
inputclk,reset;
output[3:
0]out1,out0;
outputcout;
reg[3:
0]out1,out0;
regcout;
always@(posedgeclkorposedgereset)
begin
if(reset)
begin
out1<=0;out0<=0;cout<=0;
end
elseif((out1==2)&&(out0==3))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 答案Verilog HDL数字系统设计入门与应用实例王忠礼清华大学出版社 答案 Verilog HDL 数字 系统 设计 入门 应用 实例 王忠礼 清华大学出版社