verilog刷题:LFSR 产生特定序列

题目描述:产生序列001011;

当然移位寄存器最简单;状态机也可以,复杂点,不推荐;通用时序列发生,太通用了,不够优雅;

此处采用LFSR ,线性反馈移位寄存器,来产生。

牛客题目:
在这里插入图片描述

`timescale 1ns/1ns

module sequence_generator(
	input clk,
	input rst_n,
	output reg data
	);
    
    //1.移位寄存器方式———— 逻辑最简单,消耗最少组合逻辑资源,但是消耗最多寄存器资源;
    //2.通用时序方式,即3个 reg ,任意在保证q2 转移顺序满足001011的约束下,任意给q0,q1赋不同值,然后对每个寄存器进行卡诺图化简———— 逻辑最复杂,消耗组合逻辑较大,消耗寄存器资源最少;
    //3.LFSR ,所谓线性反馈移位寄存器,是2下的一种,但是遵循LSFR顺序,只关心q0的输入,q1和q2由移位产生。
    //LSFR下, {q0,q1,q2}转移顺序:100 -> 010 -> 101 -> 110 -> 011 -> 001 -> 100 ,注意次态的q1,q2总是由初态的q0,q1移位得来;
    //有q0 = sum(m1+m2+m5) = !q1 * q2 + !q0*q1*!q2 ; q1,q2移位即可;

    reg q0,q1,q2; //q0 q1 data  3 regs
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) begin
            {q0,q1,q2} <= 3'b100;
        end
        else 
            {q0,q1,q2} <= {~q1&&q2 || ~q0 && q1 && ~q2, q0, q1};
    end

    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) 
            data <= 0;
        else
            data <= q2;
    end
endmodule


波形,没截完整,后面是1——即001011;
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值