版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EDA技术与电子工程设计第4章常用电路VerilogHDL设计本章我们通过具体实例说明如何用VerilogHDL设计一些常用的数字电路,这里我们给出了VerilogHDL描述模型和综合后的原理图。本章我们还介绍了一些比较复杂的VerilogHDL设计的综合实例,这些例子说明了可综合VerilogHDL层次设计的方法。4.1常用组合电路模块的设计4.1.1简单门电路的描述1.基本门电路的描述下面是一个简单的门电路的例子,我们用几种方式对同一个门电路进行了描述。例4.1(1)调用门原语modulegate1(a,b,c,d,z);inputa,b,c,d;outputz;nor(s1,b);or(s2,a,b);and(s3,s1,c,d);nand(z,s2,s3);endmodule如图4-1所示是其综合以后的原理图。图4-1简单的门电路(2)用assign连续赋值语句描述102第4章常用电路VerilogHDL设计modulegate2(a,b,c,d,z);inputa,b,c,d;outputz;wires1,s2,s3;assigns1=~b;assigns2=a|b;assigns3=s1&c&d;assignz=~(s2&s3);endmodule用如下代码描述电路是等效的modulegate3(a,b,c,d,z);inputa,b,c,d;。outputz;assignz=~((a|b)&(~b&c&d));endmodule如图4-2所示是其综合以后的原理图。图4-2简单的门电路(3)用过程赋值语句描述modulegate4(a,b,c,d,z);inputa,b,c,d;outputz;regz;regs1,s2,s3;always@(aorborcord)begins1=~b;s2=a|b;s3=s1&c&d;103EDA技术与电子工程设计z=~(s2&s3);endendmodule同样,我们还可以用如下代码描述。modulegate5(a,b,c,d,z);inputa,b,c,d;outputz;regz;always@(aorborcord)beginz=~((a|b)&(~b&c&d));endendmodule其综合以后的原理图与图4-2所示是一样的。2.三态门下面我们分别用VerilogHDL的关键字、assign语句和过程赋值语句三种方式来描述一个三态门,该三态门有一个输入端a、一个输出端y和一个控制端en。当控制端en为1y=a;当控制端en为0(低)时,(高)时,输出为高阻态。例4.2(1)用bufif1关键字描述的三态门moduletristate1(en,a,y);inputen,a;outputy;triy;bufif1tri_1(y,a,en);endmodule如图4-3所示是其综合以后的原理图。图4-3三态门(2)用assign语句描述的三态门104第4章常用电路VerilogHDL设计moduletristate2(en,a,y);inputen,a;outputy;assigny=en?a:1'bz;endmodule(3)用过程赋值语句描述的三态门moduletristate3(en,a,y);inputen,a;outputy;regy;always@(enora)beginif(en)y=a;elsey=1'bz;endendmodule3.三态双向驱动器下面我们来描述一个三态双向驱动器例4.3三态双向驱动器modulebidir(en,a,b,z,y);inputen,a,b;outputz;inouty;assigny=en?a:1'bz;assignz=y^b;endmodule如图4-4(a)所示是其综合以后的原理图,(b)是其用MAX+plusII编译生成的模块符号。105EDA技术与电子工程设计(a)(b)图4-4三态双向驱动器4.1.2译码器1.2-4译码器下面是一个用连续赋值语句描述的2-4译码器。例4.42-4译码器moduledecoder2_4(a,b,en,y);inputa,b,en;output[3:0]y;wireabar,bbar;assignabar=~a;assignbbar=~b;assigny[0]=~(en&abar&bbar);assigny[1]=~(en&abar&b);assigny[2]=~(en&a&bbar);assigny[3]=~(en&a&b);endmodule如图4-5所示是其综合后的原理图。106第4章常用电路VerilogHDL设计图4-52-4译码器3-8译码器下面的例子我们用case语句描述了一个3-8译码器。例4.53-8译码器moduledecoder3_8(s1,s2,s3,in,y);input[2:0]in;inputs1,s2,s3;output[7:0]y;reg[7:0]y;wires;always@(inors1ors2ors3)beginif(~s1)y=8'b11111111;elseif(~(s2&s3))y=8'b11111111;elsebegincase(in)3'd0:y=8'b11111110;3'd1:y=8'b11111101;3'd2:y=8'b11111011;3'd3:y=8'b11110111;3'd4:y=8'b11101111;3'd5:y=8'b11011111;3'd6:y=8'b10111111;107EDA技术与电子工程设计3'd7:y=8'b01111111;endcaseendendendmodule如图4-6所示是其综合后的原理图。图4-63-8译码器这一例子中,我们可以用if-else语句来代替case语句。例4.6moduledecoder3_82(y,in,s1,s2,s3);output[7:0]y;input[2:0]in;inputs1,s2,s3;reg[7:0]y;108第4章常用电路VerilogHDL设计always@(inors1ors2ors3)beginif(~s1)y=8'b11111111;elseif(~(s2&s3))y=8'b11111111;if(in==0)elseelseelseelseelseelseelseelseendy=8'b11111110;if(in==1)y=8'b11111101;if(in==2)y=8'b11111011;if(in==3)y=8'b11110111;if(in==4)y=8'b11101111;if(in==5)y=8'b11011111;if(in==6)y=8'b10111111;y=8'b01111111;endmodule如图4-7所示是其综合后的原理图。109EDA技术与电子工程设计图4-73-8译码器从这些例子我们可以看出,用不同的方法描述所综合出来的电路是不一样的。2.七段LED数码管显示译码器下面的模块描述了一个七段LED数码管显示译码器。例4.7moduledecode4_7(d0,d1,d2,d3,a,b,c,d,e,f,g);inputd0,d1,d2,d3;outputa,b,c,d,e,f,g;rega,b,c,d,e,f,g;always@(d0ord1ord2ord3)begincase({d3,d2,d1,d0})4ˊd0:{a,b,c,d,e,f,g}=7ˊb1111110;110第4章常用电路VerilogHDL设计4ˊd1:{a,b,c,d,e,f,g}=7ˊb0110000;4ˊd2:{a,b,c,d,e,f,g}=7ˊb1101101;4ˊd3:{a,b,c,d,e,f,g}=7ˊb1111001;4ˊd4:{a,b,c,d,e,f,g}=7ˊb0110011;4ˊd5:{a,b,c,d,e,f,g}=7ˊb1011011;4ˊd6:{a,b,c,d,e,f,g}=7ˊb1011111;4ˊd7:{a,b,c,d,e,f,g}=7ˊb1110000;4ˊd8:{a,b,c,d,e,f,g}=7ˊb1111111;4ˊd9:{a,b,c,d,e,f,g}=7ˊb1111011;default:{a,b,c,d,e,f,g}=7ˊbx;endcaseendendmodule在上一章中,我们已经对这一电路进行了描述,并给出了其综合以后的原理图。4.1.3编码器下面的例子我们用if-else语句实现了一个8-3优先编码器。if-else条件语句的分支是有优先顺序的,该模块正是利用了其这一特点,编码器的输入为a、b、c、d、e、f、g、h,输入信号高电平有效,h的优先级最高。例4.88-3优先编码器moduleencoder8_3(a,b,c,d,e,f,g,h,none_on,outcode);inputa,b,c,d,e,f,g,h;outputnone_on;output[2:0]outcode;reg[3:0]outtemp;assign{none_on,outcode}=outtemp;always@(aorborcordoreorforgorh)beginif(h)outtemp=4'b0111;elseif(g)outtemp=4'b0110;elseif(f)outtemp=4'b0101;elseif(e)outtemp=4'b0100;elseif(d)outtemp=4'b0011;elseif(c)outtemp=4'b0010;elseif(b)outtemp=4'b0001;elseif(a)outtemp=4'b0000;111EDA技术与电子工程设计elseouttemp=4'b1000;endendmodule如图4-8所示是其综合以后的原理图。图4-88-3优先编码器用MAX+plusII对该电路进行仿真,得到如图4-9所示的波形图。图4-98-3优先编码器仿真波形4.1.4数据选择器下面我们来描述一个数据选择器例4.94选1数据选择器112第4章常用电路VerilogHDL设计modulemul4_1(d0,d1,d2,d3,sel,z);inputd0,d1,d2,d3;input[1:0]sel;outputz;regz;always@(d0ord1ord2ord3orsel)begincase(sel)2'b00:z=d0;2'b01:z=d1;2'b10:z=d2;default:z=d3;endcaseendendmodule在上一章不同抽象级别的VerilogHDL模型中,我们还用其它的方式描述了数据选择器模型的建立,这里不再赘述。如图4-10所示是其综合以后的原理图。图4-104选1数据选择器4.1.5数字比较器下面我们来描述一个数据比较器,输入为无符号数。例4.10modulecompare2(a,b,eq,gt,lt,ne,ge,le);parametern=2;input[n-1:0]a,b;outputeq,gt,lt,ne,ge,le;reg[5:0]result;113EDA技术与电子工程设计always@(aorb)if(a==b)result=6'b100011;elseif(a>b)result=6'b010110;else//(a<b)result=6'b001101;assign{eq,gt,lt,ne,ge,le}=result;endmodule如图4-11所示是其综合后的原理图。图4-11数字比较器4.1.6奇偶校验器下面的例子我们描述的是一个输入为8位的奇偶校验器,对并行输入的8位数据进行奇偶检测,产生奇校验位odd_bit和偶校验位even_bit。例4.11moduleparity(even_bit,odd_bit,in);outputeven_bit,odd_bit;input[7:0]in;assignodd_bit=^in;assigneven_bit=~odd_bit;endmodule如图4-12所示是其综合后的原理图。114第4章常用电路VerilogHDL设计图4-12奇偶校验器4.1.7算术逻辑运算单元下面描述的是一个算术逻辑运算单元,其逻辑功能为:加、与非、比较和异或。我们用一个连续赋值语句来实现。例4.12modulesimp_alu(a,b,opcode,dataz,compz);parametern=2;input[n-1:0]a,b;input[1:0]opcode;output[n-1:0]dataz;outputcompz;parameteradd_op=0,nand_op=1,gt_op=2,xor_op=3;assigndataz=(opcode==add_op)?a+b:(opcode==nand_op)?~(a+b):(opcode==xor_op)?a^b:'bx;assigncompz=(opcode==gt_op)?a>b:'bx;endmodule如图4-13所示是其综合后的原理图。115EDA技术与电子工程设计图4-13ALU单元在这一节中,我们描述了一些常用的组合逻辑电路模块,我们看到主要有两种方式来描述组合逻辑电路:一种是用连续赋值语句assign描述,一种是用过程赋值语句always块描述。这两种方式中,用连续赋值语句描述的组合逻辑电路更为自然,和硬件电路有明确的对应关系,中间变量,中有明确的层次也比较清楚;用过程赋值语句描述的组合逻辑电路需要寄存器类型的间变量可以多处使用,不对应于某一连线,其所综合出的逻辑可能和描述没对应关系,所以我们建议尽量使用连续赋值语句来描述组合逻辑电路。4.2常用的时序电路模块的设计4.2.1D触发器1.简单的D触发器下面我们看一个基本D触发器的例子例4.13moduledff(d,clk,q);input[7:0]d;inputclk;output[7:0]q;reg[7:0]q;always@(posedgeclk)q=d;endmodule116第4章常用电路VerilogHDL设计如图4-14所示是其对应的综合后的原理图。图4-14基本D触发器2.带异步清D触发器。0、异步置1端的下面的例子给基本D触发器加上了异步清0、异步置1端。例4.14moduledff_async(d,reset,preset,clk,q);inputd,reset,preset;inputclk;outputq;regq;always@(posedgeclkorposedgepresetornegedgereset)if(~reset)q=1'b0;elseif(preset)q=1'b1;elseq=d;endmodule如图4-15所示是其综合后的原理图。图4-15带异步清0、异步置1端的D触发器3.带同步清0、同步置1端的D触发器下面我们来描述一个同步清0、同步置1的D触发器。117EDA技术与电子工程设计例4.15moduledff_sync(d,reset,preset,clk,q);inputd,reset,preset;inputclk;outputq;regq;always@(posedgeclk)if(~reset)q=1'b0;elseif(preset)q=1'b1;elseq=d;endmodule如图4-16所示是其综合后的原理图。图4-16带同步清0、同步置1端的D触发器。4.2.2数据锁存器1.数据锁存器1下面的例子我们描述了一个电平敏感的一位数据锁存器。例4.16moduled_latch(d,enable,q,qn);inputenable,d;outputq,qn;regq,qn;always@(dorenable)beginif(enable)begin118第4章常用电路VerilogHDL设计q=d;qn=~q;endelseendbeginq=q;qn=~q;endendmodule如图4-17所示是其综合后的原理图。图4-17电平敏感一位数据锁存器2.数据锁存器下面我们给上例中锁存器加上复位信号,其描述如下。例4.17moduled_latch_asyn(d,enable,reset,q);inputenable,d,reset;outputq;regq;always@(dorenableorreset)if(~reset)q=1'b0;elseif(enable)q=d;elseq=q;endmodule如下图4-18所示是其综合后的原理图。119EDA技术与电子工程设计图4-18带复位信号的数据锁存器4.2.3数据寄存器下面的例子描述的是一个8位数据寄存器。该寄存器每次对8位并行输入数据信号同步寄存,并带有一个高电平有效的异步清0控制端。例4.18modulereg8(d,clk,clr,q);input[7:0]d;inputclk,clr;output[7:0]q;reg[7:0]q;always@(posedgeclkorposedgeclr)if(clr)q=8'b0;elseq=d;endmodule如下图4-19所示是其综合后的原理图。120第4章常用电路VerilogHDL设计图4-198位数据寄存器数据寄存器和数据锁存器是两种不同的电路,两者都具有数据寄存的功能,但数据锁器一般由电平信号来控制,寄存器一般由同步时钟信号控制。两者使用在不同的场合:若属于电平敏感型电路,数据有效滞后于控制信号有效,则只能使用锁存器;若数据有效提前于控制信号,并要求同步,则使用数据寄存器。4.2.4移位寄存器下面的例子我们设计了一个通用的移位寄存器。该移位寄存器能实现串行输入、串行移位输出;并行输入,串行移位输出;串行输入,并行移位输出;并行输入,并行移位输出的功能。其功能表如下:S0S1Q[2]Q[2]Q[1]Q[1]Q[0]Q[0]00011011Q[1]Q[0]RightinQ[1]LeftinParin[2]Q[2]Partin[1]Partin[0]例4.19modulereg_shift2(partin,leftin,rightin,s0,s1,clk,clr,q);output[2:0]q;input[2:0]partin;inputclk,clr,leftin,rightin,s0,s1;reg[2:0]q;121EDA技术与电子工程设计always@(posedgeclkornegedgeclr)if(~clr)q=3'b000;elsecase({s0,s1})2'b00:q=q;2'b01:q={q[1:0],rightin};2'b10:q={leftin,q[2:1]};2'b11:q=partin;endcaseendmodule如图4-20是其综合后的原理图。图4-203位通用移位寄存器4.2.5计数器1.二进制计数器下面我们描述一个加法/减法计数器。Updown是计数器的加/减控制端,Load是同步预置端,Reset是同步清0端。例4.20modulebin_counter(datain,load,reset,updown,clk,q);parametern=8;input[n-1:0]datain;inputclk,updown,load,reset;122第4章常用电路VerilogHDL设计output[n-1:0]q;reg[n-1:0]counter;assignq=counter;always@(posedgeclk)if(~reset)counter<=0;elseif(load)counterelse<=datain;if(updown)counter<=counter+1;elsecounter<=counter-1;endmodule综合后其原理图如图4-21所示。图4-21加法/减法计数器2.格雷码计数器下面的例子描述的是一个格雷码计数器,格雷码的产生遵守如下规则:第一比特(最左一位)不变,第二比特由第一位与第二位异或产生,第三比特由第二位与第三位异或产生,依此类推。例4.21modulegray_counter(reset,clk,q);123EDA技术与电子工程设计parametern=3;inputclk,reset;output[1:n]q;reg[1:n]counter,graytemp;integeri;always@(posedgeclk)if(~reset)counter<=0;elsecounter<=counter+1;always@(counter)begingraytemp[1]=counter[1];for(i=2;i<=n;i=i+1)graytemp[i]=counter[i-1]^counter[i];endassignq=graytemp;endmodule如图4-22所示是其综合以后的原理图。图4-22格雷码计数器3.约翰逊计数器124第4章常用电路VerilogHDL设计约翰逊计数器是一种移位计数器,其产生规则是:如果最左端的一位是1,则左移并在最后一位添0;如果最左端的一位是0,则左移并在最后一位添1。下面的例子描述的是一个三位的约翰逊计数器。例4.22modulejohnson_counter(reset,clk,q);parametern=3;inputclk,reset;output[1:n]q;reg[1:3]q;always@(posedgeclk)if(~reset)q<=0;elsebeginif(!q[1])q<={q[1:n-1],1'b1};elseq<={q[1:n-1],1'b0};endendmodule如图4-23所示是其综合后的原理图。图4-23约翰逊计数器4.2.6ROM/RAM模块例4.23描述了一个RAM块,该RAM块的尺寸为256×8,即数8位。该RAM块的设计,lpm_ram_dp函数描述的是一个输入/输出端据总线和地址总线的宽度均为调用了MAX+plusII软件的LPM宏单元库中的lpm_ram_dp函数,口分开的参数化的RAM模块。125EDA技术与电子工程设计例4.23moduleram256x8(data,wraddress,rdaddress,input[7:0]data;wren,clock,q);input[7:0]wraddress;input[7:0]rdaddress;inputwren;inputclock;output[7:0]q;wire[7:0]sub_wire0;wire[7:0]q=sub_wire0[7:0];lpm_ram_dplpm_ram_dp_component(.rdclock(clock),.wren(wren),.wrclock(clock),.data(data),.rdaddress(rdaddress),.wraddress(wraddress),.q(sub_wire0));defparamlpm_ram_dp_component.lpm_width=8,lpm_ram_dp_component.lpm_widthad=8,lpm_ram_dp_component.lpm_indata="REGISTERED",lpm_ram_dp_component.lpm_wraddress_control="REGISTERED",lpm_ram_dp_component.lpm_rdaddress_control="REGISTERED",lpm_ram_dp_component.lpm_outdata="UNREGISTERED",lpm_ram_dp_component.lpm_hint="USE_EAB=ON";endmodule利用LPM宏单元库的lpm_ram_dp,可以方便地构成任意大尺寸的RAM块。该RAM块的内容存储于与其名称对应的﹒mif(MemoryInitializationFile)文件中,MIF文件是一个ASCII文本文件,其可以手工创建,也可以是模拟仿真的输出结果。4.2.7有限状态机(FSM)设计有限状态机FSM(FiniteStateMachine)是时序逻辑电路经常采用的一种方式,经常用于设计数字系统的控制模块,是许多数字电路的核心。状态的转换是设计者预先安排好的,用VerilogHDL的case、if-else语句可以:当前状态寄存器、下一状态产生逻辑电路和输出逻辑当前状态寄存器属于寄存器(时序)逻辑电路,用于存储状态它们不仅与输入信号有关,而且关。根据输出信号产生方法的不同,状态机可分为两类:米里型(Mealy)和摩尔型(Moore),摩尔型状态机的输出仅是当前状态的函数,米里型状态很好地描述基于状态机的设计。一个有限状态机由三部分组成产生电路。向量。下一状态产生逻辑电路和输出逻辑产生电路都属于组合逻辑电路,与寄存器当前所处的状态有126第4章常用电路VerilogHDL设计机的输出是当前状态和当前输入的函数。实用的状态机一般都设计为同步时序电路,它在时钟信号的触发下完成各个状态之间的转移。并且通常使用一个异步的复位信号,保证状态机加电后进入一个已知的有效状态。对于复位后的起始状态应选择合理,以保证整个系统的简捷高效。状态机有3种方法表示:状态图、状态表和流程图,这三种方法是等价的,相互之间可以转换。一般地常用状态图的方法表示。由于FPGA器件的寄存器数量比较多,采用一位热码编码方式能有效地提高电路的性能和可靠性,有利于提高器件资源的利用率,因此,常建议采用该编码方式。所谓一位热码编码,是就采用n位(或n个触发器)来编码具有n个状态的状态机。采用一位热码编码能有效地节省和简化组合逻辑电路。下面有例子描述的是一个摩尔型状态机,用case语句很好地描述其状态转换关系,输出逻辑可放置在相应的分枝描述。例4.24modulemooreFSM(a,clk,z);inputa,clk;outputz;regz;parameters0=0,s1=1,s2=2,s3=3;reg[1:0]state;always@(posedgeclk)case(state)s0:beginz<=1;state<=(!a)?s0:s1;ends1:beginz<=0;state<=(!a)?s1:s2;ends2:beginz<=0;state<=(!a)?s3:s0;ends3:beginz<=1;state<=(!a)?s2:s3;end127EDA技术与电子工程设计endcaseendmodule如图4-24所示是其综合后的原理图。图4-24摩尓型状态机原理图例4.25上面的例子我们还可以这样描述,将状态的转换与输出逻辑分别用两个always语句来描述。modulemooreFSM2(a,clk,z);inputa,clk;outputz;regz;parameters0=0,s1=1,s2=2,s3=3;reg[1:0]state;always@(posedgeclk)case(state)s0:state<=(!a)?s0:s1;s1:state<=(!a)?s1:s2;s2:state<=(!a)?s3:s0;s3:state<=(!a)?s2:s3;endcasealways@(posedgeclk)case(state)s0:z<=1;128第4章常用电路VerilogHDL设计s1:z<=0;s2:z<=0;s3:z<=1;endcaseendmodule图4-25是其综合后的原理图图4-25摩尓型状态机原理图下面我们来描述一个米里型状态机的例子,一般地用两个always语句来描述米里型状态机,一个用来描述其时序逻辑,一个用来描述组合逻辑(包括次态逻辑和输出逻辑)。例4.26modulemealyFSM(a,reset,clk,z);inputa,reset,clk;outputz;regz;parameterst0=4'b00,st1=4'b01,st2=4'b10;reg[0:1]current_s,next_s;always@(posedgeresetorposedgeclk)if(reset)current_s<=st0;elsecurrent_s<=next_s;always@(current_sora)case(current_s)st0:beginz=(a)?1:0;129EDA技术与电子工程设计next
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事务所审计五一加班制度
- 产业园内部审计制度
- 介入科绩效考核制度
- 企业内部审计相关制度
- 企业管理审计制度
- 医院内部审计制度大全
- 医用耗材采购审计制度
- 医院合疗科绩效考核制度
- 医院科室财务规章制度
- 华绩效考核制度
- 5.1人民代表大会制度 课件(23张幻灯片)+内嵌视频 道德与法治统编版八年级下册
- 高考18个文言虚词用法详解
- 超高性能混凝土进展及工程应用
- 旋毛虫法语课件
- 五原县供热工程专项规划(2014-2030年) 说明书
- 上海市2023年基准地价更新成果
- 拔牙术拔牙并发症
- 选派援疆医疗卫生人才协议书
- XB/T 405-2016铈铁合金
- GB/T 9966.16-2021天然石材试验方法第16部分:线性热膨胀系数的测定
- GB/T 3733.2-1983卡套式端直通接头体
评论
0/150
提交评论