AHB_RAM模块解读

文章详细介绍了AHB_RAM模块,它是一个64KBRAM,由4个8bitBRAM模块组成。AHB协议的简化版本用于通信,验证结构涉及AHB接口、配置数据库以及测试平台。测试包括冒烟测试、随机地址测试等,覆盖率关注传输地址和类型。尽管现有测试覆盖了大部分场景,但存在地址边界和非法地址未覆盖的问题,需要额外的测试用例来提高覆盖率。
摘要由CSDN通过智能技术生成

AHB_RAM

AHB_RAM是一个存储容量为64KB的RAM(随机存储器),其中RAM内部含有4块BRAM模块,每块BRAM均能存储8bit的数据,存储空间为16KB,功能就是将AHB 总线上的读写操作转化成标准的RAM读写操作进行随机读写,按照不同的burst_size_bit类型将8bit\16bit\32bit的数据按照不同的地址存储到RAM的4个BRAM寄存器中,也可以从ram中读取数据。数据存储的时候根据地址的低两位addr[1:0]决定对哪一个BRAM操作,根据地址的高addr[15:2]来索引哪一个BRAM的byte位,例如:写入一个32bit的数据,四个BRAM的使能信号就会打开,每个BRAM有2^14个byte,读写同理。

AHB协议

AHB_RAM是一个以AHB协议通信的RAM存储模块,其中,通信协议AHB采用了简化版:
1、只有一个master和一个slave,hgrant = 1;
2、模块预置条件:每次传输均正确且传输完成,hready = 1,hresp = okay;(对代码覆盖率有影响)
3、单时钟沿变化;
4、支持burst传输,但只考虑single传输,即hburst = single,htrans = idle / Nonseq两种状态;
5、burst传输支持最大位宽为32bit。
在这里插入图片描述
AHB时钟和复位的产生:
时钟在tb产生:
在这里插入图片描述
复位在ahb_if产生
initial begin end 表示在仿真开始的时候执行;
在这里插入图片描述

AHB_RAM验证结构

在这里插入图片描述
tb中主要包括AHB_RAM模块的例化、模块与验证平台接口的连接,config_db机制将ahb_interface传递于env的agent里,将ahbram_interface传递到base_test层里面例化的config里。
在base_test中例化了enviroment, config,与寄存器模型,在顶层test中配置config,通过config_db机制将config类set到底层的env组件中,config类中的rgm句柄指向寄存器模型实例,这样底层的组件通过调用cfg.rgm就可以索引到寄存器模型,方便后期代码修改。
验证环境env中例化了ahb_mst_agent, virtual_sequencer, scorboard, coverage, adapter和predictor, ahb_mst_agent包括driver, sequencer, monitor,同時將monitor的uvm_analysis_port连接到scoreboard和coverage_model的uvm_analysis_imp中。

测试

