资源描述:
《Verilog HDL设计进阶习题课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章 VerilogHDL设计进阶习题实验与设计习题6-1在Verilog设计中,给时序电路清零(复位)有两种不同方法,它们是什么,如何实现?答:同步清零、异步清零,在过程语句敏感信号表中的逻辑表述posedgeCLK用于指明正向跳变,或negedge用于指明负向跳变实现6-2哪一种复位方法必须将复位信号放在敏感信号表中?给出这两种电路的Verilog描述。答:异步复位必须将复位信号放在敏感信号表中。同步清零:always@(posedgeCLK)//CLK上升沿启动Q<=D;//当CLK有升沿
2、时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@(
3、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=TA>>1;end
4、endendmodulerepeat循环语句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(CT>0)beginif(AT[1])sum=sum+1;elsesum=sum;beginCT=CT-1;AT=AT>>1;endendendendm
5、odule6-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;end
6、endmodule习题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=(a>b)?a:b;assignsum2=(c>d)?c
7、:d;assignMostlarge=(sum1>sum2)?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;alway
8、s@(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;alway