第九章 硬件描述语 9.1本章习题类型与解题方法 这章的习题可以分为两种类型:一类是用 Verilog hDl语言描述一个逻辑 电路;另一类是根据 Verilog HDl谙言的描述画出相应的逻辑电路图 用 Verilog HDL语言描述一个逻辑电路 解题方法和步骤: Verilog HD描述逻辑电路的基本单元是模块。对仼何一个待描述的电路 在进行模块命名后,首先要说明电路的输入/输岀接冂;然后根据所给的条件选 择适当的描述方式。用硬件描述语描述电路的程序不唯 二、根据 Verilog HD语言的描述画出相应的逻辑电路图 解题方法和步骤 直接用逻辑图形符号取代语言描述中的关键字,将这些图形符号按从输入 到输出的顺序连接起来,就得到所求的逻辑电路图。 9.2习题解答 【题9.1】用 Verilog HDL语言的结构描述方式,描述图門.电路的逻辑 功能。 CBA Result ANDI 图.1
266第九章硬件猫述话言 A: module Judge(A, B, C, Result input A, B, C outpul Result ORI(T, B, C) ANDI( Result, A, T) endmodule 题9.2】用 Verilog H语言实现对【题46】所要设计电路的逻辑坊能描述。 解:题4.6要求用门电路实现一个控制两台水泵的逻辑电路,而且应力求 电路简单。根据设计要求得到的电路见图A9.2(参见【题4.6】的解答。G4为 同相输出的缓冲器,用于输出与输人间电路上的隔离。) ACB 图A9.2 rmodule control(A, B, C, L,, s) Input A, B. c tput I,s wire Bnot wire I; not GI( Bnot, B): and G2(T, Bnot, c) G3(S, A, T) buf GA(L, B) endmodule
92习题解答267 【题9.3】用Ⅴ erilog HDL语言描述一个4选1数据选择器。 解:4选1数据选择器的功能如图A9.3所示。 Mux 4to 1 da[3] data[2] datall se! [l], se! [O] out=(sel[I])'( sel[o])'. data[0]+(sel[ l])' (sel[0]). data[ 1]+ sel[ 1])(sel[o])'.data[2]+(sel[1])(sel[o]). data[ 3] module mux_ 4_to_1( data, out, outnot, sel) ∥这是一个4选1数据选择器,名为mux4_t_1 input[3:0]data;∥定义模块的数据输入端口为date0]~ datel[3] inpu[l:0]sel;∥定义模块的数据选择输人端口seL[l],sel[0 output out, outnot;∥定义该模块的输出端口为out和 outnot out always@( data or sel) case ∥分支控制语句开始 2’b00:out=daa[0] ∥如果seI[1]el[0」=00,将data[0]赋值给out 2’b0l:out=data[1] ∥如果sel1lel0]=01,将data[1]赋值给out 2’bl0:out=data[2] ∥如果 sel[ 1]sel0]=10,将data[2]赋值给out 2 bll: out data[ 3] ∥如果seI[l]sel[0]=11,将dats3]赋值给out endcase ∥分支控制语句结束 assign outnot=-out;∥将out取反后赋值给 outnot
268第九章硬作描述语青 endmodule ∥模块描述结束 【题9.4】用 Verilog hDl语言描述一个4位超前进位加法器。 解:4位超前进位加法器的原理和实现见4.3.4节。其银本的解决思路是 设法减小或消除由于进位信号逐级传递所耗费的时间,在相加运算开始的同时 就知道高位的进位信号。因此每一位在计算本位结果的同时,还需要有一个模 块根据低位的输入计算出该位所需要的进位信号。 电路大致可以分为两个部分:第一部分计算各位的相加结果,首先定义一个 不进行进位运算的1位加法器 adder l bit,各位的相加运算可以通过调用来实现。 So=A,OB,eCI S1=A1由B,⊕C S2=A2⊕B2C2 s,=A-OBec 其屮A、B和C是整个加法器电路的输人,C1、C2和C3则需要第二部分电 路来实现。第二部分电路根据A、B和CⅠ计算出各位的进位信号,据分析可得 各位的进位信号如下 C1=ABn+(A。+B0) C2=A,B1+(A1+B1)(A。B+(A+B)CD) C3=A2B2+(A2+B2)(A1B1+(A:+B1)(AB+(A+B0)C1)) C1、C2和C3都直接输入信号A、B和C唯一确定,因此可以通过逻辑运 算求出每一位全加器所需的进位信号。根据以上的分析,可以得到如下的用 Verilog HDl.语言描述程序。 ∥主模块 module adder _4bil(A, B, s. Cl, CO) input CI input [3: 0A, B; outpul CO output「3:0]S; wire C1. C2. C3 adder_] bit mo(S[OJ, A[O],BlOl, CI ∥调用 adder1bi模块,生成模块m0 ml(S[1],A[1],B[l],CI ∥调用ader1bit模块,生成模块m1 2(S[2],A[2],B[2],C2) ∥调用 adder i bit模坎,生成模块m2 m3(S[3],A[3],B[3],C3);
9.2以题解答269 ∥调用ader-1bit模块,生成模块m3 m4(A[0],B[0J,CI,C1); ∥调用 Carryl模块,生成模块 m5(A[0],B[0],A[1],B[l,Cl,C2) ∥调用Cary2模块,生成模块m5 arI 3m6(A[0],B0],A[1],B],A[2],B[2],CI,C3); ∥调用Cary3模块,生成模块m6 arty m7(A0],B[0],A[1],B[1],A[2],B[2],A[3],B[3],CI,CO) ∥调用Cary4模块,生成模块m7 d module ∥1位的全加器模块(不计算进位信号) ule adder_l bit(a, b,c input a, b, c tput xor g2 (sum, d, c) endmodule ∥通过A0,B0,C计算C1 module Carry 1(AO, B0, CT, Cl) C assign Cl =((AO&&B0)"((ao -B0)&&CI) endmodule ∥通过A0,B0,A1,B1和CI计算C2 module Carry2( A0, BO, Al, BI, CI, C2) input AO, B0, Al, BI, Cl tput wire Cltemp; Carry I foreI(AO, B0, CI, CI temp) assign C2=(Al&&B1)-((AlB1)&&Cltemp) endimodu
27第九章硬件描述语言 ∥通过A0,B0,A1,B1,A2,B2和C1计算C3 nodule Carry3(AO, BO, Al, B1, A2, B2, CL, C3 input AO, B0, Al, Bl, A2, B2, CI wire C2temp Carry 2 forc:2(A0, B0, Al, BI, Cl, C2temp) assign C3 =(A2&&B2)-((A2-B2 )&&C2temp) endmodule ∥通过A0,BO,AI,B1,A2,B2,A3,B3和CU计算C4 module Carry 4( AO, B0, Al, Bl, A2, B2, A3, B3, CI, C4) input AO, BO, Al, B1, A2, B2, A3, B3, CI outpul C4: 3 forc 3 (AO, B0, Al, B1, A2, B2, Cl, C3temp); assign C4=(A3 & b3)-"((A3-"B3 )& C3temp) endmodule 【题9.5】请根据下面所给的语言描述,画出对应的逻辑电路图。 module binary To ESeg wire eSeg, pl, p2, p3, P4 reg A, B, C, D: (pl,C,~D), 2(p2,A,B) (p3,~B,~D) B (eSeg, p1, p2, p3, p4 endmodul A 解:见图A9.5