Verilog
基本
电路设计
指导书
Verilog 基本电路设计指导书绝密请输入文档编号深圳市华为技术有限公司深圳市华为技术有限公司研究管理部文档中心研究管理部文档中心文档编号版本密级文档编号版本密级1.0内部公开内部公开资源类别资源类别:HDL 语言语言共共 56页页Verilog 基本电路设计指导书基本电路设计指导书(仅供内部使用)拟制:(仅供内部使用)拟制:Verilog Group日期:日期:2000/04/04批准:日期:批准:日期:yyyy/mm/dd批准:日期:批准:日期:yyyy/mm/dd深圳市华为技术有限公司深圳市华为技术有限公司版权所有版权所有 不得复制不得复制2001/02/28版权所有,侵权必究第1 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号修订记录日期修订版本描述作者日期修订版本描述作者2000/04/041.00初稿完成Verilog Group2001/02/281.01修订,主要增加三态和一些电路图苏文彪2001/02/28版权所有,侵权必究第2 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号目 录1 前言52 典型电路的设计52.1 全加器的设计62.2 数据通路62.2.1 四选一的多路选择器62.2.2 译码器72.2.3 优先编码器82.3 计数器92.4 算术操作102.5 逻辑操作102.6 移位操作112.7 时序器件122.7.1 上升沿触发的触发器122.7.2 带异步复位、上升沿触发的触发器122.7.3 带异步置位、上升沿触发的触发器132.7.4 带异步复位和置位、上升沿触发的触发器142.7.5 带同步复位、上升沿触发的触发器152.7.6 带同步置位、上升沿触发的触发器162.7.7 带异步复位和时钟使能、上升沿触发的触发器162.7.8 D-Latch(锁存器)172.8 ALU182.9 有限状态机(FSM)的设计202.9.1 概述202.9.2One-hot 编码232.9.3 Binary 编码262.10 三态总线302.10.1 三态buffer302.10.2 双向I/O buffer313 常用电路设计313.1CRC校验码产生器的设计 313.1.1 概述313.1.2 CRC校验码产生器的分析与硬件实现323.1.3 并行CRC-16 校验码产生器的VerilogHDL编码333.1.4 串行CRC-16 校验码产生器的VerilogHDL编码353.2 随机数产生电路设计373.2.1 概述372001/02/28版权所有,侵权必究第3 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号3.2.2 伪随机序列发生器的硬件实现373.2.3 8 位伪随机序列发生器的VerilogHDL编码383.3 双端口RAM仿真模型403.4 同步FIFO 的设计413.4.1 功能描述413.4.2 设计代码413.5 异步FIFO 设计443.5.1 概述443.5.2 设计代码442001/02/28版权所有,侵权必究第4 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号Verilog 基本电路设计指导书关键词:电路、摘关键词:电路、摘 要:本文列举了大量的基本电路的要:本文列举了大量的基本电路的 Verilog HDL 代码,使初学者能够迅速熟悉基本的代码,使初学者能够迅速熟悉基本的 HDL 建模;同时也列举了一些常用电路的代码,作为设计者的指导。缩略语清单:建模;同时也列举了一些常用电路的代码,作为设计者的指导。缩略语清单:对本文所用缩略语进行说明,要求提供每个缩略语的英文全名和中文解释对本文所用缩略语进行说明,要求提供每个缩略语的英文全名和中文解释。参考资料清单:参考资料清单:请在表格中罗列本文档所引用的有关参考文献名称、作者、标题、编号、发布日期和出版单位等基本信息。请在表格中罗列本文档所引用的有关参考文献名称、作者、标题、编号、发布日期和出版单位等基本信息。参考资料清单参考资料清单名称作者编号发布日期查阅地点或渠道出版单位(若不为本公司发布的文献,请填写此列)Actel HDLcoding StyleGuideNovember 1997文档室Actel 公司1前言前言当前业界的硬件描述语言中主要有VHDL 和 Verilog HDL。公司根据本身ASIC 设计现有的特点、现状,主推Verilog HDL 语言,逐渐淡化VHDL语言,从而统一公司的ASIC/FPGA设计平台,简化流程。为使新员工在上岗培训中能迅速掌握ASIC/FPGA 设计的基本技能,中研基础部 ASIC设计中心开发了一系列的培训教材。该套HDL语言培训系列包括如下教程:Verilog HDL 入门教程Verilog HDL 代码书写规范Verilog 基本电路设计指导书TestBench 编码技术系列教材完成得较匆忙,本身尚有许多不完善的地方,同时,可能还需要其他知识方面的培训但没有形成培训教材,希望大家在培训过程中,多提宝贵意见,以便我们对它进行修改和完善2典型电路的设计典型电路的设计2001/02/28版权所有,侵权必究第5 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号在本章节中,主要讲述触发器、锁存器、多路选择器、解码器、编码器、饱和/非饱和计数器、FSM 等常用基本电路的设计。如果你是初学者,我们建议你从典型电路学起,如果你已经非常熟悉电路设计,我们建议你从第3 章看起。2.1全加器的设计全加器的设计/*Filename:fulladd.vAuthor:Verilog_gruopDescription:Example of a one-bit full add.Revision:2000/02/29Company:Verilog_group*/module FULLADDR(Cout,Sum,Ain,Bin,Cin);inputAin,Bin,Cin;outputSum,Cout;wireSum;wireCout;assign Sum=Ain Bin Cin;assignCout=(Ain&Bin)|(Bin&Cin)|(Ain&Cin);endmodule2.2数据通路数据通路2.2.1四选一的多路选择器用 case 语句实现的多路选择器,一般要求选择信号之间是相关的;case的多路选择器一般是并行的操作,但有些工具也可能综合成优先级的译码器除非加一些控制参数。/*Filename:mux.vAuthor:Verilog_gruopDescription:Example of a mux4-1.Revision:2000/02/29Company:Verilog_group*/module MUX(C,D,E,F,S,Mux_out);2001/02/28版权所有,侵权必究第6 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号input C,D,E,F;/input input 1:0 S;/select controloutput Mux_out;/resultreg Mux_out;/muxalways(C or D or E or F or S)begin case(S)2b00:Mux_out=C;2b01:Mux_out=D;2b10:Mux_out=E;default:Mux_out=F;endcaseendendmodule以上代码实现的功能如下所示:1 Multiplexor using a case statement 2.2.2译码器因为译码信号之间是相关的,因此,译码器要case 语句实现。/*Filename:decode.vAuthor:Verilog_gruopDescription:Example of a 3-8 decoder.2001/02/28版权所有,侵权必究第7 页,共56 页MUXMux_outS1:0CDEFVerilog 基本电路设计指导书绝密请输入文档编号Revision:2000/02/29Company:Verilog_group*/module DECODE(Ain,En,Yout);input En;/enableinput 2:0 Ain;/input codeoutput 7:0 Yout;reg 7:0 Yout;always(En or Ain)beginif(!En)Yout=8b0;elsecase(Ain)3b000:Yout=8b0000_0001;3b001:Yout=8b0000_0010;3b010:Yout=8b0000_0100;3b011:Yout=8b0000_1000;3b100:Yout=8b0001_0000;3b101:Yout=8b0010_0000;3b110:Yout=8b0100_0000;3b111:Yout=8b1000_0000;default:Yout=8b0000_0000;endcaseendendmodule2.2.3优先编码器/*Filename:Prio-encoder.vAuthor:Verilog_gruopDescription:Example of a Priority Encoder.Revision:2000/02/292001/02/28版权所有,侵权必究第8 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号Company:Verilog_group*/module PRIO_ENCODER(Cin,Din,Ein,Fin,Sin,Pout);inputCin,Din,Ein,Fin;/input signalsinput1:0Sin;/input select controloutputPout;/output select result regPout;/Pout assignmentalways (Sin or Cin or Din or Ein or Fin)beginif(Sin=2b00)Pout=Cin;else if(Sin=2b01)Pout=Din;else if(Sin=2b10)Pout=Ein;elsePout=Fin;end endmodule 以上代码实现的功能如下图:1 使用if 的优先译码器2.3计数器计数器/*Filename:count_en.vAuthor:Verilog_gruop2001/02/28版权所有,侵权必究第9 页,共56 页CinDinFinEinSin=10Sin=01Sin=00PoutVerilog 基本电路设计指导书绝密请输入文档编号Description:Example of a counter with enable.Revision:2000/02/29Company:Verilog_group*/module COUNT_EN(En,Clock,Reset,Out);parameter Width=8;parameterU_DLY=1;input Clock,Reset,En;output Width-1:0 Out;reg Width-1:0 Out;always(posedge Clock or negedge Reset)if(!Reset)Out=8b0;else if(En)Out B;Q2=A=B;2001/02/28版权所有,侵权必究第11 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号if(A=B)Q4=1;elseQ4=0;endendmodule2.6移位操作移位操作/*Filename:shifter.vAuthor:Verilog_gruopDescription:Example of a shifterRevision:2000/02/29Company:Verilog_group*/module SHIFT(Data,Q1,Q2);input 3:0 Data;output 3:0 Q1,Q2;parameter B=2;reg 3:0 Q1,Q2;always(Data)beginQ1=Data B;endendmodule2.7时序器件时序器件一个时序器件(指触发器或锁存器)就是一个一位存储器。锁存器是电平敏感存储器件,触发器是沿触发存储器件。触发器也被称为寄存器,在程序中体现为对上升沿或下降沿的探测,VERILOG中采用如下方法表示:2001/02/28版权所有,侵权必究第12 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号(posedge Clk)-上升沿 (negedge Clk)-下降沿下面给出各种不同类型触发器的描述。2.7.1上升沿触发的触发器实现了一个D 触发器。/*Filename:dff.vAuthor:Verilog_gruopDescription:Example of a Rising Edge Flip-Flop.Revision:2000/03/30Company:Verilog_group*/module DFF(Data,Clk,Q);input Data,Clk;output Q;reg Q;always (posedge Clk)Q=Data;endmodule功能如下图:1 D 触发器2.7.2 带异步复位、上升沿触发的触发器/*Filename:dff_async_rst.vAuthor:Verilog_gruopDescription:Example of a Rising Edge Flip-Flop with Asynchronous Reset.2001/02/28版权所有,侵权必究第13 页,共56 页DQCKDataClkQVerilog 基本电路设计指导书绝密请输入文档编号Revision:2000/03/30Company:Verilog_group*/module DFF_ASYNC_RST(Data,Clk,Reset,Q);input Data,Clk,Reset;output Q;parameterU_DLY=1;reg Q;always (posedge Clk or negedge Reset)if(Reset)Q=#U_DLY 1b0;elseQ=#U_DLY Data;endmudule功能如下图:1 带异步复位D 触发器2.7.3带异步置位、上升沿触发的触发器/*Filename:dff_async_pre.vAuthor:Verilog_gruopDescription:Example of a Rising Edge Flip-Flop with Asynchronous Preset.Revision:2000/03/30Company:Verilog_group*/module DFF_ASYNC_PRE(Data,Clk,Preset,Q);input Data,Clk,Preset;2001/02/28版权所有,侵权必究第14 页,共56 页DQCKRDataClkResetQVerilog 基本电路设计指导书绝密请输入文档编号output Q;parameterU_DLY=1;reg Q;always (posedge Clk or negedge Preset)if(Preset)Q=#U_DLY 1b1;elseQ=#U_DLY Data;endmudule功能如下图:1 带异步置位D 触发器2.7.4带异步复位和置位、上升沿触发的触发器/*Filename:dff_async.vAuthor:Verilog_gruopDescription:Example of a Rising Edge Flip-Flop with Asynchronous Reset and Preset.Revision:2000/03/30Company:Verilog_group*/module DFF_ASYNC(Data,Clk,Reset,Preset,Q);input Data,Clk,Reset,Preset;output Q;parameterU_DLY=1;reg Q;always (posedge Clk or negedge Reset or negedge Preset)2001/02/28版权所有,侵权必究第15 页,共56 页DataClkQPresetDQCKPVerilog 基本电路设计指导书绝密请输入文档编号if(Reset)Q=1b0;else if (preset)Q=1b1;elseQ=#U_DLY Data;endmudule 功能如下图:1 带异步置位、复位D 触发器2.7.5带同步复位、上升沿触发的触发器/*Filename:dff_sync_rst.vAuthor:Verilog_gruopDescription:Example of a Rising Edge Flip-Flop with Synchronous Reset.Revision:2000/03/30Company:Verilog_group*/module DFF_SYNC_RST(Data,Clk,Reset,Q);input Data,Clk,Reset;output Q;parameterU_DLY=1;reg Q;always (posedge Clk)if(Reset)Q=#U_DLY 1b0;elseQ=#U_DLY Data;endmudule2001/02/28版权所有,侵权必究第16 页,共56 页DataClkQPresetResetDQCKPRVerilog 基本电路设计指导书绝密请输入文档编号功能如下图:1 带同步复位D 触发器2.7.6带同步置位、上升沿触发的触发器/*Filename:dff_sync_pre.vAuthor:Verilog_gruopDescription:Example of a Rising Edge Flip-Flop with Synchronous Preset.Revision:2000/03/30Company:Verilog_group*/module DFF_SYNC_PRE(Data,Clk,Preset,Q);input Data,Clk,Preset;output Q;parameterU_DLY=1;reg Q;always (posedge Clk)if(Preset)Q=#U_DLY 1b1;elseQ=#U_DLY Data;endmudule功能如下图:2001/02/28版权所有,侵权必究第17 页,共56 页DQCKClkQReset0DataVerilog 基本电路设计指导书绝密请输入文档编号1 带同步置位的D 触发器2.7.7带异步复位和时钟使能、上升沿触发的触发器/*Filename:dff_ck_en.vAuthor:Verilog_gruopDescription:Example of a Rising Edge Flip-Flop with Asynchronous Reset and Clock Enable.Revision:2000/03/30Company:Verilog_group*/module DFF_CK_EN(Data,Clk,Reset,En,Q);input Data,Clk,Reset,En;output Q;parameterU_DLY=1;reg Q;always (posedge Clk or negedge Reset)if(Reset)Q=1b0;else if (En)Q=#U_DLY Data;endmudule功能如下图:2001/02/28版权所有,侵权必究第18 页,共56 页DQCKClkQPreset1DataVerilog 基本电路设计指导书绝密请输入文档编号1 带异步复位、使能端的D 触发器2.7.8D-Latch(锁存器)锁存器是电平敏感器件,在ASIC设计中,锁存器会带来诸多问题,如额外时延、DFT问题,因此,在实际设计中必须尽量避免锁存器的出现。module d_latch(enable,data,y);input enable;input data;output y;reg y;always(enable or data)if(enable)y=data;endmodule功能如下图:1 D-Latch2.8ALU/*Filename:alu.vAuthor:Verilog_gruopDescription:Example of a 4-bit Carry Look Ahead ALU2001/02/28版权所有,侵权必究第19 页,共56 页ClkQDataDQCKERResetEnD QTdataenableyVerilog 基本电路设计指导书绝密请输入文档编号Revision:2000/02/29Company:Verilog_group*/module ALU(A,B,Cin,Sum,Cout,Operate,Mode);/input signalsinput 3:0 A,B;/two operands of ALUinput Cin;/carry in at the LSBinput 3:0 Operate;/determine f(.)of sum=f(a,b)input Mode;/arithmetic(mode=1b1)or logic operation(mode=1b0)output 3:0 Sum;/result of ALUoutput Cout;/carry produced by ALU operation/carry generation bits and propogation bits.wire 3:0 G,P;/carry bits;reg 2:0 C;/function for carry generation:function gen input A,B;input 1:0 Oper;begin case(Oper)2b00:gen=A;2b01:gen=A&B;2b10:gen=A&(B);2b11:gen=1b0;endcase;endendfunction2001/02/28版权所有,侵权必究第20 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号/function for carry propergation:function prop input A,B;input 1:0 Oper;begin case(Oper)2b00:prop=1;2b01:prop=A|(B);2b10:prop=A|B;2b11:prop=A;endcase;end endfunction/producing carry generation bits;assign G0=gen(A0,B0,Oper1:0);assign G1=gen(A1,B1,Oper1:0);assign G2=gen(A2,B2,Oper1:0);assign G3=gen(A3,B3,Oper1:0);/producing carry propogation bits;assign P0=por(A0,B0,Oper3:2);assign P1=por(A1,B1,Oper3:2);assign P2=por(A2,B2,Oper3:2);assign P3=por(A3,B3,Oper3:2);/producing carry bits with carry-look-ahead;always(G or P or Cin,Mode)begin if(Mode)begin C0=G0|P0&Cin;C1=G1|P1&G0|P1&P0&Cin;2001/02/28版权所有,侵权必究第21 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号 C2=G2|P2&G1|P2&P1&G0|P2&P1&P0&Cin;Cout=G3|P3&G2|P3&P2&G1|P3&P2&P1&G0|P3&P2&P1&P0&Cin;end else begin C0=1b0;C1=1b0;C2=1b0;Cout=1b0;endend/calculate the operation results;assign Sum0=(G0&P0)Cin;assign Sum1=(G1&P1)C0;assign Sum2=(G2&P2)C1;assign Sum3=(G3&P3)C2;endmodule2.9有限状态机(有限状态机(FSM)的设计)的设计2.9.1概述有限状态机(FSM)是一种常见的电路,由时序电路和组合电路组成。设计有限状态机的第一步是确定采用Moore 状态机还是采用Mealy状态机。(Mealy型:状态的转变不仅和当前状态有关,而且跟各输入信号有关;Moore型:状态的转变只和当前状态有关)。从实现电路功能来讲,任何一种都可以实现同样的功能。但他们的输出时序不同,所以,在选择使用那种状态机时要根据具体情况而定,在此,把他们的主要区别介绍一下:1.Moore 状态机:在时钟脉冲的有限个门延时之后,输出达到稳定。输出会在一个完整的时钟周期内保持稳定值,即使在该时钟内输入信号变化了,输出信号也不会变化。输入对输出的影响要到下一个时钟周期才能反映出来。把输入和输出分开,是Moore 状态机的重要特征。2.Mealy状态机:由于输出直接受输入影响,而输入可以在时钟周期的任一时刻变化,这就使得输出状态比Moore状态机的输出状态提前一个周期到达。输入信号的噪声可能会出现在输出信号上。3.对同一电路,使用Moore状态机设计可能会比使用Mealy状态机多出一些状态。2001/02/28版权所有,侵权必究第22 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号根据他们的特征和要设计的电路的具体情况,就可以确定使用那种状态机来实现功能。一旦确定状态机,接下来就要构造状态转换图。现在还没有一个成熟的系统化状态图构造算法,所以,对于实现同一功能,可以构造出不同的状态转换图。但一定要遵循结构化设计。在构造电路的状态转换图时,使用互补原则可以帮助我们检查设计过程中是否出现了错误。互补原则是指离开状态图节点的所有支路的条件必须是互补的。同一节点的任何2 个或多个支路的条件不能同时为真。同时为真是我们设计不允许的。在检查无冗余状态和错误条件后,就可以开始用verilog HDL来设计电路了。1 状态机电路逻辑图在设计的过程中要注意以下方面:1.full_case spec 定义完全状态,即使有的状态可能在电路中不会出现。目的是避免综合出不希望的Latch,因为Latch可能会带来:a.额外的延时;b.异步Timing 问题always(Curr_st)begin case(Curr_st)ST0:Next_st=ST1;ST1:Next_st=ST2;ST2:Next_st=ST0;endcase end2001/02/28版权所有,侵权必究第23 页,共56 页ResetClockNext_stLogicCurr_stLogicCom bi&sync LogicCom biLogicNext_stCurr_stVerilog 基本电路设计指导书绝密请输入文档编号1 没有采用full-casealways(Curr_st)begin case(Curr_st)/synthesis full_case ST0:Next_st=ST1;ST1:Next_st=ST2;ST2:Next_st=ST0;default:Next_st=ST0;endcase end1 采用full-case2.parallel_case spec确保不同时出现多种状态case(En3,En2,En1)3b?1:Out=In1;2001/02/28版权所有,侵权必究第24 页,共56 页DDQQCurr_stNext_stCurr_stDNext_stDVerilog 基本电路设计指导书绝密请输入文档编号 3b?1?:Out=In2;3b1?:Out=In3;endcase1 没采用parallel-casecase(En3,En2,En1)/synthesis parallel_case 3b?1:Out=In1;3b?1?:Out=In2;3b1?:Out=In3;endcase1 采用parallel-case3.禁止使用casexcasex 在综合时,认为Z,X 为 Dont cares,会导致前仿真和后仿真不一致。如果电路中出现X,一定要分析是否会传递。4.推荐在模块划分时,把状态机设计分离出来,便于使用综合根据对状态机优化。5.在条件表达式或附值语句中,要注意向量的宽度适配。否则,前仿真和后仿真不一致,RTL 级的功能验证很难找出问题所在。2001/02/28版权所有,侵权必究第25 页,共56 页En1In1En2In2En3In3OutEn1In1En2In2En3In3OutVerilog 基本电路设计指导书绝密请输入文档编号下图是一个状态机的状态转换图,在Verilog HDL中我们可以用如下方法设计该状态机。1 状态转换图2.9.2One-hot 编码/*Filename:one_hot_fsm.vAuthor:Verilog_gruopDescription:Example of a one-hot encoded state machine.Revision:2000/02/29Company:Verilog_group*/module ONE_HOT_FSM(Clock,Reset,A,B,C,D,E,Single,Multi,Contig);input Clock;/system ClockinputReset;/async Reset,active highinputA,B,C,D,E;/FSM input signalsoutputSingle,Multi,Contig;/FSM output signals/define output signals typeregSingle;regMulti;regContig;2001/02/28版权所有,侵权必究第26 页,共56 页ResetA&(!B)&CMulti=1Contig=0Singal=0 !DMulti=0Contig=1Singal=0s1s2s3s4A&B&(!C)Multi=1Contig=1Singal=0DS5S6S7A&B&(!C)Multi=1Contig=0Singal=0A|DMulti=0Contig=1Singal=1!EMulti=0Contig=1Singal=1EMulti=0Contig=0Singal=0Verilog 基本电路设计指导书绝密请输入文档编号/Declare the symbolic names for statesparameter 6:0/enum STATE_TYPE one-hot S1=7b0000001,S2=7b0000010,S3=7b0000100,S4=7b0001000,S5=7b0010000,S6=7b0100000,S7=7b1000000;parameterU_DLY=1;/Declare current state and next state variablesreg 2:0 Curr_st;reg 2:0 Next_st;/Curr_st assignment,sequential logicalways (posedge Clock or posedge Reset)beginif(Reset)Curr_st=S1;else Curr_st=#U_DLY Next_st;end/combinational logic always (Curr_st or A or B or C or D or D or E)begin case(Curr_st)/full_case S1:begin Multi =1b0;Contig=1b0;Single=1b0;2001/02/28版权所有,侵权必究第27 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号 if(A&B&C)Next_st=S2;else if(A&B&C)Next_st=S4;elseNext_st=S1;end S2:begin Multi =1b1;Contig=1b0;Single=1b0;if(!D)Next_st=S3;else Next_st=S4;end S3:begin Multi =1b0;Contig=1b1;Single=1b0;if(A|D)Next_st=S4;else Next_st=S3;end S4:beginMulti =1b1;Contig=1b1;Single=1b0;if(A&B&C)2001/02/28版权所有,侵权必究第28 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号 Next_st=S5;else Next_st=S4;endS5:beginMulti =1b1;Contig=1b0;Single=1b0;Next_st=S6;endS6:beginMulti =1b0;Contig=1b1;Single=1b1;if(!E)Next_st=S7;else Next_st=S6;end S7:beginMulti =1b0;Contig=1b1;Single=1b0;if(E)Next_st=S1;else Next_st=S7;end endcaseend 2001/02/28版权所有,侵权必究第29 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号endmodule2.9.3Binary 编码/*Filename:binary_fsm.vDescription:Example of a binary encoded state machine.Revision:2000/02/29Company:Huawei Ltd.*/timescale 1ns/10psmodule binary(Clock,Reset,A,B,C,D,E,Single,Multi,Contig);input Clock;/system ClockinputReset;/async Reset,active highinputA,B,C,D,E;/FSM input signalsoutputSingle,Multi,Contig;/FSM output signals/define output signals typeregSingle;regMulti;regContig;/Declare the symbolic names for statesparameter 2:0/enum STATE_TYPE binary S1=3b001,S2=3b010,S3=3b011,S4=3b100,S5=3b101,S6=3b110,S7=3b111;parameterU_DLY=1;/Declare current state and next state variablesreg 2:0 Curr_st;2001/02/28版权所有,侵权必究第30 页,共56 页Verilog 基本电路设计指导书绝密请输入文档编号reg 2:0 Next_st;/Curr_st assignment,sequential logicalways (posedge Clock or posedge Reset)beginif(Reset)Curr_st=S1;else Curr_st=#U_DLY Next_st;end/combinational logic always (Curr_st or A or B or C or D or D or E)begin case(