Advertisement
Guest User

Untitled

a guest
Oct 29th, 2015
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns/10ps
  2. module bit_stuffing(input logic inp_seq, bs, clk, reset,
  3.                  output logic [1:0] buffer,
  4.                  output logic bs_flag);
  5. logic [2:0] num_of_ones = 0, num_of_zeroes = 0;
  6. always @(posedge clk, posedge reset)
  7. begin
  8. if (reset)
  9.      begin
  10.      bs_flag <= 0; //область инвертирования
  11.      buffer <= 0;
  12.      end
  13. else if (bs)
  14.      if (inp_seq)
  15.          begin
  16.          num_of_ones <= num_of_ones + 1;
  17.          if (num_of_ones == 3'd4)
  18.          begin
  19.              buffer[1] <= ~inp_seq;
  20.              buffer[0] <= inp_seq;
  21.              bs_flag <= 1;
  22.          end
  23.          else if (bs_flag)
  24.          begin
  25.              if (!buffer) //на предыдущем шаге послан 0
  26.              begin //посл-ть: 01
  27.                  //buffer <= buffer << 1;
  28.                  //buffer[0] <= inp_seq;
  29.                  buffer[1] <= inp_seq;
  30.                  num_of_zeroes <= num_of_zeroes + 1;
  31.                  num_of_ones <= 0;
  32.              end
  33.              else
  34.              begin //посл-ть: 11
  35.                  num_of_zeroes <= 0;
  36.                  //buffer <= {2{inp_seq}};
  37.              end
  38.              //bs_flag <= 0;
  39.          end
  40.          else num_of_zeroes <= 0;
  41.      end
  42.      else //!inp_seq
  43.      begin
  44.          num_of_zeroes <= num_of_zeroes + 1;
  45.          if (num_of_zeroes == 3'd4)
  46.          begin
  47.              buffer[1] <= ~inp_seq;
  48.              buffer[0] <= inp_seq;
  49.              bs_flag <= 1;
  50.          end
  51.          else if (bs_flag)
  52.          begin
  53.              if (buffer[1]) //на предыдущем шаге послана 1
  54.              begin //посл-ть: 10
  55.                  //buffer <= buffer << 1;
  56.                  //buffer[0] <= inp_seq;
  57.                  buffer[1] <= inp_seq;
  58.                  num_of_ones <= num_of_ones + 1;
  59.                  num_of_zeroes <= 0;
  60.              end
  61.              else
  62.              begin //посл-ть: 00
  63.                  buffer <= buffer << 1;
  64.                  buffer[0] <= inp_seq;
  65.                  num_of_ones <= 0;
  66.                  //buffer <= {2{inp_seq}};
  67.              end
  68.              //bs_flag <= 0;
  69.          end
  70.          else num_of_ones <= 0;
  71.      end
  72. else
  73.      begin
  74.      num_of_ones <= 0;
  75.      num_of_zeroes <= 0;
  76.      //bs_flag <= 0;
  77.      buffer <= 0;
  78.      end
  79. end
  80. endmodule
  81. module flop(input logic bs_flag, clk, reset, inp_seq,
  82.          input logic [1:0] buffer,
  83.          output logic stuffed_seq);
  84. always @(posedge clk, posedge reset)
  85. if (reset) stuffed_seq <= 1;
  86. else if (bs_flag)
  87.      stuffed_seq <= buffer[1];
  88.      else stuffed_seq <= inp_seq;
  89. endmodule
  90. module testbench();
  91. logic inp_seq, bs, clk, reset;
  92. wire [1:0] buffer;
  93. bit_stuffing stuff(inp_seq, bs, clk, reset, buffer, bs_flag);
  94. flop ff(bs_flag, clk, reset, inp_seq, buffer, stuffed_seq);
  95. always
  96. begin
  97.      clk = ~clk; #10;
  98. end
  99. initial
  100. begin
  101.      $dumpfile("dump.vcd");
  102.      $dumpvars;
  103.    
  104.      clk = 1;
  105.      reset = 1;
  106.      inp_seq = 1;
  107.      bs = 0;
  108.    
  109.      #20 reset = 0;
  110.          bs = 1;
  111.          inp_seq = 0;
  112.      #20 inp_seq = 1;
  113.      #20 inp_seq = 0;
  114.      #20 inp_seq = 0;
  115.      #20 inp_seq = 0;
  116.      #20 inp_seq = 1;
  117.      #20 inp_seq = 1;
  118.      #20 inp_seq = 1;
  119.      #20 inp_seq = 0;
  120.      #20 inp_seq = 1;
  121.      #20 inp_seq = 1;
  122.      #20 inp_seq = 0;
  123.      #20 inp_seq = 0;
  124.      #20 inp_seq = 0;
  125.      #20 inp_seq = 0;
  126.      #20 inp_seq = 0;
  127.      #20 inp_seq = 0;
  128.      #20 inp_seq = 1;
  129.      #20 inp_seq = 1;
  130.      #20 inp_seq = 1;
  131.      #20 inp_seq = 1;
  132.      #20 inp_seq = 1;
  133.      #20 inp_seq = 1;
  134.      #20 inp_seq = 0;
  135.      #20 inp_seq = 0;
  136.      #20 inp_seq = 0;
  137.      #20 inp_seq = 0;
  138.      #20 inp_seq = 0;
  139.      #20 inp_seq = 1;
  140.      #20 inp_seq = 1;
  141.      #20 inp_seq = 1;
  142.      #20 inp_seq = 0;
  143.      #20 inp_seq = 0;
  144.      #20 inp_seq = 0;
  145.      #20 inp_seq = 1;
  146.      #20 inp_seq = 0;
  147.      #20 inp_seq = 1;
  148.      #20 inp_seq = 1;
  149.      #20 inp_seq = 1;
  150.      #20 inp_seq = 1;
  151.      #20 inp_seq = 0;
  152.      #20 inp_seq = 1;
  153.      #20 bs = 0;
  154.      #20 $finish;
  155. end
  156. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement