2014-01-18 820 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

嗨,我想我已经解决了......谢谢反正...... –