2017-07-20 1048 views
0

我需要爲模塊中的座標系統使用2D數組,並且我已經創建了下面的測試代碼來測試創建和訪問數組中的值。當LED輸出爲1'b1時,此代碼應打開LED的led輸出,但目前LED保持關閉狀態(除了2D陣列外,我還排除了所有其他代碼的故障,這在我使用1D陣列時起作用)。如何在Verilog中訪問二維數組中的值?

input clk; 
reg [7:0] check[9:0]; 
reg ledreg; 
output led; 

initial begin 
    check[0][0] = 1'b1; 
    ledreg = 1'b0; 
end 

always @(posedge clk) begin 
    if (check[0][0] == 1'b1) begin 
     ledreg = 1'b1; 
    end 
end 

assign led = ledreg; 

我不知道如果我的數組初始化語法是關閉reg [7:0] check[9:0]或值檢查語法關check[0][0] == 1'b1,或者如果這是一個SystemVerilog的功能,不只有的Verilog工作(我沒有SystemVerilog但這個代碼編譯沒有錯誤,所以我不認爲這是它)。

如何檢查二維數組中的值,以便在具有特定值時可以執行操作?

+1

該代碼看起來是正確的。在你的代碼中是'clk'嗎?請確保它確實如此。另外,請在posedge邏輯中使用非阻塞賦值'<='。 – Serge

+0

您正在運行模擬還是直接使用FPGA?我記得試圖回答一個先前的問題,結果他們的FPGA縮減爲只讀一個2D陣列。解決方案是將數據緩存到1D數組中,然後讀取該數據。而FYI,你應該開始你的整個陣列,而不僅僅是你使用的位;添加一個for-loop,將每個條目分配給初始塊頂部的0。 – Greg

回答

-1

您在初始塊中分配一個值,這就是爲什麼它不接受它的原因。我已編輯你的代碼並檢查它

module led(clk,led,address 
     ); 
     input clk; 
     input [3:0] address; 
    reg [7:0] check[9:0]; 
    reg ledreg; 
    output led; 

    // initial begin 
    // check[0] = 1; 
    // ledreg = 1'b0; 
    // end 

     [email protected](posedge clk) begin 
      check[0][0] = 1'b1; 

     if (check[0][0] == 1'b1) begin 

      ledreg = 1'b1; 
     end 
     end 
    assign led = ledreg; 
    endmodule 

這個蟎幫助你,我已經包括了一個輸入信號的二維數組。

module led(clk,led,address 
    ); 
    input clk; 
    input [3:0] address; 
reg [7:0] check[9:0]; 
reg ledreg; 
output led; 

// initial begin 
// check[0] = 1; 
// ledreg = 1'b0; 
// end 

    [email protected](posedge clk) begin 
     check[address] = 8'b11111111; 

    if (check[0][0] == 1'b1) begin 

     ledreg = 1'b1; 
    end 
    end 

    assign led = ledreg; 


endmodule 

上面的代碼將分配數據對於多維陣列的第一行中的咬入,然後ü可以訪問它。

+0

這個建議沒有任何意義。它和'assing led = 1'一樣好,並且除去其他所有內容。 – Serge

+0

是的但是在我的第二個程序中,我給出了一個地址,我們可以將值存儲在數組中,然後我們可以使用它。我不關心製作led = 1我只關心從數組中檢索值。 –

0

在VERILOG此聲明一個2D REG是更規則

REG [7:0]檢查[0:9]; // reg的insted的[7:0]檢查[9:0]

,這意味着有10周8位*的REG

並且可以通過檢查評估第一8位[0]和可以訪問到第一個元素的第三位通過檢查[0] [3]

是的,你可以;)