从hdlbit网站学习到有关独热码编码方式的认识

题目如下所示:
在这里插入图片描述
首先介绍独热码:
其特征就是:只有一个位为1其余全为0 的编码方式
优点:因为每一个状态只有一位为1,减少了毛刺的产生(时序电路增加,组合电路减少

缺点:会消耗过多的寄存器。

解决思路:本题中我首先是想到将每个状态定义成如下:

parameter s0 = 10'b00_0000_0001,  s1 = 10'b00_0000_0010,
          s2 = 10'b00_0000_0100,  s3 = 10'b00_0000_1000,
          s4 = 10'b00_0001_0000,  s5 = 10'b00_0010_0000,
          s6 = 10'b00_0100_0000,  s7 = 10'b00_1000_0000,
          s8 = 10'b01_0000_0000,  s9 = 10'b10_0000_0000;

然后就是状态跳转的八股文,此处不做详解
问题来了!!!!!!!!!!
如果状态有成百上千个的话,我依旧采用这种方式很花费大量的时间,并且容易出错。
从hdlbit网站练习时学到了一种用下标解决此类问题的方法,具体如下:

parameter 	  S0 = 0, S1 =1,  S2 =2,  S3 = 3, S4 = 4,
    		  S5 = 5, S6 = 6, S7 = 7, S8 = 8, S9 = 9;
   然后将其作为下标进行引用:
    assign next_state[S2] = (state[S1] & in);
    格式为:
    assign  next_state[第几个状态] = (state[当前第几个状态] & 输入);

全部代码如下:

module top_module(
    input in,
    input [9:0] state,
    output [9:0] next_state,
    output out1,
    output out2);
	
    parameter S0 = 0, S1 =1, S2 =2, S3 = 3, S4 = 4,
    		  S5 = 5, S6 = 6, S7 = 7, S8 = 8, S9 = 9;
    
    assign next_state[S0] = (state[S0] & ~in) | state[S1] & (~in) |state[S2] & (~in) | state[S3] & (~in) |state[S4] & (~in)|state[S7] & (~in) | state[S8] & (~in)| state[S9] & (~in);   
    assign next_state[S1] = (state[S0] & in) | state[S8] & (in)|state[S9] & (in); 
    assign next_state[S2] = (state[S1] & in); 
    assign next_state[S3] = (state[S2] & in); 
    assign next_state[S4] = (state[S3] & in);
    assign next_state[S5] = (state[S4] & in);
    assign next_state[S6] = (state[S5] & in);
    assign next_state[S7] = (state[S7] & in) | state[S6] & (in);
    assign next_state[S8] = state[S5] & (~in);
    assign next_state[S9] =  state[S6] & (~in);
        
    assign {out1,out2 } = {(state[S8] || state[S9]),(state[S7] || state[S9])};
       
endmodule

仿真结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值