如何在verilog中进行可变长度的位切片
how to do bit slicing of variable length in verilog
我有 130 位数据向量块,其中 2 位是 header 位,128 位是数据位,header 位可以在 130 位向量中的任何位置,我必须处理 128 位在 header 位之后,如果在 130 位向量的中间某处检测到 header,假设在第 60 个位置,那么我必须处理 60 位的当前向量块和 68 位的下一个向量块。我试图修复 header 进入数据向量之后的初始偏移量,但为此,最坏情况下会有 128 种情况,其中 header 出现在数据向量的末尾,我想问除了使用案例还有其他更好的方法吗?
保留一个130位的向量,作为移位寄存器使用。由于在开始处理 header 和数据之前必须加载至少 130 位,因此请继续在该向量的位置 128 和 129(最左边的两个位位置)搜索 header。当检测到 header 时,接下来的 128 位已经加载到您的 130 位寄存器中,是数据。
类似于:
parameter HEADER = 2'b11; // just a guess
reg [129:0] shreg = 130'b0;
always @(posedge clk) begin
if (rst == 1'b1)
shreg <= 130'b0;
else if (shreg[129:128] == HEADER) begin
// process data
// ...
// after processing, remove it from the shift register
shreg <= {129'b0,datain};
end
else
shreg <= {shreg[128:0], datain};
end
我有 130 位数据向量块,其中 2 位是 header 位,128 位是数据位,header 位可以在 130 位向量中的任何位置,我必须处理 128 位在 header 位之后,如果在 130 位向量的中间某处检测到 header,假设在第 60 个位置,那么我必须处理 60 位的当前向量块和 68 位的下一个向量块。我试图修复 header 进入数据向量之后的初始偏移量,但为此,最坏情况下会有 128 种情况,其中 header 出现在数据向量的末尾,我想问除了使用案例还有其他更好的方法吗?
保留一个130位的向量,作为移位寄存器使用。由于在开始处理 header 和数据之前必须加载至少 130 位,因此请继续在该向量的位置 128 和 129(最左边的两个位位置)搜索 header。当检测到 header 时,接下来的 128 位已经加载到您的 130 位寄存器中,是数据。
类似于:
parameter HEADER = 2'b11; // just a guess
reg [129:0] shreg = 130'b0;
always @(posedge clk) begin
if (rst == 1'b1)
shreg <= 130'b0;
else if (shreg[129:128] == HEADER) begin
// process data
// ...
// after processing, remove it from the shift register
shreg <= {129'b0,datain};
end
else
shreg <= {shreg[128:0], datain};
end