2015-10-17 59 views
1

我想逐位讀取8位寄存器。即首先讀數爲0:3,然後是1:4,然後是2:5。一次讀取4位。 下面的代碼在使用整數訪問寄存器位時會出錯。Verilog - 動態讀取寄存器位或使用某些變量

module First_Module(
     clock, 
     reset, 
     enable, 
     counter_out 
    );  
// input ports 
input clock; 
    input reset; 
    input enable; 
    output [3:0] counter_out; 
wire clock; 
wire reset; 
wire enable=1'b1; 
reg[3:0] counter_out=0001; 
reg[9:0] line=1101101101; 
reg[3:0] testPattern=1101; 
reg[3:0] temp=0000; 
integer IndexStart,IndexEnd; 
initial 
begin 
IndexStart=0; 
IndexEnd=3; 
end 
initial 
    #20 $finish;  //finish after 20 time units  
always 
begin:COUNTER  
\#1 
$monitor ("counter Out = %d Reset = %d",counter_out,reset); 
$monitor ("Temp = %d ",temp); 
if(reset==1'b1)  
begin 

counter_out <= 4'b0000; 

end// if-end  
else if (enable==1'b1)  
begin  
counter_out= counter_out+1;  
IndexEnd=IndexEnd+1;  
temp=line[IndexEnd:IndexStart]; // Error at this line  

end  

end// always end 
endmodule 

幫助需要幫助。

回答

1
temp=line[IndexEnd:IndexStart]; 

Verilog認爲這是一個動態長度選擇器。這在硬件上沒有意義。從Verilog 2001引入了一個製作可變位置的新標準,固定寬度選擇(部分選擇)。

您應該能夠使用4位以下選擇:

temp=line[IndexStart +: 4]; 

欲瞭解更多信息,請參閱此工作的Using the New Verilog-2001 Standard by Stuart Sutherland

+0

23頁!非常感謝。 –