2020-11-03

秦韵FPGA 转载或原创(七)

基于高云的fpga做一个axi lite从机总线。
  1. 简单介绍一下axi总线
  2. 写一个简单的axi从机例程
  3. 总结一下axi ,amba总线。
1 )简介
		 Axi_Lite 总线为轻量级的总线架构,一般情况下进行寄存器的读取, 慢速的数据传输,比如:读取状态寄存器,控制寄存器以及异常存储的寄存器,监控一下drm(sdram,ddr2/3...)的控制器的工作状态等等。理解起来也比较容易,简单来说就是地址,数据,读写使能,在axi总线上由相应通道如下图:很清楚的看出axi总线的工作情况,读通道,写通道。

在这里插入图片描述贴一段代码看看信号名称,简单的理解一下总线的信号端口:
这部分时写通道的,包括地址与控制通道,写数据通道,写响应通道。

	//--- AXI4-Lite Control and address Channel ------------------------------
	input [C_AXI_ADDR_WIDTH-1:0] 		axi_awaddr,
	input [2:0]							axi_awport, 		//表示着传输的特权与安全
	input 								axi_awvalid,		//表示主机可以控制写数据总线实现写功能
	output 								axi_awready,

	input [C_AXI_DATA_WIDTH-1 : 0]		axi_wdata,
	input [(C_AXI_DATA_WIDTH/8)-1 : 0]	axi_wstrb,			//表示写字节通道保持有效,在每8位的写数据总线上有1位被选通
	input 								axi_wvalid,
	output 								axi_wready,			//表示从机可以接收主机发送的数据

    output 	[1:0]						axi_bresp,			//标志从机是否接收到主机发送的数据
    output 								axi_bvalid,			//表示从机接收到主机发送的数据
    input 								axi_bready,			//表示主机可以接收到写答复信号

这部分是读通道,包括读数据,地址与控制通道。

	//--- AXI4-Lite Control and address Channel ------------------------------
	input 								axi_araddr,
	input 	[2:0]						axi_arport,
	input 								axi_arvalid,
	output 								axi_arready,		//表示主机可以读取数据
	//--- AXI4-Lite Read Data Channel ------------------------------
	output 	[C_AXI_DATA_WIDTH-1 : 0] 	axi_rdata,
	output 	[1:0]						axi_rresp,			//表示读数据传输的状态
	output 								axi_rvalid,			//表示有效的数据已传输
	input 								axi_rready,			//表示主机可以接收从机发送的数据

加一些用户寄存器端口:

	// localparam C_AXI_DATA_WIDTH = 32
	//------------------------------------------------------------
	output reg [C_AXI_DATA_WIDTH-1:0] 	RUN_CONT_REG,	//运行与控制寄存器
	output reg [C_AXI_DATA_WIDTH-1:0] 	PACKET_CNT_REG, 	//当前包数量寄存器
	output reg [C_AXI_DATA_WIDTH-1:0] 	START_REG, 	//
	output reg [C_AXI_DATA_WIDTH-1:0] 	SAMPLE_REG,
	output reg [C_AXI_DATA_WIDTH-1:0] 	FLU_HIGH_REG,
	output reg [C_AXI_DATA_WIDTH-1:0] 	FLU_LOW_REG,
	output reg [C_AXI_DATA_WIDTH-1:0] 	FLU_START_REG,
	output reg [C_AXI_DATA_WIDTH-1:0] 	FLU_STOP_REG,
	.......
####  2)代码分析
	主要展示一下,axi总线的读和写部分:
if (slv_reg_wren)
	  begin
		case ( axi_awaddr[3:0] )
		  4'h0:
			for ( byte_index = 0; byte_index <= (C_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )
			  if ( axi_wstrb[byte_index] == 1 ) begin
				RUN_CONT_REG[(byte_index*8) +: 8] <= axi_wdata[(byte_index*8) +: 8];
			  end  
		  4'h1:
			for ( byte_index = 0; byte_index <= (C_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )
			  if ( axi_wstrb[byte_index] == 1 ) begin
				PACKET_CNT_REG[(byte_index*8) +: 8] <= axi_wdata[(byte_index*8) +: 8];
			  end  
		  4'h2:
			for ( byte_index = 0; byte_index <= (C_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )
			  if ( axi_wstrb[byte_index] == 1 ) begin
				START_REG[(byte_index*8) +: 8] <= axi_wdata[(byte_index*8) +: 8];
			  end  
		  4'h3:
			for ( byte_index = 0; byte_index <= (C_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )
			  if ( axi_wstrb[byte_index] == 1 ) begin
				SAMPLE_REG[(byte_index*8) +: 8] <= axi_wdata[(byte_index*8) +: 8];
			  end  
		  4'h4:
			for ( byte_index = 0; byte_index <= (C_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )
			  if ( axi_wstrb[byte_index] == 1 ) begin
				FLU_HIGH_REG[(byte_index*8) +: 8] <= axi_wdata[(byte_index*8) +: 8];
			  end  
		   4'h5:
			for ( byte_index = 0; byte_index <= (C_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )
			  if ( axi_wstrb[byte_index] == 1 ) begin
				FLU_LOW_REG[(byte_index*8) +: 8] <= axi_wdata[(byte_index*8) +: 8];
			  end 
		    4'h6:
			for ( byte_index = 0; byte_index <= (C_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )
			  if ( axi_wstrb[byte_index] == 1 ) begin
				FLU_START_REG[(byte_index*8) +: 8] <= axi_wdata[(byte_index*8) +: 8];
			  end   
		  default : begin
					  RUN_CONT_REG<= RUN_CONT_REG;
					  PACKET_CNT_REG<= PACKET_CNT_REG;
					  START_REG<= 32'h0;
					  SAMPLE_REG<= 32'h0;
					  FLU_HIGH_REG<=FLU_HIGH_REG;
					  FLU_LOW_REG<= FLU_LOW_REG;
					  FLU_START_REG<= FLU_START_REG;
					end
		endcase
	  end
读 : 
	此地址空间暂时预留4bit ,可以添加16个寄存器,按需求适当增加地址位宽。
always @(*)
begin
	case ( axi_araddr[3:0]  )
		4'h0   : reg_data_out <= RUN_CONT_REG;
		4'h1   : reg_data_out <= packet_cnt;
		4'h2   : reg_data_out <= Status_flag;
		4'h3   : reg_data_out <= error_flag;
        4'h4   : reg_data_out <= FLU_HIGH_REG;
		4'h5   : reg_data_out <= FLU_LOW_REG;
		4'h6   : reg_data_out <= FLU_START_REG;
		default : reg_data_out <= 0;
	endcase
end

//.......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值