用于状态机的Verilog行为程序,其在输入线X上对连续的同步数据流进行采样

时间:2015-11-05 09:44:01

标签: verilog

问题:

为状态机编写Verilog行为程序,在输入行X上对连续的同步数据流进行采样。状态机在序列….0110…出现时始终到输出Z.考虑序列可能是 重叠。例如,

X = 0011001101100110 Z = 0000100010010001

module find_data(in,out);
  parameter check=4'b0110;
  input [15:0]in;
  output [15:0]out;
  reg [15:0]x;
  reg [15:0]z;
  reg [3:0]maxfourchar_x,an;

  always begin
    x=in;
    z=out;
    maxfourchar_x=x[15:12];
    repeat(12) begin
      x=x<<1;
      z=z<<1;
      an= maxfourchar_x - check;
      if (an==0)
        z=z+1;
      else
        z=0;
    end
  end
endmodule

module test_find_data();
  reg [15:0]in;
  wire [15:0]out;

  initial $display("z=%b%b%b%b%b%b%b%b%b%b%b%b%b%b%b%b",out[15],out[14],out[13],out[12],ou‌​t[11],out[10],out[9],out[8],out[7],out[6],out[5],out[4],out[3],out[2],out[1],out[‌​0]);
  initial in=16'b0011001101100110;
  find_data d1(in,out);
endmodule

1 个答案:

答案 0 :(得分:1)

您在test_find_data()模块中使用了'initial'块。 “初始”块下的语句仅运行一次,时间= 0

您正在't = 0'

打印'z'的值

请参阅herehere