版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
VerilogHDL设计初步
第4章
Ver习题
4-1举例说明,VerilogHDL的操作符中,哪些操作符的运算结果总是一位的。答:
P74/74/80/924-2wire型变量与reg型变量有什么本质区别,它们可用于什么类型语句中?答:书上P261~262《9.2VerilogHDL数据类型》reg主要是用于定义特定类型的变量,即寄存器型(Register)变量(或称寄存器型数据类的变量)。如果没有在模块中显式地定义信号为网线型变量,Verilog综合器都会将其默认定义为wire型。过程语句always@引导的顺序语句中规定必须是reg型变量。wire型变量不允许有多个驱动源习题4-1举例说明,VerilogHDL的操习题
4-3阻塞赋值和非阻塞赋值有何区别?答:Verilog中,用普通等号“=”作为阻塞式赋值语句的赋值符号,如y=b。
Verilog中,用普通等号“<=”作为非阻塞式赋值语句的赋值符号,如y<=b。阻塞式赋值的特点是,一旦执行完当前的赋值语句,赋值目标变量y即刻获得来自等号右侧表达式的计算值。如果在一个块语句中含有多条阻塞式赋值语句,则当执行到其中某条赋值语句时,其他语句将禁止执行,即如同被阻塞了一样。非阻塞式赋值的特点是必须在块语句执行结束时才整体完成赋值操作。非阻塞的含义可以理解为在执行当前语句时,对于块中的其他语句的执行情况一律不加限制,不加阻塞。这也可以理解为,在begin_end块中的所有赋值语句都可以并行运行。习题4-3阻塞赋值和非阻塞赋值有何区别?4-4举例说明,为什么使用条件叙述不完整的条件句能导致产生时序模块的综合结果?答:●当CLK发生了电平变化,但是从1变到0。这时无论D是否变化,都将启动过程去执行if语句;但此时CLK=0,无法执行if语句,从而无法执行赋值语句Q<=D,于是Q只能保持原值不变(这就意味着需要在设计模块中引入存储元件)。●当CLK没有发生任何变化,且CLK一直为0,而敏感信号D发生了变化。这时也能启动过程,但由于CLK=0,无法执行if语句,从而也就无法执行赋值语句Q<=D,导致Q只能保持原值(这也意味着需要在设计模块中引入存储元件)。在以上两种情况中,由于if语句不满足条件,于是将跳过赋值表达式Q<=D,不执行此赋值表达式而结束if语句和过程.对于这种语言现象,Velilog综合器解释为,对于不满足条件,跳过赋值语句Q<=D不予执行,即意味着保持Q的原值不变(保持前一次满足if条件时Q被更新的值)。对于数字电路来说,当输入改变后试图保持一个值不变,就意味着使用具有存储功能的元件,就是必须引进时序元件来保存Q中的原值,直到满足if语句的判断条件后才能更新Q中的值,于是便产生了时序元件。
moduleLATCH1(CLK,D,Q);outputQ;inputCLK,D;regQ;always@(DorCLK)if(CLK)Q<=D; //当CLK=1时D被锁入Qendmodule
4-4举例说明,为什么使用条件叙述不完整的条件句能导致产4-5用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两种方式。4-5用Verilog设计一个3-8译码器,要求分别用c4-5用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两种方式。moduledecoder3_8(G1,Y,G2,A,G3);inputG1,G2,G3;wireG1,G2,G3;input[2:0]A;wire[2:0]A;output[7:0]Y;reg[7:0]Y;regs;always@(A,G1,G2,G3)begins<=G2|G3;if(G1==0)Y<=8'b1111_1111;elseif(s)Y<=8'b1111_1111;elsecase(A)3'b000:Y=8'b11111110; 3'b001:Y=8'b11111101; 3'b010:Y=8'b11111011; 3'b011:Y=8'b11110111; 3'b100:Y=8'b11101111; 3'b101:Y=8'b11011111; 3'b110:Y=8'b10111111; 3'b111:Y=8'b01111111; default:Y=8'bxxxxxxxx;endcaseendendmodule4-5用Verilog设计一个3-8译码器4-5用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两种方式。moduledecoder3_8(G1,Y,G2,A,G3);inputG1,G2,G3;wireG1,G2,G3;input[2:0]A;wire[2:0]A;output[7:0]Y;reg[7:0]Y;regs;always@(A,G1,G2,G3)begins<=G2|G3;if(G1==0)Y<=8'b1111_1111;elseif(s)Y<=8'b1111_1111; elsebeginif(A==3'b000)Y=8'b11111110; elseif(A==3'b001)Y=8'b11111101; elseif(A==3'b010)Y=8'b11111011; elseif(A==3'b011)Y=8'b11110111; elseif(A==3'b100)Y=8'b11101111; elseif(A==3'b101)Y=8'b11011111; elseif(A==3'b110)Y=8'b10111111; elseif(A==3'b111)Y=8'b01111111; elseY=8'bxxxxxxxx;endendendmodule4-5用Verilog设计一个3-8译码器//测试文件,??部分请根据被测试的文件修改modulestimulus;reg[2:0]A;wire[7:0]Y;regG1,G2,G3;decoder3_8DUT(G1,Y,G2,A,G3);initialbegin$monitor($time,"A=%d,G1=%b,G2=%b,G3=%b,Y=%d\n",A,G1,G2,G3,Y);endinitialbeginG1=1;G2=1;G3=1;A=0;#10G2=0;G1=0;#10G2=0;G1=1;#10G2=1;G1=0;G3=0;#10G1=0;G1=1;G3=1;#10G1=0;G1=0;G3=0;#10G1=1;G2=0;G3=0;#50A=0;#50A=1;#50A=2;#50A=3;#50A=4;#50A=5;#50A=6;#50A=7;#50$finish;endendmodule//测试文件,??部分请根据被测试的文件修改initial习题
4-6图4-26所示的是双2选1多路选择器构成的电路MUXK。对于其中MUX21A,当s=0和s=1时,分别有y=a和y=b。试在一个模块结构中用两个过程来表达此电路。答:参考实验1图4-26含2选1多路选择器的模块moduleMUXK(a1,a2,a3,s0,s1,outy);inputa1,a2,a3,s0,s1;outputouty;wireouty;wiretmp;mux21au1(.a(a2),.b(a3),.s(s0),.y(tmp));mux21au2(.a(a1),.b(tmp),.s(s1),.y(outy));endmodule习题4-6图4-26所示的是双2选1多路选择器构习题
4-7给出1位全减器的VHDL描述。要求:(1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-28中h_suber是半减器,diff是输出差,s_out是借位输出,sub_in是借位输入。(2)根据图4-27设计1位全减器。(3)以1位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设计。
图4-271位全减器习题4-7给出1位全减器的VHDL描述。要求:xydiffs_out0000011110101100//一个二进制半减器设计进行了阐述moduleh_suber(x,y,diff,s_out); inputx,y; output diff,s_out; assigndiff=x^y; assigns_out=(~x)&y;endmodule
modulef_suber(x,y,sub_in,diffr,sub_out); //一个二进制全减器顶层设计进行了阐述
outputdiffr,sub_out;inputx,y,sub_in;wiree,d,f;h_suberu1(x,y,e,d); //h_suberu2(.x(e),.diff(diffr),.y(sub_in),.s_out(f));//or2au3(.a(d),.b(f),.c(sub_out));endmodule
xysub_indiffrsub_out0000000111010110110110010101001100011111x为被减数,y为减数,sub_in为低位的借位,diffr为差,sub_out为向高位的借位。习题
xydiffs_out0000011110101100//一习题4-8给出一个4选1多路选择器的Verilog描述。此器件与图4-1类似,但选通控制端有4个输入:S0、S1、S2、S3。当且仅当S0=0时:Y=A;S1=0时:Y=B;S2=0时:Y=C;S3=0时:Y=D。moduleMUX41a(A,B,C,D,S0,S1,S2,S3,Y);outputY;//定义Y为输出信号
inputA,B,C,D;inputS0,S1,S2,S3;regY;//定义输出端口信号Y为寄存器型变量
always@(A,B,C,S0,S1,S2,S3)begin//块语句起始
if(S0==0)Y=A;//当S0==0成立,即(S0==0)=1时,Y=A;
elseif(S1==0)Y=B;//当(S1==1)为真,则Y=B;
elseif(S2==0)Y=C;//当(S2==2)为真,则Y=C;
elseif(S3==0)Y=D;//当(S3==3)为真,即Y=D;
end//块语句结束endmodule习题4-8给出一个4选1多路选择器的Verilo4-9把例4-21改成一异步清0,同步时钟使能和异步数据加载型8位二进制加法计数器。【例4-21】含有异步清0同步时钟使能和同步数据加载功能的十进制计数器moduleCNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);inputCLK,RST,EN,LOAD;//时钟,时钟使能,复位,数据加载控制信号输入口input[3:0]DATA;//4位并行加载数据输入口output[3:0]DOUT;//计数数据输出信号口outputCOUT;//计数进位输出regCOUT;
reg[3:0]Q1;assignDOUT=Q1;//将内部寄存器的计数结果输出至DOUTalways@(posedgeCLKornegedgeRSTornegedgeLOAD)//时序过程
begin if(!RST)Q1<=0;//RST=0时,对内部寄存器单元异步清0
elseif(!LOAD)Q1<=DATA;//当LOAD=0,异步向内部寄存器加载数据
elseif(EN)begin//同步使能EN=1,则允许加载或计数
if(Q1<9)Q1<=Q1+1;//当Q1小于9时,允许累加
elseQ1<=4'b0000;//否则一个时钟后清0返回初值 endendalways@(Q1)//组合电路之过程
if(Q1==4'h9)COUT=1'b1;//当Q1=1001时,COUT输出进位标志1 elseCOUT=1'b0;
//否则,输出进位标志0endmodule
4-9把例4-21改成一异步清0,同步时钟使能和异步数据习题
4-10分频方法有多种,最简单的是二分频和偶数分频甚至奇数分频,这用触发器或指定计数模的计数器即可办到。但对于现场实现指定分频比或小数分频率的分频电路的设计就不是很简单了。试对习题4-9的设计稍作修改,将其进位输出COUT与异步加载控制LOAD连在一起,构成一个自动加载型16位二进制数计数器,也即一个16位可控的分频器,给出其Verilog表述,并说明工作原理。设输入频率fi=4MHz,输出频率fo=516.5±1Hz(允许误差±0.1Hz),16位加载数值=?。(7744)习题4-10分频方法有多种,最简单的是二分moduleCNT10(CLK,RST,EN,COUT,DOUT,DATA);inputCLK,RST,EN;//时钟,时钟使能,复位,数据加载控制信号输入口input[3:0]DATA;//
4位并行加载数据输入口output[3:0]DOUT;//计数数据输出信号口outputCOUT;//计数进位输出regFULL;wireLD;reg[3:0]Q1;always@(posedgeCLKorposedgeLDornegedgeRST)//时序过程
beginif(!RST)beginQ1<=0;FULL<=0;endelseif(LD)beginQ1<=DATA;FULL<=1;endelseif(EN)beginQ1<=Q1+1;FULL<=0;endendassignLD=(Q1==4'B0000);assignDOUT=Q1;//将内部寄存器的计数结果输出至DOUTassignCOUT=FULL;//输出进位标志0endmodulemoduleCNT10(CLK,RST,EN,COUT,DmoduleCNT16(CLK,RST,EN,COUT,DOUT,DATA);inputCLK,RST,EN;//时钟,时钟使能,复位,数据加载控制信号输入口input[15:0]DATA;//
4位并行加载数据输入口output[15:0]DOUT;//计数数据输出信号口outputCOUT;//计数进位输出regFULL;wireLD;reg[15:0]Q1;always@(posedgeCLKorposedgeLDornegedgeRST)//时序过程
beginif(!RST)beginQ1<=0;FULL<=0;endelseif(LD)beginQ1<=DATA;FULL<=1;endelseif(EN)beginQ1<=Q1+1;FULL<=0;endendassignLD=(Q1==16'd0);
assignDOUT=Q1;//将内部寄存器的计数结果输出至DOUTassignCOUT=FULL;//输出进位标志0endmodulemoduleCNT16(CLK,RST,EN,COUT,D4-11用Verilog设计一个功能类似74LS160的计数器。同步十进制计数器74LS160管脚图:引出端符号:TC进位输出端CP时钟输入端(上升沿有效)CEP计数控制端/MR异步清除输入端(低电平有效)Q0~Q3输出端/PE同步并行置入控制端(低电平有效)CET计数控制端P0~P3数据输入端功能表:说明:H-高电平
L-低电平
X-任意
4-11用Verilog设计一个功能类似74LS160的moduleCNT10(CP,MR,CET,CEP,PE,TC,Q,P);output[3:0]Q;//计数数据输出端
outputTC;//TC进位输出端
inputCP,MR,CET,PE,CEP;//时钟,复位,时钟使能,数据加载控制信号输入口
input[3:0]P;//4位并行加载数据输入口
reg[3:0]Q;
regTC,s;always@(posedgeCPornegedgeMR
)//CP时钟输入端(上升沿有效)
begin
s<=CET&CEP;
if(!MR)beginQ=0;end//MR异步清除输入端(低电平有效)elsebeginif(!PE)beginQ=P;end//PE同步并行置入控制端(低电平有效)elseif(s)beginQ=Q+1;if(Q==4'b1111)beginTC=1;endelsebeginTC=0;endendelsebeginQ=Q;endend
endendmodule
4-11用Verilog设计一个功能类似74LS160的计数器。同步十进制计数器74LS160moduleCNT10(CP,MR,CET,CEP4-11用Verilog设计一个功能类似74LS160的计数器。modulestimulus;regCP,MR,CET,CEP;reg[3:0]P;//,QregPE;wire[3:0]Q;wireTC;CNT10r1(CP,MR,CET,CEP,PE,TC,Q,P);initialCP=1'b0; //?CP???0always#5CP=~CP; //?5???????????initialbeginCET=1'b0;MR=1'b1;PE=1'b1;P=4'd0;CEP=1'b0;#5P=4'd5;#5CET=1'b1;CEP=1'b1;#10MR=1'b0;#10MR=1'b1;#30P=4'd7;#5PE=1'b0;#5PE=1'b1;#50PE=1'b0;#3PE=1'b1;#20P=4'd9;#100PE=1'b0;#10PE=1'b0;#10PE=1'b1;#20P=4'd4;#20$finish; endinitial$monitor($time,"CP=%b,MR=%b,CET=%b,CEP=%b,PE=%b,TC=%b,Q=%d,P=%d",CP,MR,CET,CEP,PE,TC,Q,P);endmodule4-11用Verilog设计一个功能类似74LS160的习题
4-12给出含有异步清零和计数使能的16位二进制加减可控计数器的VerilogHDL描述。moduleupdowncnt16_v(q,cout,d,load,ena,clk,clr,up_down);input[15:0]d;inputload,ena,clk,clrc,up_down;output[15:0]q;outputcout;reg[15:0]q;always@(posedgeclkornegedgeclr
)beginif(!clr)q=16‘h00;//异步清零,低电平有效
elseif(ena)begin//计数使能端,高电平有效
if(!load)q=d;//同步置数,高电平有效
if(up_down)q=q+1;
//up_down=1时,加计数
elseq=q-1;end//up_down=0时,减计数
endassigncout=up_down?&q:|q;
//cout=1表示进位输出或者cout=0表示借位输出
endmodule
up_down=1(进行加法操作)且输出q[15:0]=0xFFFFh时,cout=1表示进位输出up_down=0(进行减法操作)且q[15:0]=0x0000h时,cout=0表示借位输出
习题4-12给出含有异步清零和计数使能的16位4-13分别给出以下6个RTL图的Verilog描述,注意其中的D触发器和锁存器的表述。图4-28RTL图1图4-29RTL图2图4-30RTL图3图4-31RTL图4图4-32RTL图5图4-33RTL图64-13分别给出以下6个RTL图的Verilog描述,注4-13分别给出以下6个RTL图的Verilog描述,注意其中的D触发器和锁存器的表述。moduleRTL1(CLK,CL,OUT);outputOUT;inputCLK,CL;regQ;wireD;/*用assign连续赋值语句不可以*/assignOUT=~Q;assignD=~(Q|CL);/*用门级电路可以*///not(OUT,Q);//nor(D,Q,CL);always@(posedgeCLK)Q=D;endmodule图4-28RTL图1CycloneII系列可以,M7000S也可以4-13分别给出以下6个RTL图的Verilog描述,注4-13分别给出以下6个RTL图的Verilog描述,注意其中的D触发器和锁存器的表述。图4-29RTL图2moduleRTL2(A,B,C,D,Y);outputY;inputA,B,C,D;wireTP1,TP2;regY;//or(TP1,A,B);/*用门级电路可以*///and(TP2,C,D);assignTP1=A|B;/*用assign连续赋值语句也可以*/assignTP2=C&D;always@(TP1,TP2,A)beginif(TP1==1)Y=TP1^TP2;elseY=A;endendmoduleCycloneII系列可以,M7000S也可以4-13分别给出以下6个RTL图的Verilog描述,注4-13分别给出以下6个RTL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年基本药物知识考核-通关题库带答案详解(综合卷)
- 2026年法律职业资格之法律职业客观题二考前自测高频考点模拟试题及参考答案详解(突破训练)
- 北京北京市纪委市监委所属事业单位2025年第二次招聘12人笔试历年参考题库附带答案详解(5卷)
- 2026年低压电工操作证理论全国试题(必刷)附答案详解
- 2026年中职学校文化课语文作文模拟题附答案详解【满分必刷】
- 2026年招标师《专业实务》通关提分题库附答案详解【满分必刷】
- 2026年泰和县教育卫生事业单位引进高层次人才考试参考题库及答案解析
- 2026年四级消防设施操作员(监控)考核经典例题【考试直接用】附答案详解
- 2026年儿童生长发育知识竞赛能力检测及参考答案详解【培优B卷】
- 2026年普通话道试题(得分题)【考点精练】附答案详解
- 2025年低空飞行器噪声控制技术标准体系研究报告
- 糖尿病性胃轻瘫的护理
- 机械制造基础卢秉恒课件
- 江西省九校重点中学2026届高三年级第一次联合考试英语(含答案)
- 中医内科接诊能力培训
- 重体力劳动者健康风险特征研究
- 2024年浙江省公务员考试《行测》试题及答案解析(A类)
- 不锈钢天沟施工方案范本
- 医师病理学试题及答案
- 2025-2030港口岸电与电动船舶充电设施配套规划
- 一汽解放安全培训课件
评论
0/150
提交评论