在Verilog中将4位移位寄存器输出连接到另一个模块中的4位输入

时间:2014-05-10 05:10:43

标签: verilog vlsi

对于我们的学校项目,我试图使用线性反馈移位寄存器在硬件上生成伪随机数(七段)。我编写了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
    );

感谢您的帮助。

1 个答案:

答案 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