APB Slave设计实践

2023-10-21 22:30
文章标签 设计 实践 apb slave

本文主要是介绍APB Slave设计实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

APB接口描述

APB写传输

APB读传输

APB Slave 设计

APB Slave testbench


APB接口描述

APB写传输

APB读传输

APB Slave 设计

module apb_slave(//input signalspclk,presetn,psel,penable,pwrite,pwdata,paddr,//output signalsprdata);input         pclk   ;
input         presetn;
input         psel   ;
input         penable;
input         pwrite ;
input  [31:0] pwdata ;
input  [31:0] paddr  ;
output [31:0] prdata ;parameter REG1_ADDR  = 8'h00;
parameter REG2_ADDR  = 8'h04;
parameter REG3_ADDR  = 8'h08;reg [31:0] prdata    ;
wire       apb_write ;
wire       apb_read  ;
reg [31:0] reg1      ;
reg [31:0] reg2      ;
reg [31:0] reg3      ;
reg [31:0] dummy_reg ;assign apb_write = pwrite && psel && penable ;
assign apb_read  = (!pwrite) && psel && penable;//register write
always @(posedge pclk or negedge presetn)
beginif(!presetn)beginreg1 <= 32'b0;reg2 <= 32'b0;reg3 <= 32'b0;endelse if(apb_write)begincase (paddr[7:0])REG1_ADDR : reg1      <= pwdata ;REG2_ADDR : reg2      <= pwdata ;REG3_ADDR : reg3      <= pwdata ;default   : dummy_reg <= pwdata ;endcaseend
end//register read
always @(*)
beginif(apb_read)begincase (paddr[7:0])REG1_ADDR : prdata <= reg1 ;REG2_ADDR : prdata <= reg2 ;REG3_ADDR : prdata <= reg3 ;default   : prdata <= dummy_reg ;endcaseendelseprdata = 32'b0;
endendmodule
`timescale 1ns/1ps
module apb_slave_tb;reg       pclk   ;
reg       presetn;
reg       psel   ;
reg       penable;
reg       pwrite ;
reg [31:0] pwdata;
reg [31:0] paddr ;
wire[31:0] prdata;reg [31:0] rdata; //Rigster address
parameter REG1_ADDR  = 8'h00;
parameter REG2_ADDR  = 8'h04;
parameter REG3_ADDR  = 8'h08;apb_slave U_apb_slave(.pclk          (pclk),.presetn        (presetn),.psel           (psel),.penable        (penable),.pwrite         (pwrite),.pwdata         (pwdata),.paddr          (paddr),.prdata         (prdata));//clock generate
initial beginpclk = 0 ;forever#10 pclk = ~pclk;
end//reset generate
initial beginpresetn = 0;#128;presetn = 1;
end//initial statement
initial
beginpsel      = 1'b0;penable   = 1'b0;pwrite    = 1'b0;paddr     = 32'b0;pwdata    = 32'b0;wait(presetn);apb_write(REG1_ADDR,32'h12345678);
apb_read (REG1_ADDR,rdata);
#100;
apb_write(REG2_ADDR,32'h55aaaa55);
apb_read (REG2_ADDR,rdata);
#100;
apb_write(REG3_ADDR,32'h5201314a);
apb_read (REG3_ADDR,rdata);#1000;
$finish;
endtask apb_write(input [7:0] addr,input [31:0]wdata);begin@(posedge pclk);  //T2#1;pwrite = 1'b1;psel   = 1'b1;penable= 1'b0;paddr  = addr;pwdata = wdata;@(posedge pclk);  //T3#1;penable= 1'b1;@(posedge pclk);  //T4#1;pwrite = 1'b0;psel   = 1'b0;penable= 1'b0;pwdata = 32'h0;@(posedge pclk);@(posedge pclk);end
endtasktask apb_read(input [7:0] addr,output [31:0]rdata);begin@(posedge pclk);  //T2#1;pwrite = 1'b0;psel   = 1'b1;penable= 1'b0;paddr  = addr;@(posedge pclk);  //T3#1;penable= 1'b1;@(posedge pclk);  //T4#1;rdata  = prdata;psel   = 1'b0;penable= 1'b0;@(posedge pclk);end
endtaskinitial begin $fsdbDumpfile("apb_slave.fsdb");$fsdbDumpvars(0);endendmodule

APB Slave testbench

这篇关于APB Slave设计实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/257391

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指