Verilog - 动态读取寄存器位或使用一些变量
Verilog - Read bits of register dynamically or using some variable
我想逐位读取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
需要帮助。
temp=line[IndexEnd:IndexStart];
Verilog 将其视为动态长度选择器。这在硬件中没有意义。从 Verilog 2001 开始,引入了用于制作可变位置、固定宽度选择(部件选择)的新标准。
您应该能够将以下内容用于 4 位选择:
temp=line[IndexStart +: 4];
有关详细信息,请参阅 Using the New Verilog-2001 Standard by Stuart Sutherland
的第 23 页
我想逐位读取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
需要帮助。
temp=line[IndexEnd:IndexStart];
Verilog 将其视为动态长度选择器。这在硬件中没有意义。从 Verilog 2001 开始,引入了用于制作可变位置、固定宽度选择(部件选择)的新标准。
您应该能够将以下内容用于 4 位选择:
temp=line[IndexStart +: 4];
有关详细信息,请参阅 Using the New Verilog-2001 Standard by Stuart Sutherland
的第 23 页