Advertisement
Taha_404

Untitled

May 7th, 2022
611
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 05/06/2022 07:53:46 PM
  7. // Design Name:
  8. // Module Name: cfo_memory
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21.  
  22.  
  23. module cfo_memory #(parameter DATA_WIDTH = 16)
  24.     (
  25.         input  i_clk,
  26.         input  i_EN,
  27.         input  i_rstn,
  28.         input  [DATA_WIDTH-1:0] i_I,
  29.         input  [DATA_WIDTH-1:0] i_Q,
  30.         output reg [DATA_WIDTH-1:0] o_I,
  31.         output reg [DATA_WIDTH-1:0] o_Q,
  32.         output reg o_valid
  33.     );
  34. reg [DATA_WIDTH-1:0] r_I [DATA_WIDTH-1:0];
  35. reg [DATA_WIDTH-1:0] r_Q [DATA_WIDTH-1:0];
  36. reg [3:0] r_inputAddress;
  37. reg [3:0] r_outputAddress;
  38. reg [3:0] r_delayedAddress;
  39. reg [5:0] r_validCounter;
  40. reg [5:0] r_validEst;
  41.  
  42. always@(posedge i_clk, negedge i_rstn)
  43.     begin
  44.         if(~i_rstn)
  45.             begin
  46.                 r_inputAddress <= 4'd0;
  47.                 r_delayedAddress <= 4'd0;
  48.                 r_validCounter <= 6'd0;
  49.             end
  50.         else if(i_EN)
  51.             begin
  52.                 r_inputAddress <= r_inputAddress+1;
  53.                 r_I[r_inputAddress] <= i_I;
  54.                 r_Q[r_inputAddress] <= i_Q;
  55.                 r_delayedAddress <= r_inputAddress;
  56.                 r_validCounter <= r_validEst;
  57.             end
  58.     end
  59.    
  60. always@(*)
  61.     begin
  62.         if(r_validCounter == 36)
  63.             begin
  64.                 r_validEst = 6'd0;
  65.             end
  66.         else if(r_delayedAddress == 4'd15)
  67.             begin
  68.                 r_validEst = r_validCounter + 1;
  69.             end
  70.     end
  71.    
  72.    
  73.    
  74. always@(posedge i_clk, negedge i_rstn)
  75.     begin
  76.         if(~i_rstn)
  77.             begin
  78.                 r_outputAddress <= 4'b0000;
  79.             end
  80.          
  81.         else if(~i_EN && r_delayedAddress == 15)
  82.             begin
  83.                 r_outputAddress <= r_outputAddress+1;
  84.                 o_I <= r_I[r_outputAddress];
  85.                 o_Q <= r_Q[r_outputAddress];
  86.             end
  87.     end
  88.        
  89.  always@(posedge i_clk, negedge i_rstn)
  90.     begin
  91.         if(~i_rstn)
  92.             begin
  93.                 o_valid <= 1'b0;
  94.             end
  95.         else if(i_EN && r_delayedAddress == 14)
  96.             begin
  97.                 o_valid <= 1'b1;
  98.             end
  99.         else if (i_EN && r_delayedAddress == 15)
  100.             begin
  101.                  o_valid <= 1'b0;
  102.             end
  103.            
  104.    end
  105. endmodule
  106.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement