FPGA与DSP/ARM通信方式详解

FPGA/DSP/ARM各所所长,在日常项目中,由于设计成本、性能等多方面因素的影响,经常会遇到多种编程芯片出现在同一项目中,此时不同编程芯片之间指令与信息的交互就显得非常重要。

FPGA与DSP的通信方式

DSP的EMIF(External Memory Interface)接口可以访问多种外部存储器,如SRAM、ROM、FLASH等。EMIF接口也是DSP与FPGA进行数据传输方式的最佳选择。

  1. EMIF通信接口
    在这里插入图片描述
  2. EMIF通信Verilog设计
    本设计中出于节省IO口,将读写使能信号用bus_we信号表示[1:读;0:写]。
    //检测 读写控制信号 && 片选信号
    reg [1:0] bus_we_r ;
    reg [1:0] bus_cs_r ;
    always @(posedge clk_in or negedge rst_n_in) 
    begin
    	if(!rst_n_in) 
    	begin
    		bus_we_r  <= 2'b00;
    		bus_cs_r <= 2'b00;
    	end
        else 
        begin
            bus_we_r[0] <= bus_we;
    		bus_we_r[1] <= bus_we_r[0];
    		bus_cs_r[0] <= bus_cs;
    		bus_cs_r[1] <= bus_cs_r[0];
        end			
    end
    assign bus_we_state = bus_we_r[1] & bus_we_r[0];     //读写控制信号状态
    assign bus_cs_state = bus_cs_r[1] & bus_cs_r[0];     //片选信号状态
    assign bus_we_pos   = (~bus_we_r[1]) & bus_we_r[0] ;   //读写控制信号上升沿
    assign bus_we_neg   = bus_we_r[1] & (~bus_we_r[0]) ;   //读写控制信号下降沿
    
    //写入数据使能信号 output_en
    always @(posedge clk_in or negedge rst_n_in) 
    begin
    	if(!rst_n_in)
    	    output_en <= 1'b0;
    	else if((~bus_cs_state) && (bus_we_neg))
    	   	output_en <= 1'b1;	
    	else if(bus_cs_state) 
    	   	output_en <= 1'b0;	
    end
    //双向8位通信线三状态设置
    reg			output_en;
    reg  [ 7:0]	output_bus_data;
    wire [ 7:0]	input_bus_data;
    assign input_bus_data = bus_data;
    assign bus_data		  = output_en? output_bus_data: 8'bz;
    
    //读取数据
    always @(posedge clk_in or negedge rst_n_in) 
    begin
    	if(!rst_n_in) 
    		pulse_num	<= 0;
    	else if((~bus_cs_state) && (bus_we_pos))
    	begin
    	    case(bus_address)
    			5'd17: pulse_num[15:8]	<= input_bus_data;
    			default:   ;
    		endcase				
    	end
    end
    
    //写入数据
    always @(posedge clk_in or negedge rst_n_in) 
    begin
    	if(!rst_n_in) 
    	    output_bus_data <= 1'b0;
    	else if((~bus_cs_state) && (bus_we_neg)) 
    	begin
    	    case(bus_address)
    			'd12:	output_bus_data		<= rx_data[7:0];	//ABS0
    			'd13:	output_bus_data		<= rx_data[15:8];	//ABS1
    			'd14:	output_bus_data		<= rx_data[23:16];	//ABS2
    			'd15:	output_bus_data		<= rx_data[63:56];	//ALM
    			'd16:	output_bus_data		<= time_interval;	//time interval
    			'd27:	output_bus_data		<= rx_data[39:32];	//ABM0
    			'd28:	output_bus_data		<= rx_data[47:40];	//ABM1
    			'd29:	output_bus_data		<= rx_data[55:48];	//ABM2
    			'd30:	output_bus_data		<= rx_data[63:56];	//ALM
    			'd31:	output_bus_data		<= 8'h10;	//version V1.0
    			default:   ;
    		endcase				
    	end
    end
    

FPGA与ARM的通信方式

未完待续

  • 10
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值