2014-05-10 132 views
1

对于我们的学校项目,我试图使用线性反馈移位寄存器在硬件(七段)上进行伪随机数生成。我写了LFSR和七段模块,但是我无法将两个模块相互连接起来。该项目合成,但HDL图不显示LFSR和七段模块之间的任何连接。以下是代码。在Verilog中将4位移位寄存器输出连接到另一个模块中的4位输入

//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 
    ); 

感谢您的帮助。

回答

2

1)您实例化seven_seg,但模块被称为module sevenseg这是一个编译错误。

2)你的LFSR具有4位0到3,第五位LFSR[4]被使用,这也是一个编译错误。

由于编译错误,我不确定您是否查看当前合成的结果,因为它应该失败。在连接之前,您很可能正在查看旧的结果。

其他的事情我会改变:
一)当你定义wire [3:0]connect, clk, a,b,c,d,e,f,g;他们都是4位。

但是,由于时钟(不是时钟)和a,b,c,d,e,f,g在您的端口列表中已定义,因此它们已被声明。该行可能只是wire [3:0]connect

B)当初始化为触发器值,而不是使用复位它是更好的做法是使用最初的开始:这是适用于FPGA的未ASIC产品,你应该使用复位信号

initial begin 
    LFSR = 4'd15; 
end 
+0

我认为最初的陈述通常用于实现测试平台并且不可合成 – aaamourao

+0

并且复位信号会使您的LFSR在每次打开时生成相同的数字序列 – aaamourao

+0

@dasho lfsr在打开时预计会给出相同的序列这就是为什么他们是伪随机的。初始语句是可合成的,用于在fpgas上设置默认值。 – Morgan

相关问题