基于E310的纯逻辑代码实现AD9361射频收发

本项目基于微相科技的E310平台实现AD9361的射频收发功能。采用纯逻辑控制的方式,不需要PS参与。实现了用VIO控制收发使能,发射功率,收发频率,数据接口时序控制,接收增益,BIST测试等功能。

顶层代码如下:

module antsdr_e310(

	input			FPGA_GCLK1,

	output			VCRX1_H,
	output			VCRX1_L,
	output			VCTX1_L,
	output			VCTX1_H,
	output			VCRX2_L,
	output			VCRX2_H,
	output			VCTX2_H,
	output			VCTX2_L,

	input			DATA_CLK_P,
	input			DATA_CLK_N,
	input			RX_FRAME_P,
	input			RX_FRAME_N,
	input	[5:0]	RX_D_P,
	input	[5:0]	RX_D_N,
	output			FB_CLK_P,
	output			FB_CLK_N,
	output			TX_FRAME_P,
	output			TX_FRAME_N,
	output	[5:0]	TX_D_P,
	output	[5:0]	TX_D_N,	
	output			RESETB,
	output			ENABLE,
	output			TXNRX,
	output			SPI_CLK,
	output			SPI_ENB,
	output			SPI_DI,
	input			SPI_DO,
	output			ENAGC,
	output			SYNC_IN,
	input	[7:0]	CTRL_OUT,
	output	[3:0]	CTRL_IN
);
	
	//AD9361 config clock and init states
	wire	        clk_80m;
	wire	        rst_n;
	wire	        init_done;
	wire			bb_pll_lock;
	wire			rx_pll_lock;
	wire			tx_pll_lock;

	//ad9361 data interface top
	wire            sample_clk;
    wire            lock_out;
    wire      		dac_valid; //always set to 1
	wire	[11:0]  dac_data_i1,dac_data_q1,dac_data_i2,dac_data_q2;
	wire 	 		adc_valid; //always 1
	wire 	[11:0] 	adc_data_i1,adc_data_q1,adc_data_i2,adc_data_q2;
	
	wire	[7:0]	mgc1_value,mgc2_value;
	wire	[32:0]	tx_lo_freq,rx_lo_freq;
	wire	[7:0]	reg006,reg007;
	wire	[8:0]	tx1_att,tx2_att;
	
	assign SYNC_IN = 0;

	clk_wiz_1 clk_wiz_1_inst(
	  .clk_out1(clk_80m),
	  .reset(1'b0),
	  .locked(rst_n),
	  .clk_in1(FPGA_GCLK1));	
	
	vio_top vio_top_inst(
		.clk		(clk_80m		),
		.probe_in0	(init_done		),
		.probe_in1	(bb_pll_lock	),
		.probe_in2	(rx_pll_lock	),
		.probe_in3	(tx_pll_lock	),		
		.probe_out0	(mgc1_value		),
		.probe_out1	(mgc2_value		), 
		.probe_out2	(tx_lo_freq		),
		.probe_out3	(rx_lo_freq		),
		.probe_out4	(bist_rx		),
		.probe_out5	(bist_loop		),
		.probe_out6	(reg006			),
		.probe_out7	(reg007			),
		.probe_out8	(tx_on			),
		.probe_out9	(rx_on			),
		.probe_out10(tx1_att		),
		.probe_out11(tx2_att		));
    
    ad9361_config ad9361_config_inst (
        .clk            (clk_80m            ),
        .rst_n          (rst_n		        ),
        .spi_clk        (SPI_CLK            ),
        .spi_csn        (SPI_ENB            ),
        .spi_miso       (SPI_DO             ),
        .spi_mosi       (SPI_DI             ),
		.txnrx		    (TXNRX              ),
		.enable		    (ENABLE             ),	
        .init_done      (init_done          ),
		.chip_rst_n	    (RESETB             ),
        .mgc1_value     (mgc1_value        	),
		.mgc2_value     (mgc2_value        	),
		.tx_lo_freq		(tx_lo_freq			),
		.rx_lo_freq		(rx_lo_freq			),		
		.bist_rx	    (bist_rx			),
        .bist_loop	    (bist_loop			),
		.reg006		    (reg006			    ),
		.reg007		    (reg007			    ),
		.tx_fast_lock	(1'b0				),
		.rx_fast_lock	(1'b0				),
		.tx_on			(tx_on				),
		.rx_on			(rx_on				),
		.bb_pll_lock	(bb_pll_lock		),
		.rx_pll_lock	(rx_pll_lock		),
		.tx_pll_lock	(tx_pll_lock		),
		.tx1_att		(tx1_att			),
		.tx2_att		(tx2_att			)
	);   

    //数据接口
	ad9361_data ad9361_data_inst (
		.sample_clk		(sample_clk			),
		.lock_out       (lock_out			),
		.rx_clk_in_p	(DATA_CLK_P	    	),
		.rx_clk_in_n	(DATA_CLK_N	    	),
		.rx_frame_in_p	(RX_FRAME_P	    	),
		.rx_frame_in_n	(RX_FRAME_N	    	),
		.rx_data_in_p	(RX_D_P	    		),
		.rx_data_in_n	(RX_D_N	    		),
		.tx_clk_out_p	(FB_CLK_P	    	),
		.tx_clk_out_n	(FB_CLK_N	    	),
		.tx_frame_out_p	(TX_FRAME_P	    	),
		.tx_frame_out_n	(TX_FRAME_N	    	),
		.tx_data_out_p	(TX_D_P	    		),
		.tx_data_out_n	(TX_D_N	    		),
		.adc_valid		(adc_valid		    ),
		.adc_data_i1	(adc_data_i1	    ),
		.adc_data_q1	(adc_data_q1	    ),
		.adc_data_i2	(adc_data_i2	    ),
		.adc_data_q2	(adc_data_q2	    ),
		.dac_valid		(dac_valid			),
		.dac_data_i1	(dac_data_i1		),
		.dac_data_q1	(dac_data_q1		),
		.dac_data_i2	(dac_data_i2		),
		.dac_data_q2	(dac_data_q2		));
		
    /************************发送测试波形**********************/
    // ad9361 TX test src
	tx_test_src tx_test_src_inst(
		.rst_n		(lock_out		),
		.sample_clk	(sample_clk		),
		.dac_valid	(dac_valid		),
		.dac_data_i1(dac_data_i1	),
		.dac_data_q1(dac_data_q1	),
		.dac_data_i2(dac_data_i2	),
		.dac_data_q2(dac_data_q2	));

	ila_adda ila_adda_inst(
		.clk	(sample_clk		),
		.probe0	(adc_data_i1	),
		.probe1	(adc_data_q1	),
		.probe2	(adc_data_i2	),
		.probe3	(adc_data_q2	),
		.probe4	(dac_data_i1	),
		.probe5	(dac_data_q1	),
		.probe6	(dac_data_i2	),
		.probe7	(dac_data_q2	),
		.probe8 (adc_valid		));

/********************RF SPD*************************/
	assign VCTX1_H = 1;	
	assign VCTX2_H = 1;
	assign VCTX1_L = 0;
	assign VCTX2_L = 0;	
	
	assign VCRX1_H = 1;
	assign VCRX2_H = 1;	
	assign VCRX1_L = 0; 
	assign VCRX2_L = 0;	
	  

endmodule

测试结果如图
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冻土卫二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值