2014-01-18 858 views
2

我是verilog的新手,所以我正在嘗試使用它,就像我總是在Java中做的一樣,它只是不編譯,我嘗試了谷歌搜索,但沒有出現...所以, 謝謝 !Verilog輸入和輸出數組

module two_to_one_com(SW,LEDR,LEDG); 

input [15:0]SW ; 
input SW17; 
output [7:0]LEDR; 
output [7:0]LEDG; 

assign X = SW[7:0]; 
assign Y = SW[15:8]; 
assign s = SW17; 
assign LEDR[7:0] = SW; 
assign M = LEDG[7:0]; 


integer index = 0; 
initial 
begin 
for(index=0;index<=7;index = index+1) 
    begin 
    assign M[index] = (~s &X[index])|(s&Y[index]); 
    end 
end 


endmodule 

所以,它只是不斷告訴我該數組M,X和Y不能被索引,因爲它們是不宣...任何人都知道任何解決辦法嗎?

+0

M是一個記憶嗎?如果是這樣,總共有多少位(寬度X深度)。 Verilog不是一種軟件語言;它用於描述硬件。 – toolic

回答

1

您需要聲明所有具有某種類型和寬度的信號(如果大於1位); assign不是聲明關鍵詞。比如,我用wire

module two_to_one_com(SW,LEDR,LEDG,SW17); 

input [15:0]SW ; 
input SW17; 
output [7:0]LEDR; 
output [7:0]LEDG; 

wire [7:0] X = SW[7:0]; 
wire [7:0] Y = SW[15:8]; 
wire s = SW17; 

請注意,我還添加SW17的端口列表。

我仍然接到有關M的投訴,但我需要知道應該有多寬(位數)。

+0

嗨,M應該是我的8位輸出,它連接到數字顯示屏以顯示數字... –

+0

但是,您正在對M:LEDG [7:0]和(〜s&X [index])進行兩項分配。 (S&Y [指數])。你不能那樣做。你想要哪一個? – toolic

+1

嗨,我想我已經解決了......謝謝反正...... –