我有130位数据向量块,其中2位是标题位,128位是数据位,标题位可以是130位向量中的任何位置,我必须处理位于标题位之后的128位,如果标题是在130位向量中间的某处检测到,假设在第60位,那么我必须处理60位的当前向量块和68位的下一个向量块。我试图修复初始偏移量,之后标题出现在数据向量中但是对于最坏情况的情况会有128个案例,其中标题出现在数据向量的末尾,我想问的是有没有比使用更好的方法案件?
答案 0 :(得分:2)
保持130位向量,并将其用作移位寄存器。由于在开始处理标题和数据之前必须加载至少130位,因此请继续搜索该向量的位置128和129(最左边的两个位置)的标题。检测到标头时,130位寄存器中已加载的下一个128位是数据。
类似的东西:
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