欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    数字逻辑单元设计.ppt

    • 资源ID:4979981       资源大小:262KB        全文页数:115页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数字逻辑单元设计.ppt

    数字逻辑单元设计,xxx,第4章数字逻辑单元设计-本章概要,在复杂数字系统中,其结构总可以用若干基本逻辑单元的组合进行描述。基本逻辑单元一般分为组合逻辑电路和时序电路两大类。在此基础上,可以更进一步进行组合.本章所介绍的存储器、运算单元和有限自动状态机就是由基本逻辑单元组合而成的。本章首先介绍基本的组合逻辑电路和时序电路设计,然后介绍在数字系统设计中普遍使用的存储器电路、运算单元和有限自动状态机。,组合逻辑电路设计,组合逻辑电路是指输出状态只决定于同一时刻各个输入状态的组合,而与先前状态无关的逻辑电路称为组合逻辑电路。组合逻辑电路主要包括简单门电路、编码器和译码器、数据选择器、数字比较器、运算单元和三态门等。,组合逻辑电路设计-基本逻辑门电路设计,Verilog HDL对基本逻辑门电路的描述可以使用门级描述、数据流描述和行为描述三种方式。门级描述主要是通过调用门级描述语句实现,而其它方式是通过调用Verilog HDL中关于逻辑描述符来实现门电路。,组合逻辑电路设计-基本逻辑门电路设计,【例4.1】基本门电路的Verilog HDL行为描述 module g1(o,a,b,c,d);input a,b,c,d;output reg o;always(a or b or c or d)begin o=(aend endmodule,组合逻辑电路设计-基本逻辑门电路设计,【例4.2】基本门电路的Verilog HDL数据描述module g2(o,a,b,c,d);input a,b,c,d;output o;assign o=(aendmodule,组合逻辑电路设计-基本逻辑门电路设计,【例4.3】基本门电路的Verilog HDL门级描述module g3(o,a,b,c,d);input a,b,c,d;output o;nand(o1,a,b);and(o2,b,c,d);or(o,o1,o2);endmodule,组合逻辑电路设计-编码器和译码器设计,在数字系统中,常常会将某一信息用特定的代码进行描述,这称为编码过程。编码过程可以通过编码器电路实现。同时,将某一特定的代码翻译成原始的信息,这称为译码过程。译码过程可以通过译码器电路实现。,组合逻辑电路设计-编码器设计,将某一信息用一组按一定规律排列的二进制代码描述称为编码。典型的有8421码、BCD码等。在使用Verilog HDL 语言设计编码器时,通过使用CASE和IF语句实现对编码器的描述。,【例4.4】使用if-else语句实现一个8-3线优先编码器的Verilog HDL描述。module v_priority_encoder_1(sel,code);input 7:0 sel;output 2:0 code;reg 2:0 code;always(sel),组合逻辑电路设计-编码器设计,beginif(sel0)code=3b000;else if(sel1)code=3b001;else if(sel2)code=3b010;else if(sel3)code=3b011;else if(sel4)code=3b100;else if(sel5)code=3b101;else if(sel6)code=3b110;else if(sel7)code=3b111;else code=3bxxx;endendmodule,组合逻辑电路设计-编码器设计,组合逻辑电路设计-译码器设计,译码的过程实际上就是编码过程的逆过程,即将一组按一定规律排列的二进制数还原为原始的信息。,组合逻辑电路设计-译码器设计,【例4.5】使用case实现3-8译码器的Verilog HDL语言描述。,module v_decoders_1(sel,res);input 2:0 sel;output 7:0 res;reg 7:0 res;always(sel or res)begin,case(sel)3b000:res=8b00000001;3b001:res=8b00000010;3b010:res=8b00000100;3b011:res=8b00001000;3b100:res=8b00010000;3b101:res=8b00100000;3b110:res=8b01000000;default:res=8b10000000;endcaseendendmodule,组合逻辑电路设计-译码器设计,组合逻辑电路设计-译码器设计,【例4.6】十六进制数的共阳极7段数码显示Verilog HDL描述,module seven_segment_led(o,i);input3:0 i;output reg6:0 o;always(i)begin case(i),组合逻辑电路设计-译码器设计,4b0001:o=7b1111001;/1 4b0010:o=7b0100100;/2 4b0011:o=7b0110000;/3 4b0100:o=7b0011001;/4 4b0101:o=7b0010010;/5 4b0110:o=7b0000010;/6 4b0111:o=7b1111000;/7 4b1000:o=7b0000000;/8,4b1001:o=7b0010000;/9 4b1010:o=7b0001000;/A 4b1011:o=7b0000011;/b 4b1100:o=7b1000110;/C 4b1101:o=7b0100001;/d 4b1110:o=7b0000110;/E 4b1111:o=7b0001110;/F default:o=7b1000000;/0 endcaseendendmodule,组合逻辑电路设计-译码器设计,组合逻辑电路设计-数据选择器设计设计,CASE和IF语句描述数据选择器 在数字系统设计中,常使用CASE和IF语句描述数据选择器。下面给出这两种描述方法。,组合逻辑电路设计-数据选择器设计设计,【例4.7】使用case语句实现多路选择器module full_mux(sel,i1,i2,i3,i4,o1);input 1:0 sel;input 1:0 i1,i2,i3,i4;output 1:0 o1;reg 1:0 o1;always(sel or i1 or i2 or i3 or i4)begin case(sel)2b00:o1=i1;2b01:o1=i2;2b10:o1=i3;2b11:o1=i4;endcaseendendmodule,组合逻辑电路设计-数据选择器设计设计,【例4.8】使用if-else语句实现多路选择器module v_multiplexers_1(a,b,c,d,s,o);input a,b,c,d;input 1:0 s;output reg o;always(a or b or c or d or s)beginif(s=2b00)o=a;else if(s=2b01)o=b;else if(s=2b10)o=c;else o=d;endendmodule,组合逻辑电路设计-三态缓冲描述数据选择器,使用三态缓冲语句也可以描述多路数据选择器。图4.5给出了4选1多路选择器的三态的原理。,图4.5 三态缓冲实现4选1多路选择器,组合逻辑电路设计-三态缓冲描述数据选择器,【例4.9】三态缓冲描述数据选择器的Verilog HDL描述module v_multiplexers_3(a,b,c,d,s,o);input a,b,c,d;input 3:0 s;output o;assign o=s3?a:1bz;assign o=s2?b:1bz;assign o=s1?c:1bz;assign o=s0?d:1bz;endmodule,组合逻辑电路设计-数字比较器,比较器就是对输入数据进行比较,并判断其大小的逻辑电路。在数字系统中,比较器是基本的组合逻辑单元之一,比较器主要是使用关系运算符实现的。,组合逻辑电路设计-数字比较器,【例4.10】数字比较器的Verilog HDL描述module v_comparator_1(A,B,CMP);input 7:0 A;input 7:0 B;output CMP;assign CMP=(A=B)?1b1:1b0;endmodule,组合逻辑电路设计-运算单元,数据运算单元主要包含加法器、减法器、乘法器和除法器,由这四种运算单元和逻辑运算单元一起,可以完成复杂数学运算。在Verilog HDL语言中,支持的几种运算有:加(+)、减(-)、乘(*)、除(/)、取余(MOD)、幂乘(*)。,组合逻辑电路设计-加法器设计,在Verilog HDL描述加法器时,使用+运算符比门级描述更简单。,组合逻辑电路设计-加法器设计,【例4.11】带进位输入和输出的无符号加法器的Verilog HDL描述module v_adders_2(A,B,CI,SUM);input 7:0 A;input 7:0 B;input CI;output 7:0 SUM;assign SUM=A+B+CI;endmodule,组合逻辑电路设计-减法器设计,减法是加法的反运算,采用Verilog HDL语言的-符号描述减法器,比用门级描述更简单。,组合逻辑电路设计-减法器设计,【例4.12】无符号8位带借位的减法器的Verilog HDL描述module v_adders_8(A,B,BI,RES);input 7:0 A;input 7:0 B;input BI;output 7:0 RES;assign RES=A-B-BI;endmodule,组合逻辑电路设计-乘法器设计,用Verilog HDL语言实现乘法器时,乘积和符号应该为2的幂次方。PLD的优点就是在内部集成了乘法器的硬核,具体在IP核的设计中详细讨论。,组合逻辑电路设计-乘法器设计,【例4.13】乘法器的Verilog HDL描述module v_multipliers_1(A,B,RES);input 7:0 A;input 3:0 B;output 11:0 RES;assign RES=A*B;endmodule,组合逻辑电路设计-除法器设计,除法器可以用Verilog HDL语言的/符号实现,需要注意的是在使用/符号进行除法运算时,除数必须是常数,而且是2的整数幂。因为除法器的运行有这样的限制,实际上除法也可以用移位运算实现。,组合逻辑电路设计-除法器设计,【例4.14】除法器的Verilog HDL描述module v_divider_1(DI,DO);input 7:0 DI;output 7:0 DO;assign DO=DI/2;endmodule,组合逻辑电路设计-总线缓冲器设计,【例4.15】三态缓冲器的Verilog HDL描述module v_three_st_1(T,I,O);input T,I;output reg O;always(T or I)beginif(T)O=I;else O=1bZ;endendmodule,组合逻辑电路设计-总线缓冲器设计,【例4.16】三态缓冲器的Verilog HDL描述 module v_three_st_2(T,I,O);input T,I;output O;assign O=(T)?I:1bZ;endmodule,组合逻辑电路设计-总线缓冲器设计,【例4.17】三态双向驱动器的Verilog HDL描述module bidir(tri_inout,out,in,en,b);inout tri_inout;output out;input in,en,b;assign tri_inout=en?in:bz;assign out=tri_inout b;endmodule,第4章数字逻辑单元设计-时序逻辑电路设计,时序逻辑电路的输出状态不仅与输入变量的状态有关,而且还与系统原先的状态有关。时序电路最重要的特点是存在着记忆单元部分,时序电路主要包括:时钟和复位、基本触发器、计数器、移位寄存器等。,时序逻辑电路设计-时钟和复位设计,时序电路由时钟驱动,时序电路只有在时钟信号的边沿到来时,其状态才发生改变。在数字系统中,时序电路的时钟驱动部分一般包括时钟信号和系统复位信号。根据时钟和复位的描述不同,时序电路一般分成同步复位电路和异步复位电路两类。,在时序电路中,不论采用什么方法描述时钟信号,必须指明时钟的边沿条件(clock edge condition)。时钟沿条件有上升沿和下降沿两种。时钟的上升沿条件可以用下面的语句描述:always(posedge clk)时钟的下降沿条件可以用下面的语句描述:always(negedge clk),时序逻辑电路设计-时钟和复位设计,根据复位和时钟信号的关系不同。时序电路分为同步复位电路和异步复位电路两大类。1、同步复位描述 同步复位指:当复位信号有效,并且在给定的时钟边沿有效时,时序电路才被复位。只有时钟信号出现在always块的敏感信号中。,时序逻辑电路设计-时钟和复位设计,【例4-18】同步复位的Verilog HDL描述 module asyn_reset(other_signal,.,clk,rst);input clk,reset;/other_signal declaration always(posedge clk)if(rst)/statement1 else/statement2endmodule,时序逻辑电路设计-时钟和复位设计,2、异步复位描述 异步复位指:当复位信号有效时,时序电路就被复位。时钟信号和复位信号同时出现在always块的敏感信号中。,时序逻辑电路设计-时钟和复位设计,【例4-19】异步复位的Verilog HDL描述module asyn_reset(other_signal,.,clk,rst);input clk,reset;/other signal declaration always(posedge rst or posedge clk)if(rst)/statement1 else/statement2endmodule,时序逻辑电路设计-时钟和复位设计,时序逻辑电路设计-触发器设计,触发器是时序逻辑电路的最基本单元,触发器具有“记忆”能力。根据沿触发、复位和置位方式的不同触发器可以有多种实现方式。在PLD中经常使用的触发器有D触发器、JK触发器和T触发器等。,时序逻辑电路设计-触发器设计,【例4-20】带时钟使能和异步复位/置位的D触发器的Verilog HDL描述D触发器是数字电路中应用最多的一种时序电路。表4.1给出了带时钟使能和异步复位/置位的D触发器的真值表。,时序逻辑电路设计-触发器设计,module v_registers_5(C,D,CE,PRE,Q);input C,CE,PRE;input 3:0 D;output reg 3:0 Q;always(posedge C or posedge PRE)beginif(PRE)Q=4b1111;elseif(CE)Q=D;endendmodule,时序逻辑电路设计-触发器设计,【例4-21】双数据率IOB的Verilog HDL描述module ddr_input(data_out,data_in,clk,rst);input data_in,clk,rst;output data_out;reg q1,q2;always(posedge clk,posedge rst)beginif(rst)q1=1b0;else q1=data_in;endalways(negedge clk,posedge rst)beginif(rst)q2=1b0;else q2=data_in;endassign data_out=q1 end module,时序逻辑电路设计-触发器设计,【例4.22】带异步清0、异步置1 的JK 触发器的Verilog HDL描述module JK_FF(CLK,J,K,Q,RS,SET);input CLK,J,K,SET,RS;output Q;reg Q;always(posedge CLK or negedge RS or negedge SET)beginif(!RS)Q=1b0;else if(!SET)Q=1b1;else,case(J,K)2b00:Q=Q;2b01:Q=1b0;2b10:Q=1b1;2b11:Q=Q;default:Q=1bx;endcaseendendmodule,时序逻辑电路设计-触发器设计,时序逻辑电路设计-锁存器设计,锁存器和触发器不同之处,就在于触发方式的不同,触发器是靠敏感信号的边沿出发,而锁存器是靠敏感信号的电平触发。,时序逻辑电路设计-锁存器设计,【例4.23】带清零信号锁存器的Verilog HDL描述module v_latches_2(G,D,CLR,Q);input G,D,CLR;output Q;reg Q;always(G or D or CLR)beginif(CLR)Q=1b0;else if(G)Q=D;endendmodule,时序逻辑电路设计-计数器设计,根据计数器的触发方式不同,计数器可以分为:同步计数器和异步计数器两种。当赋予计数器更多的功能时,计数器的功能就非常复杂了。需要注意的是,计数器是常用的定时器的核心部分,当计数器输出控制信号时,计数器也就变成了定时器了。所以只要掌握了计数器的设计方法,就可以很容易的设计定时器。本书中主要介绍同步计数器的设计。同步计数器指在时钟脉冲(计数脉冲)的控制下,计数器做加法或减法的运算。,时序逻辑电路设计-计数器设计,【例4.24】可逆计数器的Verilog HDL描述module v_counters_6(C,CLR,UP_DOWN,Q);input C,CLR,UP_DOWN;output 3:0 Q;reg 3:0 tmp;always(posedge C or posedge CLR)beginif(CLR)tmp=4b0000;else if(UP_DOWN)tmp=tmp+1b1;else tmp=tmp-1b1;endassign Q=tmp;endmodule,时序逻辑电路设计-计数器设计,【例4.25】可加载计数器的Verilog HDL描述module v_counters_3(C,ALOAD,D,Q);input C,ALOAD;input 3:0 D;output 3:0 Q;reg 3:0 tmp;always(posedge C or posedge ALOAD)beginif(ALOAD)tmp=D;else tmp=tmp+1b1;endassign Q=tmp;endmodule,时序逻辑电路设计-计数器设计,【例4.26】带有最大计数值限制计数器的Verilog HDL描述,可实现不同进制的计数module v_counters_8(C,CLR,Q);parameterMAX_SQRT=4,MAX=(MAX_SQRT*MAX_SQRT);input C,CLR;output MAX_SQRT-1:0 Q;reg MAX_SQRT-1:0 cnt;always(posedge C or posedge CLR)beginif(CLR)cnt=0;else cnt=(cnt+1)%MAX;endassign Q=cnt;endmodule,时序逻辑电路设计-移位寄存器设计,移位寄存器在数字系统中有着非常重要的应用,其实现的方法也比较多。主要的方法有:1)通过Verilog HDL语言的连接符实现2)通过Verilog HDL语言中的移位操作符实现3)通过 Verilog HDL语言中的for循环实现,【例4.27】采用连接符的8位串入/串出移位寄存器的Verilog HDL描述module v_shift_registers_1(C,SI,SO);input C,SI;output SO;reg 7:0 tmp;always(posedge C)begin tmp=tmp6:0,SI;end assign SO=tmp7;endmodule,时序逻辑电路设计-移位寄存器设计,时序逻辑电路设计-移位寄存器设计,【例4.28】采用移位操作符的8位并入/并出移位寄存器的Verilog HDL描述module v_logical_shifters_1(DI,SEL,SO);input 7:0 DI;input 1:0 SEL;output reg 7:0 SO;reg 7:0 SO;always(DI or SEL)begincase(SEL)2b00:SO=DI;2b01:SO=DI 1;2b10:SO=DI 2;default:SO=DI 3;endcaseendendmodule,时序逻辑电路设计-移位寄存器设计,【例4.29】采用for循环语句的8位并入/并出移位寄存器的Verilog HDL描述module shiftn(r,l,w,clk,q);parameter n=8;inputn-1:0 r;input l,w,clk;output reg n-1:0 q;integer k;always(posedge clk)begin if(l)q=r;else,begin if(l)q=r;else begin for(k=0;kn-1;k=k+1)qk=qk+1;qn-1=w;endend endmodule,时序逻辑电路设计-移位寄存器设计,第4章数字逻辑单元设计-存储器设计,存储器按其类型主要分为只读存储器和随机存储器两种。虽然存储器从其工艺和原理上各不相同,但有一点是相同的,即存储器是单个存储单元的集合体,并且按照顺序排列。其中的每一个存储单元由N位二进制位构成,表示存放的数据的值。,第4章数字逻辑单元设计-存储器设计,需要注意的是,虽然在本节给出了存储器的原理描述和实现方法,但在实际中,尤其是在FPGA的设计中,存储器在FPGA内作为核提供给设计人员进行使用,设计人员只需要对这些核进行配置,就可以生成高性能的存储器模块,根本没有必要用Verilog HDL语言进行原理和功能的描述。,存储器设计-设计,只读存储器的数据被事先保存到了每个存储单元中,在PLD中保存数据的方法有很多。当对ROM进行读操作时,只要在控制信号的控制下,对操作的单元给出读取的数值即可。【例4.30】ROM的Verilog HDL描述 EN为ROM的使能信号,ADDR为ROM的地址信号,CLK为ROM的时钟信号,DATA为数据信号。,图4.16 ROM的结构图,module v_rams_21a(clk,en,addr,data);input clk;input en;input 5:0 addr;output reg 19:0 data;always(posedge clk)begin,存储器设计-设计,if(en)case(addr)6b000000:data=20h0200A;6b100000:data=20h02222;6b000001:data=20h00300;6b100001:data=20h04001;6b000010:data=20h08101;6b100010:data=20h00342;6b000011:data=20h04000;6b100011:data=20h0232B;6b000100:data=20h08601;6b100100:data=20h00900;6b000101:data=20h0233A;6b100101:data=20h00302;6b000110:data=20h00300;6b100110:data=20h00102;6b000111:data=20h08602;6b100111:data=20h04002;6b001000:data=20h02310;6b101000:data=20h00900;,存储器设计-设计,6b001001:data=20h0203B;6b101001:data=20h08201;6b001010:data=20h08300;6b101010:data=20h02023;6b001011:data=20h04002;6b101011:data=20h00303;6b001100:data=20h08201;6b101100:data=20h02433;6b001101:data=20h00500;6b101101:data=20h00301;6b001110:data=20h04001;6b101110:data=20h04004;6b001111:data=20h02500;6b101111:data=20h00301;6b010000:data=20h00340;6b110000:data=20h00102;6b010001:data=20h00241;6b110001:data=20h02137;6b010010:data=20h04002;6b110010:data=20h02036;6b010011:data=20h08300;6b110011:data=20h00301;,存储器设计-设计,6b010100:data=20h08201;6b110100:data=20h00102;6b010101:data=20h00500;6b110101:data=20h02237;6b010110:data=20h08101;6b110110:data=20h04004;6b010111:data=20h00602;6b110111:data=20h00304;6b011000:data=20h04003;6b111000:data=20h04040;6b011001:data=20h0241E;6b111001:data=20h02500;6b011010:data=20h00301;6b111010:data=20h02500;6b011011:data=20h00102;6b111011:data=20h02500;6b011100:data=20h02122;6b111100:data=20h0030D;6b011101:data=20h02021;6b111101:data=20h02341;6b011110:data=20h00301;6b111110:data=20h08201;6b011111:data=20h00102;6b111111:data=20h0400D;endcaseendendmodule,存储器设计-设计,存储器设计-RAM设计,RAM和ROM的区别,在于RAM有读写两种操作,而ROM只有读操作。另外,RAM对读写的时序也有着严格的要求。【例4-31】一个单端口RAM的Verilog HDL的描述EN为RAM使能信号,WE为RAM写信号,DI为RAM数据输入信号,ADDR为RAM地址信号,CLK为RAM时钟信号,DO为RAM数据输出信号。,图4.17 单端口RAM的结构,module v_rams_01(clk,en,we,addr,di,do);input clk;input we;input en;input 5:0 addr;input 15:0 di;output reg 15:0 do;reg 15:0 RAM 63:0;always(posedge clk),存储器设计-RAM设计,beginif(en)begin if(we)RAMaddr=di;do=RAMaddr;endendendmodule,存储器设计-RAM设计,第4章 数字逻辑单元设计-FSM设计,有限自动状态机FSM(Finate State Machine)的设计是复杂数字系统中非常重要的一部分,是实现高效率高可靠性逻辑控制的重要途径。大部分数字系统都是由控制单元和数据单元组成的。数据单元负责数据的处理和传输,而控制单元主要是控制数据单元的操作的顺序。而在数字系统中,控制单元往往是通过使用有限状态机实现的,有限状态机接受外部信号以及数据单元产生的状态信息,产生控制信号序列。,FSM设计-FSM原理,FSM设计-FSM原理,从上面的数学模型可以看出,如果在数字系统中实现有限状态机,则应该包含三部分:状态寄存器;下状态转移逻辑;输出逻辑。描述有限状态机的关键是状态机的状态集合以及这些状态之间的转移关系。描述这种转换关系除了数学模型外,还可以用状态转移图或状态转移表来实现。状态转移图由三部分组成:表示不同状态的状态点、连接这些状态点的有向箭头以及标注在这些箭头上的状态转移条件。状态转移表采用表格的方式描述状态机。状态转移表由三部分组成:当前状态、状态转移事件和下一状态。,FSM设计-FSM分类,状态机分类很多,主要分为Moore状态机、Mealy状态机和扩展有限状态机。下面就Moore状态机、Mealy状态机的原理和应用进行详细的介绍。,FSM设计-Mealy型状态机,Mealy型状态机的输出由状态机的输入和状态机的状态共同决定;,【例4.32】4状态Mealy型状态机的Verilog HDL描述。,parameter=2b00;parameter=2b01;parameter=2b10;parameter=2b11;(*FSM_ENCODING=SEQUNTIAL,SAFE_IMPLEMENTATION=NO*)reg 1:0 state=;always(posedge)if()begin state;end,FSM设计-Mealy型状态机,else(*FULL_CASE,PARALLEL_CASE*)case(state):begin if()state;else if()state;else state;end,FSM设计-Mealy型状态机,:begin if()state;else if()state;else state;end,FSM设计-Mealy型状态机,:begin if()state;else if()state;else state;end,FSM设计-Mealy型状态机,:begin if()state;else if()state;else state;end endcase assign=;assign=;/Add other output equations as necessary,FSM设计-Mealy型状态机,FSM设计-Moore型状态机,Moore型状态机的输出仅与状态机的状态有关,与状态机的输入无关。,【例4.33】Moore型状态机的Verilog HDL语言的描述 parameter=4b0001;parameter=4b0010;parameter=4b0100;parameter=4b1000;(*FSM_ENCODING=ONE-HOT,SAFE_IMPLEMENTATION=NO*)reg 3:0 state=;,FSM设计-Moore型状态机,always(posedge)if()begin state;end else(*FULL_CASE,PARALLEL_CASE*)case(state),FSM设计-Moore型状态机,:begin if()state;else if()state;else state;end,FSM设计-Moore型状态机,:begin if()state;else if()state;else state;end,FSM设计-Moore型状态机,:begin if()state;else if()state;else state;end,FSM设计-Moore型状态机,:begin if()state;else if()state;else state;end endcase,FSM设计-Moore型状态机,FSM设计-Moore型状态机,虽然在这里将两种类型的状态机加以区分,但是在实际的状态机的设计中,设计人员根本不需要这些差别,只要满足状态机设计的规则和状态机运行的条件,采用任何一种状态机都可以实现,并且设计人员可以在实际的设计过程中形成自己独特的状态机的Verilog HDL的设计风格。,FSM设计-设计原则,有限状态机的设计应遵循以下原则:、分析控制器设计指标,建立系统算法模型图,即状态转移图;、分析被控对象的时序状态,确定控制器有限状态机的各个状态及输入、输出条件;、使用Verilog HDL语言完成状态机的描述。,FSM设计-FSM设计优点,采用有限状态机描述有以下方面的优点:、可以采用不同的编码风格,在描述状态机时,设计者常采用的编码有二进制、格雷码、one hot编码,用户可以根据自己的需要在综合时确定,而不需要修改源文件或修改源文件中的编码格式以及状态机的描述。、可以实现状态的最小化,(如果one hot编码,控制信号数量庞大)。、设计灵活,将控制单元与数据单元分离开。,FSM设计-状态编码,FSM的状态可以采用的状态编码规则有很多,在Xilinx的状态编码“One_Hot”;“Gray”;”Compact”;”Johnson”;“Sequential”;“Speed1”;“User”的编码方式;下面对这些状态编码的性能进行简单的介绍。,FSM设计-状态编码,1、One_Hot状态编码ONE HOT的编码方案对每一个状态采用一个触发器,即4个状态的状态机需4个触发器。同一时间仅1个状态位处于有效电平(如逻辑“l”)。在使用One_Hot状态编码时,触发器使用较多,但逻辑简单,速度快。,FSM设计-状态编码,2、Gray状态编码 Gray码编码每次仅一个状态位的值发生变化。在使用Gray状态编码时,触发器使用较少,速度较慢,不会产生两位同时翻转的情况。采用格雷码进行状态编码时,采用T触发器是最好的实现方式。,FSM设计-状态编码,3、Compact状态编码 Compact状态编码能够使所使用的状态变量位和触发器的数目变得最少。该编码技术基于超立方体浸润技术。当进行面积优化的时候可以采用Compact状态编码,FSM设计-状态编码,4、Johnson状态编码 Johnson状态编码能够使状态机保持一个很长的路径,而不会产生分支。5、Sequential状态编码 Sequential状态编码采用一个可标示的长路径,并采用了连续的基2编码描述这些路径。下一个状态等式被最小化。6、Speed1状态编码 Speed1状态编码用于速度的优化。状态寄存器中所用的状态的位数取决于特定的有限自动状态及FSM,但一般情况下它要比FSM的状态要多。,FSM设计-状态定义,设计者可以在使用状态机之前应该定义状态变量的枚举类型,定义可以在状态机描述的源文件中,也可以在专门的程序包中。【例4.34】状态定义的Verilog HDL描述 parameter 3:0 s1=4b0001,s2=4b0010,s3=4b0100,s4=4b1000;reg 3:0 state;,FSM设计-状态机描述规则,状态机描述方式:三进程;两进程;单进程;,图4.6给出了下面所用到的状态机的模型。,图4.6 状态机模型,FSM设计-状态机描述规则,1、单进程状态机的实现方法 如图4.7单进程的mealy状态机所示,采用单进程状态机描述时,状态的变化、状态寄存器和输出功能描述用一个进程进行描述。,【例4.35】单进程状态机的Verilog HDL的描述module v_fsm_1(clk,reset,x1,outp);input clk,reset,x1;output outp;reg outp;reg 1:0 state;parameter s1=2b00;parameter s2=2b01;parameter s3=2b10;parameter s4=2b11;initial beginstate=2b00;end,FSM设计-状态机描述规则,always(posedge clk or posedge reset)begin if

    注意事项

    本文(数字逻辑单元设计.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开