当前位置:网站首页>【手撕AHB-APB Bridge】~ AHB地址总线的低两位为什么不用来表示地址呢?
【手撕AHB-APB Bridge】~ AHB地址总线的低两位为什么不用来表示地址呢?
2022-08-01 07:18:00 【IC二舅】
本章目录:
0. 前言
如果大家还想继续看我的文章和笔试面试合集,麻烦大家关注一下我的 微信公众号,名字叫“IC二舅”,会有很多资料和各种合集都可以看得到,谢谢大家!!!
接下来回到正题===>
更新这篇博客是因为在做项目的过程中在遇到了问题,以下是简单的描述:
constraint haddr_constr{
(hsize == HWORD) -> (haddr[0] == 1'b0);
(hsize == WORD) -> (haddr[1:0] == 2'b0);
solve hsize before haddr;
}
起初不是很了解为什么要进行限制,学习之后明白了,以下是我的个人理解,希望大家批评指正!!!
1. 低两位的作用
AHB总线的低两位传递的信号不是用来表示数据的地址,表示数据地址的是除去低两位的剩余30位。如下图所示,HSIZE决定了传输的类型,是WORD、BYTE还是HALFWORD;在地址阶段,HADDR的低两位和HSIZE信号一起决定传输,分别存储在数据总线的哪些位置上。
大家可以观察图发现,HSIZE=00时,意味着传输的是BYTE,8位的,那么,HADDR就要决定你是存储在哪个八位上;同理,HIZE=01,那你HADDR的低一位就不起作用了,就是0;同理,HSIZE=10时,传输一个WORD,32位,那你的HADDR的两位都是0,这就是为什么要对其ADDR低两位进行限制。
2. 为什么ADDR低两位用来存储其他信息,而不表示地址信息呢?
主要原因是数据总线为32bit,数据交互的过程都是以32bit(4个字节)来进行的,如果只需要读写一个或者半个字,可以通过上面的方法取得。
因此,CORTEX-M核中,地址的偏移总是以“4”为单位进行偏移,因此低两位一直没有用到,因此用来存储其他信息了。如下图所示,地址每次偏移4字节,低两位就是没用到。
不论怎么样,低两位总是用不到更新地址,因为每次都是以4为单位递增,也就是从第三位开始递增。
2. 关于solve…before…的说明
之前在学习SV的时候,没见过这种约束,今天学习一下
(之前的约束可以参考另一篇博客:传送门)
SystemVerilog中随机变量在常见的约束(符号约束、inside约束、条件约束、内嵌约束)条件下,其随机值出现的概率是均等的。但是 使用solve…before约束后,将会改变随机数值的出现几率,使得某些特定的取值情况更易出现。
2.1 没有solve…before…
class transaction;
rand bit a;
rand bit[1:0] data;
constraint c1{
a -> data==3'h3;} //条件约束
endclass
module gen_data;
initial begin
transaction tr=new() ;
for(int i=0; i<10; i++ ) begin
tr.randomize() ;
$display("a= %0d, data= %0d",tr.a, tr.data) ;
end
end
endmodule
上边这个仅仅添加了一个条件约束,结果如下:
打印结果如下:
a= 0, data= 2;
a= 0, data= 2;
a= 0, data= 3;
a= 0, data= 1;
a= 0, data= 0;
a= 0, data= 2;
a= 1, data= 3;
a= 0, data= 3;
a= 0, data= 1;
a= 0, data= 1;
由于条件约束的存在,当a=1,data只能为3;而a=0,data可取0,1,2,3四种组合,所以共有5种组合,每种组合出现的概率相同,即1/5,如下表:
2.2 加上solve…before…
class transaction;
rand bit a;
rand bit[1:0] data;
constraint c1{
a -> data==3'h3; //条件约束
solve a before data;} //在给出data随机值之前先给出a的随机值
endclass
module gen_data;
initial begin
transaction tr=new() ;
for(int i=0; i<10; i++ ) begin
tr.randomize() ;
$display("a= %0d, data= %0d",tr.a, tr.data) ;
end
end
endmodule
除了有一个条件约束外,还增加了solve…before…,随机的结果的概率会发生改变。
打印结果如下:
a= 1, data= 3;
a= 0, data= 2;
a= 0, data= 3;
a= 0, data= 1;
a= 1, data= 3;
a= 0, data= 2;
a= 1, data= 3;
a= 0, data= 3;
a= 0, data= 1;
a= 0, data= 1;
由于 solve a before data约束的存在,随机变量a会先被赋予随机值,a为1或0的概率为1/2,接下来再为data随机变量赋随机值,其概率取决于a的值,如下表:
注意:randc类型变量不被允许使用solve…before约束;
参考文献
声明
本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!
本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!
如果觉得对你有用的话,记得收藏+评论!!!
边栏推荐
- Srping中bean的生命周期
- 13 - JUC CountDownLatch concurrent programming
- pytest接口自动化测试框架 | parametrize中ids的用法
- The use of Golang: go template engine
- Image lossless compression software which works: try completely free JPG - C image batch finishing compression reduces weight tools | latest JPG batch dressing tools download
- 仿牛客网讨论社区项目—项目总结及项目常见面试题
- 05-SDRAM: Arbitration
- pytest接口自动化测试框架 | 集成Allure测试报告
- 根据指定区域内容生成图片并进行分享总结
- Compare two objects are the same depth
猜你喜欢
The BP neural network based on MATLAB voice characteristic signal classification
小程序通过云函数操作数据库【使用get取数据库】
我三本学历,五面阿里,被面试官“供”着出来了,拿了33*15的Offer
聊一聊ICMP协议以及ping的过程
crypto-js uses
Fist game copyright-free music download, League of Legends copyright-free music, can be used for video creation, live broadcast
NIO programming
仿牛客网讨论社区项目—项目总结及项目常见面试题
Golang:go获取url和表单属性值
Introduction to the basic principles, implementation and problem solving of crawler
随机推荐
爬虫框架 Scrapy 详解
企业员工人事管理系统(数据库课设)
rhcsa 第三次
【HDLBits 刷题】Circuits(1)Combinational Logic
阿里云李飞飞:中国云数据库在很多主流技术创新上已经领先国外
Golang:go获取url和表单属性值
搜索框字符自动补全
R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:gtExtras包的pad_fn函数与gt::fmt函数一起用于填充包含数值的特定列、对数据列的数值进行十进制对齐(从小数点对齐)
Leetcode第 304 场周赛
Vim简介
app 自动化 通过工具查看app 元素 (三)
Vim三种模式
响应式织梦模板园林景观类网站
VSCode插件推荐(Rust环境)
Monitor the width and height of the parent element, adapt to the size of the plug-in
LeetCode Question of the Day (309. Best Time to Buy and Sell Stock with Cooldown)
拳头游戏免版权音乐下载,英雄联盟无版权音乐,可用于视频创作、直播
日志导致线程Block的这些坑,你不得不防
Golang:go开启web服务
Electromagnetic compatibility introductory tutorial (6) test project