Verilog - 动态读取寄存器的位或使用某些变量

时间:2015-10-17 07:42:40

标签: verilog xilinx

我想逐位读取8位寄存器。即先读0:3,然后是1:4,然后是2:5。一次读4位。 使用整数访问寄存器位时,下面的代码会出错。

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 个答案:

答案 0 :(得分:1)

temp=line[IndexStart +: 4];

Verilog认为这是一个动态长度选择器。这在硬件中没有意义。从Verilog 2001开始,我们引入了一个新的标准,用于进行可变位置,固定宽度选择(部件选择)。

您应该可以使用以下4位选择:

{{1}}

有关详情,请参阅Using the New Verilog-2001 Standard by Stuart Sutherland

第23页