您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第6章-Verilog-HDL设计进阶习题
第6章VerilogHDL设计进阶习题实验与设计习题6-1在Verilog设计中,给时序电路清零(复位)有两种不同方法,它们是什么,如何实现?答:同步清零、异步清零,在过程语句敏感信号表中的逻辑表述posedgeCLK用于指明正向跳变,或negedge用于指明负向跳变实现6-2哪一种复位方法必须将复位信号放在敏感信号表中?给出这两种电路的Verilog描述。答:异步复位必须将复位信号放在敏感信号表中。同步清零:always@(posedgeCLK)//CLK上升沿启动Q=D;//当CLK有升沿时D被锁入Q异步清零:always@(posedgeCLKornegedgeRST)begin//块开始if(!RST)Q=0;//如果RST=0条件成立,Q被清0elseif(EN)Q=D;//在CLK上升沿处,EN=1,则执行赋值语句end//块结束习题6-3用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制数中含1的数量。moduleStatistics8(sum,A);output[3:0]sum;input[7:0]A;reg[3:0]sum;integeri;always@(A)beginsum=0;for(i=0;i=8;i=i+1)//for语句if(A[i])sum=sum+1;elsesum=sum;endendmodulemoduleStatistics8(sum,A);parameterS=4;output[3:0]sum;input[7:0]A;reg[3:0]sum;reg[2*S:1]TA;integeri;always@(A)beginTA=A;sum=0;repeat(2*S)beginif(TA[1])sum=sum+1;TA=TA1;endendendmodulerepeat循环语句for循环语句moduleStatistics8(sum,A);parameterS=8;output[3:0]sum;input[7:0]A;reg[S:1]AT;reg[3:0]sum;reg[S:0]CT;always@(A)beginAT={{S{1'b0}},A};sum=0;CT=S;while(CT0)beginif(AT[1])sum=sum+1;elsesum=sum;beginCT=CT-1;AT=AT1;endendendendmodule6-3用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制数中含1的数量。while循环语句modulevoter7(pass,vote);outputpass;input[6:0]vote;reg[2:0]sum;integeri;regpass;always@(vote)beginsum=0;for(i=0;i=6;i=i+1)//for语句if(vote[i])sum=sum+1;if(sum[2])pass=1;//若超过4人赞成,则pass=1elsepass=0;endendmodule习题6-4用循环语句设计一个7人投票表决器。习题6-5Verilog设计一个4位4输入最大数值检测电路。//Verilog设计一个4位4输入最大数值检测电路moduleMaximum_value_detection(Mostlarge,a,b,c,d);//4位4输入最大数值检测电路output[3:0]Mostlarge;input[3:0]a,b,c,d;wire[3:0]sum1,sum2,sum3;assignsum1=(ab)?a:b;assignsum2=(cd)?c:d;assignMostlarge=(sum1sum2)?sum1:sum2;endmodule习题6-6从不完整的条件语句产生时序模块的原理看,例6-9和例6-10从表面上看都包含不完整条件语句,试说明,为什么例6-9的综合结果含锁存器,二例6-10却没有。【例6-9】非阻塞赋初值导致错误【例6-10】阻塞赋初值正确modulemux4_1(D0,D1,D2,D3,S1,S0,OUT);outputOUT;inputD0,D1,D2,D3,S1,SO;reg[2:0]T;regOUT;always@(D0,D1,D2,D3,S1,S0)beginT=0;if(SO==1)T=T+1if(S1==1)T=T+2;case(T)0:OUT=D0;1:OUT=D1;2:OUT=D2;3:OUT=D3;default:OUTD0;endcaseendendmodulemodulemux4_1(DO,D1,D2,D3,S1,SO,OUT);outputOUT;inputDO,D1,D2,D3,S1,SO;reg[2:0]T;regOUT;always@(D0,D1,D2,D3,S1,S0)beginT=0;if(SO==1)T=T+1if(S1==1)T=T+2;case(T)0:OUT=D0;1:OUT=D1;2:OUT=D2;3:OUT=D3;default:OUTD0;endcaseendendmodule答:参见书P137习题6-6从不完整的条件语句产生时序模块的原理看,例6-9和例6-10从表面上看都包含不完整条件语句,试说明,为什么例6-9的综合结果含锁存器,二例6-10却没有。答:参见书P137事实上,例6-9中,T在过程中出现了3次非阻塞赋值操作,即有3个赋值源对同一信号T进行赋值--T=0、T=T+1和T=T+2。但根据以上的讨论,对于非阻塞式赋值,前两个语句中的赋值目标信号T都不可能得到任何数值,只有最后的T=T+2语句中的T的值能得到更新。然而,由于赋值符号右边的T始终未得到任何确定的初始值,即语句T=0并未完成赋值,所以最后的T始终是个未知值。结果只能被综合成随S1和S0随机变动的时序电路,导致T成为一个不确定的信号。结果在过程最后的case语句中,无法通过判断T的值来确定选通输入,即对OUT的赋值。例6-10就不一样了。程序首先执行了阻塞式赋值语句T=0,T即刻被更新,从而使两个if语句中的T都能得到确定的初值。另一方面,当if语句不满足条件时,即当S0或S1不等于1时,由于T已经在第一条赋值语句中被更新为确定的值0了,所以尽管两个if语句从表面上看都属于不完整的条件语句,也不可能被综合成时序电路了。显然也就有了图6-4所示正确的波形输出。习题6-7设计一个求补码的程序,输入数据是一个有符号的8位二进制数。//设计一个求补码的程序,输入数据是一个有符号的8位二进制数moduleBinary_complement(a,b);//二进制数补码input[7:0]a;output[7:0]b;integeri;reg[7:0]d;reg[6:0]c;always@(a)beginif(a[7]==1)beginfor(i=0;i7;i=i+1)c[i]=!a[i];d[7:0]={a[7],(c[6:0]+7'd1)};endelsed[7:0]=a[7:0];endassignb[7:0]=d[7:0];endmodule习题6-8VerilogHDL设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。设计一个四舍五入判别电路,其输入为8421BCD码,要求当输入大于或等于5时,判别电路输出为1,反之为0。//程序2moduleBCD_Compare(a,b);outputb;input[3:0]a;assignb=(a=5)?1:0;endmodule//程序1moduleBCD_Compare(a,b);outputb;input[3:0]a;wirec,d;and(c,a[1],a[2]);and(d,a[0],a[2]);or(b,d,c,a[3]);endmodule原理图6-9用原理图或Verilog输入方式分别设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。习题一、计数型序列信号发生器1.计数型序列信号发生器组成与特点计数型序列信号发生器能产生多组序列信号,这是移位型发生器所没有的功能.计数型序列信号发生器是由计数器和组合电路构成的,序列的长度P就是计数器的模数。2.计数型序列信号发生器的设计(通过例题来说明)例1.设计01001011001序列信号发生器由于序列长度已经知道P=11,所以先用74163N设计一个模11的计数器,再用八选一数据选择器实现序列输出,把计数器的输出端作为数据选择器的地址变量。它的电路图为:如图(1)序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号,能产生这种信号的逻辑器件就称为序列信号发生器,根据结构不同,它可分为反馈移位型和计数型两种。6-9用原理图或Verilog输入方式分别设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。习题1101000101CPQD(A2)QC(D4、~D5)QB(A1)QA(A0、D7)DF10101D1020110D2130111D3041000D4051~001D5161010D6071011D7181100D4191~101D50101110D60111111D71U474163NQA14QB13QC12QD11RCO15A3B4C5D6ENP7ENT10~LOAD9~CLR1CLK2U1A74S04DU1B74S04DU274151N~W6D04D13D22D31D415D514D613D712A11C9B10Y5~G7VDD5VV1100Hz5VXSC1ABExtTrig++__+_二进制序列010010110016-9用原理图或Verilog输入方式分别设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。习题二、移位型序列信号发生器1.移位型序列信号发生器的组成移位型序列信号发生器是由移位寄存器和组合电路两部分构成,组合电路的输出,作为移位寄存器的串行输入。由n位移位寄存器构成的序列信号发生器所产生的序列信号的最大长度为:P=2n2.移位型序列信号发生器的设计(我们通过例题来说明)例1.试设计一个01001011001序列信号发生器首先确定移位寄存器的位数,并画出编码状态图,并找出迁移关系.P=11,因此只需要74194N中的四位,按序列信号四位一组去划分(有十中状态),它的转换关系是:如图(1)如图(1)6-9用原理图或Verilog输入方式分别设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。习题CPQDQCQBQA序列F0010041110019020010213010151/041011110501106061100121710101006-9用原理图或Verilog输入方式分别设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。习题74194NU474194NA3B4C5D6SL7QA15QB14QC13QD12SR2~CLR1S09S110CLK11V1100Hz5VXSC1ABExtTrig++__+_VDD5VU174150NW10E08E17E26E35E44E53E62E71A15G9E823E922E1021E1120E1219E1318E1417E1516C13B14D1101001011001J1Key=SpaceU2A7476N1J41Q15~1Q141K16~1CLR31CLK1~1PR2U3A7400NU5A7404N6-9用原理图或Verilog输入方式分别设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。习题CPQDQC
本文标题:第6章-Verilog-HDL设计进阶习题
链接地址:https://www.777doc.com/doc-3976338 .html