对于我们的学校项目,我试图使用线性反馈移位寄存器在硬件上生成伪随机数(七段)。我编写了LFSR和七段模块,但是我无法将两个模块相互连接。该项目合成,但HDL图表没有显示LFSR和七个段模块之间的任何连接。以下是代码。
//main module
module expo(input clock, reset,
output a,b,c,d,e,f,g
);
wire [3:0]connect, clk, a,b,c,d,e,f,g;
LFSR_4_bit lfsr(
.clock(clock),
.LFSR(connect)
);
seven_seg seven(
.in(connect),
.reset(reset),
.a(a),
.b(b),
.c(c),
.d(d),
.e(e),
.f(f),
.g(g)
);
endmodule
//LFSR module
module LFSR_4_bit(
input clock,
output reg[3:0]LFSR = 15
);
wire feedback = LFSR[4];
always @(posedge clock)
begin
LFSR[0] <= feedback;
LFSR[1] <= LFSR[0];
LFSR[2] <= LFSR[1];
LFSR[3] <= LFSR[2] ^ feedback;
LFSR[4] <= LFSR[3];
end
endmodule
//input and output for seven seg module
module sevenseg(
input reset,
input[3:0] in, //the 4 inputs for each display
output a, b, c, d, e, f, g, //the individual LED output for the seven segment along with the digital point
output [3:0] an // the 4 bit enable signal
);
感谢您的帮助。
答案 0 :(得分:2)
1)您实例化seven_seg
但该模块被调用module sevenseg
这是一个编译错误。
2)您的LFSR有4位0到3,使用了第五位LFSR[4]
,这也是一个编译错误。
由于编译错误,我不确定您是否正在查看当前合成的结果,因为它应该失败。您很可能在连接之前查看旧结果。
我会改变的其他事情:
a)当您定义wire [3:0]connect, clk, a,b,c,d,e,f,g;
时,它们都是4位。
然而,由于时钟(不是clk)和a,b,c,d,e,f,g
已在您的端口列表中定义,因此已经声明了它们。该行可能只是wire [3:0]connect
。
b)当初始化触发器的值而不是使用复位时,最好使用初始开头:这对于FPGA不适用于您应该使用的ASIC重置信号
initial begin
LFSR = 4'd15;
end