Advertisement
Guest User

Untitled

a guest
Sep 6th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module verificator(input logic clk,
  2.     input logic rst,
  3.     input logic [31:0] slave_error_counter,
  4.     inout tri [31:0] data_line,
  5.     output logic clk_out,
  6.     output logic [31:0] error_counter,
  7.     output logic rdwr);
  8.    
  9.     logic [31:0] clk_counter;
  10.     logic [31:0] data_counter;
  11.     logic [31:0] data;
  12.     logic control;
  13.     logic [15:0] state;
  14.     assign data_line = control ? data : 'z;
  15.    
  16.     // creating sync clk for slave fpga
  17.     always @(posedge clk or posedge rst) begin
  18.         if(rst) begin
  19.             clk_out <= 0;
  20.             clk_counter <= 0;
  21.         end
  22.         else begin
  23.             clk_counter = clk_counter + 1;
  24.             if(clk_counter >= 10) begin
  25.                 clk_counter <= 0;
  26.                 clk_out <= ~clk_out;
  27.             end
  28.         end
  29.     end
  30.    
  31.     //creating data signal for slave fpga
  32.     always @(posedge clk_out or posedge rst) begin
  33.    
  34.         if(rst) begin
  35.             data_counter = 0;
  36.             control = 1;
  37.             data = 0;
  38.             state = 1;
  39.             error_counter = 0;
  40.             rdwr = 0;
  41.         end
  42.        
  43.         else begin
  44.             case (state)
  45.                 1: begin // start writing to port
  46.                         data_counter = data_counter + 1;
  47.                         control = 1;
  48.                         rdwr = 0;
  49.                         data = data_counter;
  50.                         state = 2;
  51.                     end
  52.                 2: begin //start reading from port
  53.                         control = 0;
  54.                         rdwr = 1;
  55.                         state = 3;
  56.                     end
  57.                 3: begin // validate data from port
  58.                         if(data_line != data_counter)
  59.                             error_counter = error_counter + 1;
  60.                         //rdwr = 0;
  61.                         state = 4;
  62.                     end
  63.                 4:  begin
  64.                         rdwr = 0;
  65.                         state = 1;
  66.                     end
  67.                 default:;
  68.  
  69.             endcase
  70.         end
  71.        
  72.     end
  73.  
  74. endmodule
  75.  
  76. module verificator_slave(input logic clk,
  77.     input logic clk_out,
  78.     input logic rst,
  79.     input logic rdwr,
  80.     inout tri [31:0] data_line,
  81.     output logic [31:0] slave_error);
  82.    
  83.     logic control, data_counter_flag;
  84.     logic [15:0] state;
  85.     logic [31:0] error_counter, data_aquired, data, data_counter;
  86.    
  87.     logic drdwr, dclk_out;
  88.     always @(posedge clk) begin
  89.         drdwr <= rdwr;
  90.         dclk_out <= clk_out;
  91.     end
  92.    
  93.     always @(posedge dclk_out or posedge rst) begin
  94.         if(rst) begin
  95.             control = 0;
  96.             data_aquired = 0;
  97.             state = 2;
  98.             slave_error = 0;
  99.             data_counter = 0;
  100.             data_counter_flag = 0;
  101.         end
  102.        
  103.         else begin
  104.             if(drdwr == 0) begin
  105.                 data_counter_flag = 1;
  106.                 case (state)
  107.                 1: begin
  108.                     control = 0;
  109.                     state = 2;
  110.                     end
  111.                 2: begin
  112.                         data = data_line;
  113.                     state = 1;
  114.                     end
  115.                 default:;
  116.                 endcase
  117.             end
  118.             else if (drdwr) begin
  119.                 state = 1;
  120.                 if(data_counter_flag) begin
  121.                     data_counter_flag = 0;
  122.                     data_counter = data_counter + 1;
  123.                    
  124.                     if (data != data_counter)
  125.                         slave_error = slave_error + 1;
  126.                 end
  127.                 control = 1;
  128.             end
  129.         end
  130.        
  131.     end
  132.  
  133. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement