加快FPGA开发

  • FPGA代码模板

代码模板0:


module ad9253_driver #(
    parameter                              BIT_REVERSE         =    1             
)(       
    input                                  sys_clk                                ,//(i)
    input                                  sys_rst_n                              ,//(i)
    input                                  clk_200m                               ,//(i)

    input                                  sync_in                                ,//(i)
    output                                 adc_0_data_clk                         ,//(o)
    output            [15:0]               adc_0_a_data                           ,//(o)
    output            [15:0]               adc_0_b_data                           ,//(o)
    output            [15:0]               adc_0_c_data                           ,//(o)
    output            [15:0]               adc_0_d_data                           ,//(o)

    output                                 ADC_0_SPI_CSB                          ,//(o)
    output                                 ADC_0_SYNC                             ,//(o)
    output                                 ADC_0_PDWN                              //(o)
);

    // -------------------------------------------------------------------------
    // Internal Parameter Definition
    // -------------------------------------------------------------------------    
    //localparam                             IDLE     =    4'h00                    ;

    //---------------------------------------------------------------------       
    // Defination of Internal Signals       
    //---------------------------------------------------------------------       
    //reg               [3:0]                sta                                    ;

    // -------------------------------------------------------------------------
    // output
    // -------------------------------------------------------------------------
    //assign            program_b       =    sta == PROG                            ;
// =================================================================================================
// RTL Body
// =================================================================================================
    // always@(posedge sys_clk or negedge sys_rst_n) begin
    //     if(~sys_rst_n)begin
    //         cfg_rst_d1 <= 1'd0;
    //         cfg_rst_d2 <= 1'd0;
    //     end else begin
    //         cfg_rst_d1 <= cfg_rst;
    //         cfg_rst_d2 <= cfg_rst_d1;
    //     end
    // end


    // -------------------------------------------------------------------------
    // cmip_edge_sync Module Inst.
    // -------------------------------------------------------------------------



endmodule

代码模板1:


// =================================================================================================
// Copyright 2020 - 2030 (c) Semi, Inc. All rights reserved.
// =================================================================================================
//
// =================================================================================================
// File Name      : name.v
// Module         : name
// Function       :                      
// Type           : RTL
// -------------------------------------------------------------------------------------------------
// Update History :
// -------------------------------------------------------------------------------------------------
// Rev.Level  Date         Coded by         Contents
// 0.1.0      2023/01/05   Holt             Create new
//
// =================================================================================================
// End Revision
// =================================================================================================

module name #(
    parameter                               OUTBITW         =  8           ,
    parameter                               INBITW          =  16          ,
    parameter                               BUS_DELAY       =  1           
)(
    input                                   clk                            ,//(i)
    input                                   rst_n                          ,//(i)
    input                                   i_vld                          ,//(i)
    input             [INBITW    -1:0]      i_data                         ,//(i)
                                                                               
    output                                  o_vld                          ,//(o)
    output            [OUTBITW   -1:0]      o_data                          //(o)
);

    // -------------------------------------------------------------------------
    // Internal Parameter Definition
    // -------------------------------------------------------------------------    


    //---------------------------------------------------------------------
    // Defination of Internal Signals
    //---------------------------------------------------------------------
    (* KEEP = "TRUE", MARK_DEBUG = "TRUE" *)wire              [OUTBITW   -1:0]      data_res                       ;
    wire                                    pip_vld                        ;
    wire              [OUTBITW   -1:0]      pip_data                       ;


    // -------------------------------------------------------------------------
    // output
    // -------------------------------------------------------------------------
    assign            data_res    =         i_data[INBITW-1:INBITW-OUTBITW];
    assign            o_vld       =         pip_vld                        ;
    assign            o_data      =         pip_data                       ;


// =================================================================================================
// RTL Body
// =================================================================================================

    //---------------------------------------------------------------------
    // pipeline
    //---------------------------------------------------------------------     
generate if(BUS_DELAY==0) begin

    assign      pip_vld     =     i_vld              ;
    assign      pip_data    =     data_res           ;

end else begin
    cmip_bus_delay #(                                
        .BUS_DELAY          (BUS_DELAY              ),
        .DATA_WDTH          (OUTBITW  + 1           )
    )u_cmip_bus_delay(                              
        .i_clk              (clk                    ),//(i)
        .i_rst_n            (rst_n                  ),//(i)
        .i_din              ({i_vld   , data_res    }),//(i)
        .o_dout             ({pip_vld , pip_data    }) //(o)
    );  
