如何在verilog

时间:2015-07-03 06:34:23

标签: verilog

我有130位数据向量块,其中2位是标题位,128位是数据位,标题位可以是130位向量中的任何位置,我必须处理位于标题位之后的128位,如果标题是在130位向量中间的某处检测到,假设在第60位,那么我必须处理60位的当前向量块和68位的下一个向量块。我试图修复初始偏移量,之后标题出现在数据向量中但是对于最坏情况的情况会有128个案例,其中标题出现在数据向量的末尾,我想问的是有没有比使用更好的方法案件?

1 个答案:

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