verilog 中的位切片
Bit slicing in verilog
如何写 wdata[((8*j)+7) : (8*i)] = $random;在verilog编程语言中? ,其中 i 和 j 是 reg 类型变量。 Modelsim 给出了恒定范围变量的错误。我怎么能以正确的方式写它。
使用数组切片构造。您可以在 Array slicing Q&A
找到更详细的解释
bit [7:0] PA, PB;
int loc;
initial begin
loc = 3;
PA = PB; // Read/Write
PA[7:4] = 'hA; // Read/Write of a slice
PA[loc -:4] = PA[loc+1 +:4]; // Read/Write of a variable slice equivalent to PA[3:0] = PA[7:4];
end
Verilog 2001 语法
[M -: N] // negative offset from bit index M, N bit result
[M +: N] // positive offset from bit index M, N bit result
您应该从硬件角度考虑解决方案。
这是一种解决方案。希望对你有所帮助。
module temp(clk);
input clk;
reg i, j;
reg [23:0] register, select;
wire [23:0] temp;
initial
begin
i = 'd1;
j = 'd1;
end
generate
for(genvar i = 0; i<24; i++)
begin
assign temp[i] = select[i] ? $random : register[i];
end
endgenerate
always @ (posedge clk)
begin
register <= temp;
end
always @ *
begin
select = (32'hffff_ffff << ((j<<3)+8)) ^ (32'hffff_ffff << (i<<3));
end
endmodule
如何写 wdata[((8*j)+7) : (8*i)] = $random;在verilog编程语言中? ,其中 i 和 j 是 reg 类型变量。 Modelsim 给出了恒定范围变量的错误。我怎么能以正确的方式写它。
使用数组切片构造。您可以在 Array slicing Q&A
找到更详细的解释bit [7:0] PA, PB;
int loc;
initial begin
loc = 3;
PA = PB; // Read/Write
PA[7:4] = 'hA; // Read/Write of a slice
PA[loc -:4] = PA[loc+1 +:4]; // Read/Write of a variable slice equivalent to PA[3:0] = PA[7:4];
end
Verilog 2001 语法
[M -: N] // negative offset from bit index M, N bit result
[M +: N] // positive offset from bit index M, N bit result
您应该从硬件角度考虑解决方案。
这是一种解决方案。希望对你有所帮助。
module temp(clk);
input clk;
reg i, j;
reg [23:0] register, select;
wire [23:0] temp;
initial
begin
i = 'd1;
j = 'd1;
end
generate
for(genvar i = 0; i<24; i++)
begin
assign temp[i] = select[i] ? $random : register[i];
end
endgenerate
always @ (posedge clk)
begin
register <= temp;
end
always @ *
begin
select = (32'hffff_ffff << ((j<<3)+8)) ^ (32'hffff_ffff << (i<<3));
end
endmodule