2014-05-10 161 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

相關問題