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

本题与之前的一题Fsm onehot在逻辑上有异曲同工之妙,相当于Exams/m2014 q6b与Fsm onehot的结合体,关于这两道题,大家可以参考我之前给出的题解了解它们各自的解题要点,欢迎大家批评指正!

Fsm onehot题解请点击这里~
Exams/m2014 q6b题解请点击这里~

如果大家看过之前两篇题解,就能立刻找出本题涉及的两个关键点:

  • 将现态作为输入,根据状态转移图获取次态,输出是次态的一部分,这里为了使输出逻辑更加直观,采用描述次态逻辑而非只使用assign语句描述输出。
  • 题目testbench会给出非独热码输入,这就导致不能将输入的现态作为整体判断来确定次态,而是利用独热码的特性,对输入的每一位单独进行判断,即对输入的每一位都认为其余位为1’b0,根据状态图跳转的次态也只需将对应位值1’b1即可,相当于多个独热码叠加输入

对于输出则只需要输出次态寄存器的对应位即可。

根据以上两个关键点我们可以得出该题的Verilog HDL:

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

    localparam A = 6'b000001, B = 6'b000010, C = 6'b000100,
    		   D = 6'b001000, E = 6'b010000, F = 6'b100000;
    reg [6:1] next_state;
    
    assign next_state[1] = y[1] && w || y[4] && w;
    assign next_state[2] = y[1] && !w;
    assign next_state[3] = (y[2] || y[6]) && !w;
    assign next_state[4] = (y[2] || y[3] || y[5] || y[6]) && w;
    assign next_state[5] = (y[3] || y[5]) && !w;
    assign next_state[6] = y[4] && !w;
    
    assign Y2 = next_state[2];
    assign Y4 = next_state[4];
endmodule

总结: 通过对之前题目的分析积累,可以在遇到新的题目时直接套用先前的思路,将问题的解法也变得“模块化”,同时还能复习先前的思路,一举两得。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝莲花正开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值