end
endgenerate


endmodule





代码模板2:


module name #(
    parameter                               SIN_DATA_WD     =  11          ,
    parameter                               POS_DATA_WD     =  18          
)(
    input                                   clk                            ,//(i)
    input                                   rst_n                          ,//(i)
    input                                   sin_vld                        ,//(i)
    input             [SIN_DATA_WD   -1:0]  sin_data                       ,//(i)
    output            [POS_DATA_WD   -1:0]  notch_pos                      ,//(o)
    output            [SIN_DATA_WD   -1:0]  notch_val                      ,//(o)
    output            [SIN_DATA_WD   -1:0]  max_val                        ,//(o)
    output            [SIN_DATA_WD   -1:0]  min_val                        ,//(o)
    output            [SIN_DATA_WD   -1:0]  mid_val                        ,//(o)
    output                                  cpl                            ,//(o)
    output            [POS_DATA_WD   -1:0]  pos_cnt                         //(o)
);

    // -------------------------------------------------------------------------
    // Internal Parameter Definition
    // -------------------------------------------------------------------------    
//    localparam                              FIFO_WDTH        =  EDS_DATA_WD * NUM ;


    //---------------------------------------------------------------------
    // Defination of Internal Signals
    //---------------------------------------------------------------------
//    reg               [9:0]                 cnt                            ;

    // -------------------------------------------------------------------------
    // output
    // -------------------------------------------------------------------------
//    assign            sop_d0    =     &eds_data[BUS_DATA_WD-1:EDS_DATA_WD] & eds_vld    ;


// =================================================================================================
// RTL Body
// =================================================================================================

    //---------------------------------------------------------------------
    // pipeline
    //---------------------------------------------------------------------   
//    always @(posedge clk or negedge rst_n) begin
//        if(~rst_n)begin
//            for(i=0;i<NUM;i=i+1)
//                tap_d1[i] <= {EDS_DATA_WD{1'b0}};
//        end else begin
//            for(i=0;i<NUM;i=i+1)
//                tap_d1[i] <= tap_d0[i];
//        end
//    end



endmodule
  • FPGA状态机模板


    // -------------------------------------------------------------------------
    // Internal Parameter Definition
    // -------------------------------------------------------------------------
    localparam        IDLE      =           8'h00                          ;//
    localparam        RBD       =           8'h01                          ;//read buffer descriptor.
    localparam        WAIT      =           8'h02                          ;//descriptor need read again.
    localparam        ERR       =           8'h04                          ;//descriptor context has err.
    localparam        CPY       =           8'h08                          ;//start cdma.
    localparam        WBD       =           8'h10                          ;//write buffer descriptor.
    localparam        STOP      =           8'h20                          ;//according circle mode,decide whether stop sta.

    // -------------------------------------------------------------------------
    // FSM logic.
    // -------------------------------------------------------------------------
    always@(posedge axi_clk or negedge axi_rst_n)
        if(!axi_rst_n)begin
            sta <= IDLE;
        end else begin
            case(sta)
            IDLE :if(run_trig)
                      sta <= RBD ;
                  else
                      sta <= IDLE;
            RBD  :if(rbd_cpl && rbd_has_err)
                      sta <= ERR ;
                  else if(rbd_cpl && rbd_wait && cfg_wait_mode_en )
                      sta <= WAIT;
                  else if(rbd_cpl)
                      sta <= CPY ;
            WAIT :if(wait_ok)
                      sta <= RBD ;
                  else
                      sta <= WAIT;
            ERR  :    sta <= WBD ;
            CPY  :if(cpy_cpl)
                      sta <= WBD ;
                  else
                      sta <= CPY ;
            WBD  :if(wbd_cpl)
                      sta <= STOP;
                  else
                      sta <= IDLE;
            STOP :if(cfg_cycle_mode_en || (~eof))
                      sta <= RBD ;
                  else
                      sta <= IDLE;
            default:  sta <= IDLE;
            endcase
        end

  • Vivado常用约束


create_clock -period 5.000 [get_ports clk_200_p]
create_clock -period 6.400 [get_ports gtxq1_p]

