Advertisement
Taha_404

Untitled

Apr 16th, 2022
467
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: 03/19/2022 06:37:19 PM
  7. // Design Name:
  8. // Module Name: CORDIC_top
  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 CORDIC_top(
  24.         input   clk,
  25.         input   rstn,
  26.         input   cfo_en,
  27.         input   [15:0] inReal,
  28.         input   [15:0] inImg,
  29.         input   [18:0] coarseOffset,
  30.         input   [18:0] fineOffset,
  31.         output  reg [15:0] outReal,
  32.         output  reg [15:0] outImg,
  33.         output  cfo_valid
  34.     );
  35.     wire  [19:0] desiredAngle;
  36.     wire [20:0] currentAngle;
  37.     reg  [20:0] r_currentAngle;
  38.     wire muxSel;
  39.     wire [3:0] romAddress;
  40.     wire [3:0] iterCounter;
  41.     wire [19:0] theta;
  42.     wire writeEnable;
  43.     reg  [19:0] outMux1;
  44.     reg  [15:0] outMux2;
  45.     reg  [15:0] outMux3;
  46.     wire  [15:0] outShifter1;
  47.     wire  [15:0] outShifter2;
  48.     reg  [15:0] inRegister1;
  49.     reg  [15:0] inRegister2;
  50.     wire  [16:0] outAdder1;
  51.     wire  [16:0] outAdder2;
  52.    
  53.     CFO_ctrl CTRL (.clk(clk),
  54.                    .rstn(rstn),
  55.                    .cfo_en(cfo_en),
  56.                    .romAddress(romAddress),
  57.                    .muxSel(muxSel),
  58.                    .iterCounter(iterCounter),
  59.                    .writeEnable(writeEnable));
  60.                    
  61.     CFO_ROM ROM (.romAddress(romAddress),      
  62.                  .theta(theta));
  63.                  
  64.     fixed_add#(19) adder1(.num_1(coarseOffset),
  65.                           .num_2(fineOffset),
  66.                           .numOut(desiredAngle),
  67.                           .opSelect(1'b0));
  68.      
  69.     fixed_add#(20) adder2(.num_1(outMux1),
  70.                           .num_2(theta),
  71.                           .numOut(currentAngle),
  72.                          .opSelect(~outMux1[19]));
  73.                          
  74.     fixed_add#(16) adder3(.num_1(inRegister1),
  75.                           .num_2(outShifter2),
  76.                           .numOut(outAdder1),
  77.                           .opSelect(outMux1[19]));
  78.     fixed_add#(16) adder4(.num_1(inRegister2),
  79.                           .num_2(outShifter1),
  80.                           .numOut(outAdder2),
  81.                           .opSelect(~outMux1[19]));                        
  82.    CFO_shifter     shifter1(.inData(inRegister1),
  83.                             .iterCounter(iterCounter),
  84.                             .outData(outShifter1));
  85.    CFO_shifter     shifter2(.inData(inRegister2),
  86.                             .iterCounter(iterCounter),
  87.                             .outData(outShifter2));                                                  
  88.                          
  89.     always@(muxSel1 or desiredAngle or r_currentAngle)
  90.     begin
  91.       if(muxSel1==0)
  92.             begin
  93.                 if(desiredAngle >= 368640)
  94.                 outMux1 = desiredAngle-368640;
  95.                 else
  96.                 outMux1 = desiredAngle;
  97.             end
  98.          else if(muxSel1==1)
  99.          outMux1=r_currentAngle;
  100.     end
  101.     always@(muxSel1 or outAdder1 or outAdder2)
  102.     begin
  103.         if(muxSel1)
  104.         begin
  105.             outMux2 = outAdder1;
  106.             outMux3 = outAdder2;
  107.         end
  108.         else
  109.         begin
  110.             outMux2 = inImg;
  111.             outMux3 = inReal;
  112.         end
  113.     end
  114.     always@(posedge clk)
  115.     begin
  116.              r_currentAngle <= currentAngle;
  117.              inRegister1 <= outMux2;
  118.              inRegister2 <= outMux3;
  119.          
  120.          if(writeEnable)
  121.          begin
  122.              outImg <= inRegister1;
  123.              outReal <= inRegister2;
  124.          end
  125.     end
  126. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement