首页 > 其他分享 >[吾题有解] HDLBits : Exams/m2014 q6b

[吾题有解] HDLBits : Exams/m2014 q6b

时间:2024-03-31 12:29:26浏览次数:18  
标签:吾题 次态 m2014 HDLBits 输出 next state b0 Y2

本题是一道简单的FSM设计题,题中已经给出了状态转移图,只要求我们输出用于表示状态的3位2进制(y[3:1])中第2位(y[2])的次态,这里主要是记录实现该输出的两种思路,且这两种描述思路下的代码在综合时可能会得到两种不同的电路。

首先是第一种只采用一条assign语句的描述方法:

module top_module (
    input [3:1] y,
    input w,
    output Y2);

    assign Y2 = (y == 3'b000 || y == 3'b010 || y == 3'b011 || y == 3'b100) && w == 1'b0 || (y == 3'b000 || y == 3'b011)                               && w == 1'b1 ? 1'b0 :
                (y == 3'b001 || y == 3'b101) 							   && w == 1'b0 || (y == 3'b001 || y == 3'b010 || y == 3'b100 || y == 3'b101) && w == 1'b1 ? 1'b1 : 1'b0;
                
endmodule

这种方法的优点在于:不需要创建额外的寄存器表示状态,只根据两个输入就可确定输出,在描述语句的使用上达到了最简;缺点是:可能需要借助状态转移表,根据输入[3:1] y中的y[2]与输入w列举输出Y2 = 1'b1Y2 = 1'b0时各自输入的组合情况,且得到的逻辑表达式由于没有参数化状态名而是直接用3-bits表示状态,可读性相对较差。

第二种是将其看作给出现态描述次态逻辑转换的方法:

module top_module (
    input [3:1] y,
    input w,
    output Y2);

    localparam A = 0, B = 1, C = 2,
    		   D = 3, E = 4, F = 5;
    reg [3:1] next_state;
    
    always @(*)
        case(y)
            A : next_state = w ? A : B;
            B : next_state = w ? D : C;
            C : next_state = w ? D : E;
            D : next_state = w ? A : F;
            E : next_state = w ? D : E;
            F : next_state = w ? D : C;
            default : next_state = A;
        endcase
                
    assign Y2 = next_state[2];
endmodule

这种方法的优点在于:在逻辑表达上更具可读性,基本上就是实现了三段式状态机中的组合逻辑次态判断部分,而输出作为次态的一部分也一目了然;缺点是:虽然现态作为输入无需寄存器表示,但是使用了额外的寄存器来表示次态,增大了电路开销。


以上两种方法,包括很多在输出部分采用组合逻辑的三段式状态机都存在一个问题:由于没有寄存器的缓冲,输出容易产生毛刺,所以在实际工作的状态机设计中,在时序允许的情况下最好在输出处加一个寄存器作为缓冲,降低不稳定信号的影响。

总结:本题虽然在实现上并没有什么困难,但不妨其成为一个很好的例子,有些更复杂的问题在本质上与这种情况是相同的,我们可能需要在逻辑描述的可读性与电路综合的复杂性之间做出取舍。

标签:吾题,次态,m2014,HDLBits,输出,next,state,b0,Y2
From: https://blog.csdn.net/shushisheng/article/details/137195783

相关文章

  • verilog语言学习-HDLBits
    基本逻辑:anda&b与同为1时输出1ora|b或有一个为1输出1xora^b异或ab不同时输出1nand!(a&b)与非notand a与b再取反nor~(a|b)或非a或b再取反xnora~^b同或ab相同时输出1anotba&(!b)a与非b......
  • HDLbits 刷题 -- Vector4
    学习:        连接操作符允许将向量连接在一起形成一个更大的向量。但有时您希望将相同的内容多次连接在一起,这样做仍然很繁琐,例如assigna={b,b,b,b,b};。复制操作符允许重复一个向量并将它们连接在一起:        {num{vector}}  这是将向量复制了num次......
  • HDLBits_Conwaylife
    1moduleConwaylife(2inputclk,3inputload,4input[255:0]data,5outputreg[255:0]q6);78reg[3:0]w,r,c;910always@(posedgeclk)begin11if(load)begin12q<=data;13endelsebegin1......
  • HDLBits_6.25
    4.验证:读取模拟4.1查找代码中的错误4.1.1多用复路器(2_1_Mux)//Wrongmoduletop_module(inputsel,input[7:0]a,input[7:0]b,outputout);assignout=(~sel&a)|(sel&b);endmodule//Right:out位宽不对,表达式不对moduletop_modul......
  • HDLBits(16)4.18
    3电路3.2时序逻辑3.2.2计数器 Count1to10(Decadecounteragain)与上题一样,区别是复位为1moduletop_module(inputclk,inputreset,output[3:0]q);always@(posedgeclk)beginif(reset)q<=4'b0001......
  • HDLBits(1)——Modules:Hierarchy
    HDLBits——Modules:Hierarchy目录HDLBits——Modules:Hierarchy问题19Module将信息连接到端口BypositionByname问题20Connectingportsbyposition(Modulepos)问题21Connectingportsbyname(Modulename)问题22Threemodules(Moduleshift)问题23Modulesandvectors(Mod......
  • HDLBits(15)3.9
    3电路3.2时序逻辑3.2.1锁存器与触发器(LatchesandFlip-Flops)CreatecircuitfromtruthtableJK触发器的真值表如下图所示,仅使用D触发器和门电路来实现该JK触发......
  • HDLBits(13)2.24
    3电路3.1组合逻辑3.1.4卡诺线路图(KarnaughMaptoCircuit)Kmap1(3-variable)out=a+ab+ac=a&(a^b)&(a^c)=a|b|c moduletop_module(inpu......
  • HDLBits(11)2.17
    3电路3.1组合逻辑3.1.1基础门Ringorvibrate(静音)若手机处于震动模式则振动(motor),否则打开铃声(Ringer)assignringer=ring&(~vibrate_mode);assignmotor=ri......
  • HDLBits(9)10.13
    2Verilog语言2.5更多特点2.5.4组合for循环翻转输出一个长度为100的向量(使用组合always块)moduletop_module(input[99:0]in,output[99:0]out);......