set_false_path -from [get_clocks clk_out1_clk_wiz_0] -to [get_clocks rxoutclk_out[0]]    
set_false_path -from [get_clocks clk_out1_clk_wiz_0] -to [get_clocks rxoutclk_out[0]_1]  
set_false_path -from [get_clocks clk_out1_clk_wiz_0] -to [get_clocks txoutclk_out[0]]    
set_false_path -from [get_clocks clk_out1_clk_wiz_0] -to [get_clocks txoutclk_out[0]_1]  
set_false_path -from [get_clocks clk_out3_clk_wiz_0] -to [get_clocks txoutclk_out[0]]    
set_false_path -from [get_clocks clk_out3_clk_wiz_0] -to [get_clocks txoutclk_out[0]_1]  

#set_max_delay -from [get_clocks clk_out1_clk_wiz_0] -to [get_clocks {txoutclk_out[0]}] 10.000
#set_max_delay -from [get_clocks clk_out1_clk_wiz_0] -to [get_clocks {txoutclk_out[0]_1}] 10.000

#----------------------HDMI接口---------------------------
set_property -dict {IOSTANDARD TMDS_33} [get_ports tmds_clk_n]
set_property -dict {IOSTANDARD TMDS_33 PACKAGE_PIN H16} [get_ports tmds_clk_p]
set_property -dict {IOSTANDARD TMDS_33 PACKAGE_PIN D19} [get_ports {tmds_data_p[0]}]
set_property -dict {IOSTANDARD TMDS_33} [get_ports {tmds_data_n[0]}]
set_property -dict {IOSTANDARD TMDS_33 PACKAGE_PIN C20} [get_ports {tmds_data_p[1]}]
set_property -dict {IOSTANDARD TMDS_33} [get_ports {tmds_data_n[1]}]
set_property -dict {IOSTANDARD TMDS_33 PACKAGE_PIN B19} [get_ports {tmds_data_p[2]}]
set_property -dict {IOSTANDARD TMDS_33} [get_ports {tmds_data_n[2]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN F17} [get_ports tmds_oen]

set_property -dict {PACKAGE_PIN M15 IOSTANDARD LVCMOS33} [get_ports {led[0]}]
set_property -dict {PACKAGE_PIN G14 IOSTANDARD LVCMOS33} [get_ports {led[1]}]
set_property -dict {PACKAGE_PIN M17 IOSTANDARD LVCMOS33} [get_ports {led[2]}]
set_property -dict {PACKAGE_PIN G15 IOSTANDARD LVCMOS33} [get_ports {led[3]}]

set_clock_groups -name async_clk_group -asynchronous \
-group [get_clocks -include_generated_clocks {clk_out1_clk_wiz_0}] \
-group [get_clocks -include_generated_clocks {rxoutclk_out[0]}]



# 所有时钟都异步,用于快速制作版本,一般不推荐这么使用
create_clock -period 2.500 -name ADC_1_4_DCO   [get_ports ADC_1_4_DCO_P]
create_clock -period 2.500 -name ADC_5_8_DCO   [get_ports ADC_5_8_DCO_P]
create_clock -period 2.500 -name ADC_9_12_DCO  [get_ports ADC_9_12_DCO_P]
create_clock -period 2.500 -name ADC_13_16_DCO [get_ports ADC_13_16_DCO_P]
create_clock -period 2.500 -name ADC_17_20_DCO [get_ports ADC_17_20_DCO_P]
create_clock -period 2.500 -name ADC_21_24_DCO [get_ports ADC_21_24_DCO_P]
create_clock -period 2.500 -name ADC_25_28_DCO [get_ports ADC_25_28_DCO_P]
create_clock -period 2.500 -name ADC_29_32_DCO [get_ports ADC_29_32_DCO_P]

set_clock_groups -name async_clk_group -asynchronous -group [get_clocks FPGA_MASTER_CLOCK_P -include_generated_clocks] -group [get_clocks ADC_1_4_DCO] -group [get_clocks ADC_5_8_DCO -include_generated_clocks]\
 -group [get_clocks ADC_9_12_DCO -include_generated_clocks] -group [get_clocks ADC_13_16_DCO -include_generated_clocks]\
 -group [get_clocks ADC_17_20_DCO -include_generated_clocks] -group [get_clocks ADC_21_24_DCO -include_generated_clocks]\
 -group [get_clocks ADC_25_28_DCO -include_generated_clocks] -group [get_clocks ADC_29_32_DCO -include_generated_clocks]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值