题目描述:产生序列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;