(1)smoke_test:
做了冒烟测试,写入地址范围在1000~1FFF之间 32bit_burst_size数据 再读出;
(2)diff_haddr_test:
做了随机地址测试,写入的地址范围扩大了从0000~FFFF之间32bit_burst_size数据 再读出;
(3)diff_hsize_test:
做了字对齐测试,写入的数据宽度可以是8bit,16bit,32bit,每个数据都是字对齐,地址后两位都是00);
(4)haddr_word_unaligned_test:
做了字不对齐测试,写入的数据宽度可以是8bit,16bit,32bit,可以按字分别写入不同位;
(5)reset_w2r_test:
复位之后再进行读出测试,测试复位之后还能否读出有效数据(设计的bug,复位之后不能读出0,反而是原来写入的值;
其余test则继承于base_test,但在其run_phase中例化了不同的seq,且将其挂载至顶层virt_sqr,同时通过objection机制控制仿真的运行。
diff_haddr_test和diff_hsize_test分别针对要传输的transaction的addr和burst_size做随机约束后,通过uvm_do_with宏完成读写测试; haddr_word_unligned_test随机约束burst_size,并规定burst_size = 16bit和32bit时,addr[1] = 0和addr[1:0] = 0(即支持字不对齐传输),通过uvm_do_with宏完成读写测试;

覆盖率收集

定义2个covergroup,分别关心传输地址addr和传输类型、传输位宽:
在这里插入图片描述使用shell脚本控制的文档,固定种子seed随机种子跑完以上测试,可以得到合并后的代码覆盖率情况如下:
在这里插入图片描述
在这里插入图片描述
功能覆盖率如下:
在这里插入图片描述
分析覆盖率收集情况:
关心传输地址addr的功能覆盖组地址的边界未覆盖到,同时非法地址未覆盖到。
在这里插入图片描述

代码覆盖率中hwdata和hrdata等信号的个别bit的翻转未覆盖到。
在这里插入图片描述
在这里插入图片描述
添加新的测试用例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

非法地址读写时,会按低位截取有效地址进行读写,即能正常读写,但写入地址不是预期地址。
此时加入新的定向测试后的代碼覆盖率情况如下:
在这里插入图片描述

在这里插入图片描述
加入新的定向测试后的功能覆盖率:
在这里插入图片描述
在这里插入图片描述
所有测试用例运行,
在这里插入图片描述

由于设计中AHBRAM不支持64bit位宽传输,同时只验证single传输,功能覆盖率对应部分可以先exclude;而hready、hreadyout恒为1,hresp=okay,且hselbram为1,代码覆盖率部分也可先exclude;可以得到最终的覆盖率情况:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
作为AI语言模型,我无法编写代码,但是我可以提供一个简单的AHB驱动器的伪代码示例,帮助您了解AHB驱动器的工作原理。 ``` module AHB_Driver ( input [31:0] AHB_Address, input [31:0] AHB_Data_In, input AHB_Write, input AHB_Read, input AHB_HCLK, input AHB_HRESETn, output [31:0] AHB_Data_Out, output AHB_HREADY, output AHB_HRESP ); // 内部寄存器 reg [31:0] internal_data; // AHB状态机状态定义 localparam IDLE = 0, READ = 1, WRITE = 2; // AHB状态机变量 reg [1:0] state; reg [31:0] read_address; // AHB状态机主体 always @(posedge AHB_HCLK or negedge AHB_HRESETn) begin if (!AHB_HRESETn) begin state <= IDLE; internal_data <= 0; read_address <= 0; AHB_Data_Out <= 0; AHB_HREADY <= 1; AHB_HRESP <= 0; end else begin case (state) IDLE: begin if (AHB_Read && AHB_Write) begin AHB_HRESP <= 2'b10; // 错误响应 end else if (AHB_Read) begin read_address <= AHB_Address; state <= READ; end else if (AHB_Write) begin internal_data <= AHB_Data_In; state <= WRITE; end else begin AHB_HRESP <= 2'b00; // 正确响应 end end READ: begin AHB_HREADY <= 0; if (AHB_HREADY && !AHB_HRESP) begin AHB_Data_Out <= internal_data; state <= IDLE; end end WRITE: begin AHB_HREADY <= 0; if (AHB_HREADY && !AHB_HRESP) begin state <= IDLE; end end default: begin AHB_HRESP <= 2'b10; // 错误响应 end endcase end end endmodule ``` 这是一个简单的AHB驱动器模块,可以实现单个AHB总线事务的读取和写入。该驱动器包含一个状态机,用于在AHB总线上实现读取和写入操作。在读取操作中,驱动器将读取地址保存在一个寄存器中,并在AHB_HREADY信号变为高电平时将内部数据写入AHB_Data_Out。在写入操作中,驱动器将输入数据保存在另一个寄存器中,并在AHB_HREADY信号变为高电平时将状态返回到空闲状态。如果在操作期间发生错误,则将AHB_HRESP设置为2'b10,表示错误响应。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值