VerilogHDL设计初步习题.ppt_第1页
VerilogHDL设计初步习题.ppt_第2页
VerilogHDL设计初步习题.ppt_第3页
VerilogHDL设计初步习题.ppt_第4页
VerilogHDL设计初步习题.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章 Verilog HDL设计初步,习 题,4-1 举例说明,Verilog HDL的操作符中,哪些操作符的运算结果总是一位的。 答: 书上74.75.80.92页,4-2 wire型变量与reg型变量有什么本质区别,它们可用于什么类型语句中? 答:书上P2612629.2 Verilog HDL数据类型 reg主要是用于定义特定类型的变量,即寄存器型(Register)变量(或称寄存器型数据类的变量)。如果没有在模块中显式地定义信号为网线型变量,Verilog综合器都会将其默认定义为wire型。过程语句always引导的顺序语句中规定必须是reg型变量。 wire型变量不允许有多个驱动源,习 题,4-3 阻塞赋值和非阻塞赋值有何区别? 答:Verilog中,用普通等号“=”作为阻塞式赋值语句的赋值符号,如y=b。 Verilog中,用普通等号“=”作为非阻塞式赋值语句的赋值符号,如y=b。 阻塞式赋值的特点是,一旦执行完当前的赋值语句,赋值目标变量y即刻获得来自等号右侧表达式的计算值。如果在一个块语句中含有多条阻塞式赋值语句,则当执行到其中某条赋值语句时,其他语句将禁止执行,即如同被阻塞了一样。 非阻塞式赋值的特点是必须在块语句执行结束时才整体完成赋值操作。非阻塞的含义可以理解为在执行当前语句时,对于块中的其他语句的执行情况一律不加限制,不加阻塞。这也可以理解为,在begin_end块中的所有赋值语句都可以并行运行。,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中的值,于是便产生了时序元件。,module LATCH1 (CLK, D, Q); output Q; input CLK, D; reg Q; always (D or CLK) if(CLK)Q=D; /当CLK=1时D被锁入Q endmodule,4-5 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两种方式。,4-5 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两种方式。,module decoder3_8 ( G1 ,Y ,G2 ,A ,G3 ); input G1, G2, G3; wire G1, G2, G3; input 2:0 A ; wire 2:0 A ; output 7:0 Y ; reg 7:0 Y ; reg s; always ( A ,G1, G2, G3) begin s = G2 | G3 ; if (G1 = 0) Y = 8b1111_1111; else if (s) Y = 8b1111_1111; else case ( A ) 3b000: Y = 8b11111110; 3b001: Y = 8b11111101; 3b010: Y = 8b11111011; 3b011: Y = 8b11110111; 3b100: Y = 8b11101111; 3b101: Y = 8b11011111; 3b110: Y = 8b10111111; 3b111: Y = 8b01111111; default:Y = 8bxxxxxxxx; endcase end endmodule,4-5 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两种方式。,module decoder3_8 ( G1 ,Y ,G2 ,A ,G3 ); input G1, G2, G3; wire G1, G2, G3; input 2:0 A ; wire 2:0 A ; output 7:0 Y ; reg 7:0 Y ; reg s; always ( A ,G1, G2, G3) begin s = G2 | G3 ; if (G1 = 0) Y = 8b1111_1111; else if (s) Y = 8b1111_1111; else begin if (A=3b000)Y=8b11111110; else if (A=3b001)Y=8b11111101; else if (A=3b010)Y=8b11111011; else if (A=3b011)Y=8b11110111; else if (A=3b100)Y=8b11101111; else if (A=3b101)Y=8b11011111; else if (A=3b110)Y=8b10111111; else if (A=3b111)Y=8b01111111; else Y=8bxxxxxxxx;end end endmodule,/测试文件,?部分请根据被测试的文件修改 module stimulus; reg 2:0A ; wire7:0Y ; reg G1 ,G2 ,G3; decoder3_8 DUT ( G1 ,Y ,G2 ,A ,G3 ); initial begin $monitor($time,“A=%d,G1=%b,G2=%b, G3=%b,Y= %dn“,A, G1, G2, G3, Y); end,initial begin G1=1 ;G2=1 ;G3=1;A=0; #10 G2=0;G1=0; #10 G2=0;G1=1; #10 G2=1;G1=0;G3=0; #10 G1=0;G1=1;G3=1; #10 G1=0;G1=0;G3=0; #10 G1=1;G2=0;G3=0; #50 A= 0; #50 A= 1; #50 A= 2; #50 A= 3; #50 A= 4; #50 A= 5; #50 A= 6; #50 A= 7; #50 $finish; end endmodule,习 题,4-6 图4-26所示的是双2选1多路选择器构成的电路MUXK。对于其中MUX21A,当s=0和s=1时,分别有y=a和y=b。试在一个模块结构中用两个过程来表达此电路。 答:参考实验1,图4-26 含2选1多路选择器的模块,module MUXK (a1, a2, a3, s0, s1, outy); input a1, a2, a3, s0, s1; output outy; wire outy; wire tmp; mux21a u1 (.a(a2),.b(a3),.s(s0),.y(tmp); mux21a u2 (.a (a1),.b (tmp),.s(s1),.y(outy); endmodule,习 题,4-7 给出1位全减器的VHDL描述。要求: (1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-28中h_suber是半减器,diff是输出差,s_out是借位输出,sub_in是借位输入。 (2)根据图4-27设计1位全减器。 (3)以1位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设计。,图4-27 1位全减器,/一个二进制半减器设计进行了阐述 module h_suber(x,y,diff,s_out); input x,y; output diff, s_out; assign diff=xy; assign s_out=(x) endmodule,module f_suber(x,y,sub_in,diffr,sub_out); /一个二进制全减器顶层设计进行了阐述 output diffr,sub_out; input x,y,sub_in; wire e,d,f; h_suber u1(x,y,e,d); / h_suber u2(.x(e),.diff(diffr),.y(sub_in),.s_out(f);/ or2a u3(.a(d),.b(f),.c(sub_out); endmodule,x为被减数,y为减数, sub_in为低位的借位, diffr为差,sub_out为向高位的借位。,习 题,习 题,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。,module MUX41a (A,B,C,D,S0,S1,S2,S3,Y); output Y; /定义Y为输出信号 input A, B, C, D; input S0,S1,S2,S3; reg Y; /定义输出端口信号Y为寄存器型变量 always (A,B,C,S0,S1,S2,S3 )begin /块语句起始 if (S0=0)Y=A; /当S0 =0成立,即(S0 =0)=1时,Y=A; else if (S1=0)Y=B; /当(S1 =1)为真,则Y=B; else if (S2=0)Y=C; /当(S2 =2)为真,则Y=C; else if (S3=0) Y=D; /当(S3 =3)为真,即Y=D; end /块语句结束 endmodule,4-9 把例4-21改成一异步清0,同步时钟使能和异步数据加载型8位二进制加法计数器。,【例4-21】含有异步清0同步时钟使能和同步数据加载功能的十进制计数器 module CNT10(CLK, RST, EN,LOAD,COUT,DOUT,DATA); input CLK, RST, EN,LOAD; /时钟,时钟使能,复位,数据加载控制信号输入口 input 3:0DATA; /4位并行加载数据输入口 output 3:0 DOUT; /计数数据输出信号口 output COUT; /计数进位输出 reg COUT; reg3:0 Q1; assign DOUT=Q1; /将内部寄存器的计数结果输出至DOUT always (posedge CLK or negedge RST or negedge LOAD) /时序过程 begin if(!RST)Q1=0; /RST=0时,对内部寄存器单元异步清0 else if(!LOAD)Q1=DATA; /当LOAD=0,异步向内部寄存器加载数据 else if(EN)begin /同步使能EN=1,则允许加载或计数 if(Q19)Q1=Q1+1; /当Q1小于9时,允许累加 else Q1=4b0000; /否则一个时钟后清0返回初值 end end always (Q1) /组合电路之过程 if(Q1=4h9)COUT=1b1; /当Q1=1001时,COUT输出进位标志1 else COUT=1b0; /否则,输出进位标志0 endmodule,习 题,4-10 分频方法有多种,最简单的是二分频和偶数分频甚至奇数分频,这用触发器或指定计数模的计数器即可办到。但对于现场实现指定分频比或小数分频率的分频电路的设计就不是很简单了。 试对习题4-9的设计稍作修改,将其进位输出COUT与异步加载控制LOAD连在一起,构成一个自动加载型16位二进制数计数器,也即一个16位可控的分频器,给出其Verilog表述,并说明工作原理。设输入频率fi=4MHz,输出频率fo=516.51Hz(允许误差0.1Hz),16位加载数值=?。(7744),module CNT10(CLK,RST,EN,COUT,DOUT,DATA); input CLK,RST,EN; /时钟,时钟使能,复位,数据加载控制信号输入口 input3:0DATA; / 4位并行加载数据输入口 output3:0DOUT; /计数数据输出信号口 output COUT; /计数进位输出 reg FULL; wire LD ; reg3:0 Q1; always (posedge CLK or posedge LD or negedge RST) /时序过程 begin if(!RST)begin Q1=0;FULL=0;end else if(LD) begin Q1=DATA;FULL=1;end else if(EN)begin Q1=Q1+1;FULL=0;end end assign LD=(Q1=4B0000); assign DOUT=Q1; /将内部寄存器的计数结果输出至DOUT assign COUT=FULL; /输出进位标志0 endmodule,module CNT16(CLK,RST,EN,COUT,DOUT,DATA); input CLK,RST,EN; /时钟,时钟使能,复位,数据加载控制信号输入口 input15:0DATA; / 4位并行加载数据输入口 output15:0DOUT; /计数数据输出信号口 output COUT; /计数进位输出 reg FULL; wire LD ; reg15:0 Q1; always (posedge CLK or posedge LD or negedge RST) /时序过程 begin if(!RST)begin Q1=0;FULL=0;end else if(LD) begin Q1=DATA;FULL=1;end else if(EN)begin Q1=Q1+1;FULL=0;end end assign LD=(Q1=16d0); assign DOUT=Q1; /将内部寄存器的计数结果输出至DOUT assign COUT=FULL; /输出进位标志0 endmodule,4-11 用Verilog设计一个功能类似74LS160的计数器。,同步十进制计数器74LS160,管脚图:,引出端符号: TC 进位输出端 CP 时钟输入端(上升沿有效) CEP 计数控制端 /MR异步清除输入端(低电平有效) Q0Q3 输出端 /PE同步并行置入控制端(低电平有效) CET 计数控制端 P0P3数据输入端,功能表:,说明:H高电平 L低电平 X任意,module CNT10(CP, MR, CET, CEP , PE, TC, Q, P); output 3:0 Q; /计数数据输出端 output TC; /TC进位输出端 input CP,MR,CET,PE,CEP; /时钟,复位,时钟使能,数据加载控制信号输入口 input 3:0 P; /4位并行加载数据输入口 reg3:0 Q; reg TC,s; always(posedge CP or negedge MR ) /CP 时钟输入端(上升沿有效) begin s=CETend end end endmodule,4-11 用Verilog设计一个功能类似74LS160的计数器。,同步十进制计数器74LS160,4-11 用Verilog设计一个功能类似74LS160的计数器。,module stimulus; reg CP,MR,CET,CEP; reg 3:0P;/,Q reg PE; wire3:0 Q; wire TC; CNT10 r1(CP, MR, CET, CEP , PE, TC, Q, P); initial CP=1b0; /?CP?0 always #5 CP=CP; /?5? initial begin CET=1b0;MR=1b1;PE=1b1;P=4d0; CEP=1b0; #5 P=4d5; #5 CET=1b1;CEP=1b1; #10 MR=1b0;,#10 MR=1b1; #30 P=4d7; #5 PE=1b0; #5 PE=1b1; #50 PE=1b0; #3 PE=1b1; #20 P=4d9; #100 PE=1b0; #10 PE=1b0; #10 PE=1b1; #20 P=4d4; #20 $finish; end initial $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); endmodule,习 题,4-12 给出含有异步清零和计数使能的16位二进制加减可控计数器的Verilog HDL描述。,module updowncnt16_v(q,cout, d, load, ena, clk,clr, up_down); input 15:0 d; input load, ena, clk, clrc, up_down; output 15:0 q; output cout; reg 15:0 q; always (posedge clk or negedge clr ) begin if(!clr) q=16h00 ; /异步清零,低电平有效 else if(ena) begin /计数使能端,高电平有效 if(!load)q=d; /同步置数,高电平有效 if(up_down)q=q+1 ; /up_down=1时,加计数 else q=q-1; end /up_down=0时,减计数 end assign cout=up_down? / cout=1表示进位输出或者cout=0表示借位输出 endmodule,up_down=1(进行加法操作)且输出q15:0=0xFFFFh时,cout=1表示进位输出 up_down=0(进行减法操作)且q15:0=0x0000h时,cout=0表示借位输出,4-13 分别给出以下6个RTL图的Verilog描述,注意其中的D触发器和锁存器的表述。,图4-28 RTL图1,图4-29 RTL图2,图4-30 RTL图3,图4-31 RTL图4,图4-32 RTL图5,图4-33 RTL图6,4-13 分别给出以下6个RTL图的Verilog描述,注意其中的D触发器和锁存器的表述。,module RTL1 (CLK, CL, OUT); output OUT; input CLK, CL; reg Q; wire D; /*用assign连续赋值语句不可以*/ assign OUT=Q; assign D=(Q|CL); /*用门级电路可以*/ /not(OUT,Q); /nor(D,Q,CL); always (posedge CLK) Q=D; endmodule,图4-28 RTL图1,Cyclone II系列可以,M7000S也可以,4-13 分别给出以下6个RTL图的Verilog描述,注意其中的D触发器和锁存器的表述。,图4-29 RTL图2,module RTL2(A, B, C, D,Y); output Y; input A, B, C, D; wire TP1,TP2; reg Y; /or(TP1,A,B); /*用门级电路可以*/ /and(TP2,C,D); assign TP1=A|B; /*用assign连续赋值语句也可以*/ assign TP2=C end endmodule,Cyclone II系列可以,M7000S也可以,4-13 分别给出以下6个RTL图的Verilog描述,注意其中的D触发器和锁存器的表述。,图4-30 RTL图3,module RTL3(D1,D2,CLK,Q); output Q; input

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论