fshc之请求仲裁机制的代码分析
2024-10-19 18:28:51
always@(posedge spi_clk or negedge spiclk_rst_n)
begin
if(~spiclk_rst_n)
arbiter2cache_ack_r <='b0;
else if(cache_req_sclk && flash_idle && ~atom_op_en_sync2 && ~arbiter2mcu_ack_r)
arbiter2cache_ack_r <='b1;
else if(mcu_req_arb && flash_idle && ~arbiter2cache_ack_r)
arbiter2cache_ack_r <=arbiter2cache_ack_r;
else
arbiter2cache_ack_r <='b0;
end always@(posedge spi_clk or negedge spiclk_rst_n)
begin
if(~spiclk_rst_n)
arbiter2mcu_ack_r <='b0;
else if(cache_req_sclk && flash_idle && ~atom_op_en_sync2 && ~arbiter2mcu_ack_r)
arbiter2mcu_ack_r <=arbiter2mcu_ack_r;
else if(mcu_req_arb && flash_idle && ~arbiter2cache_ack_r)
arbiter2mcu_ack_r <='b1;
else
arbiter2mcu_ack_r <='b0;
end
两个always语句块实现了三条功能:
1.cache/mcu请求如果,mcu请求已经访问flash,则cache请求不能break该访问,只能等待此次访问结束才会响应cache的访问。cache先请求也同理。两个always语句参考对比看,不要只看一个。
2.cache/mcu请求若同时有效,则cache请求的优先级高于MCU的请求。主要利用ifelse语句的优先级实现的。第6行代码优先级高于第20行代码。
3.如果atom_op_en_sysn2有效,只响应MCU的请求。
4.注意本模块处于sclk时钟域。但输入处于hclk时钟域。通过这两个always看不出来,呵呵。
最新文章
- javascipt的【函数表达式】
- android ProgressBar 进度条的进度两端是圆角的方法
- c#缓存 笔记
- dota BP练习工具开发:一个C/S多用户程序
- java中使用mysql
- NDK(0)简介
- Eclipse使用代码清理功能(Clean Up)
- 2014年度辛星css教程夏季版第七节
- 关于开发环境 git 重新部署
- c#变量在for循环内声明与外的区别
- 小猪的Android入门之路 Day 4 - part 1
- Java基础(2)-基础类型
- [伟哥开源项目基金会](https://github.com/AspNetCoreFoundation)
- Go-单元测试
- 解决依赖冲突:maven-enforcer-plugin插件
- L337 Should We Relax About Screen Time?
- JS应用实例5:全选、动态添加
- Spring tokenizeToStringArray
- html 基础之a标签的属性target解析
- 《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力
热门文章
- Hexo搭建博客教程(1) - 安装环境与本地搭建
- bzoj 2441 [中山市选2011]小W的问题
- Codeforces Round #542(Div. 2) A.Be Positive
- [已读]Nodejs高级编程
- audio、video的控制
- aspx页面调用webapi接口报错:远程服务器返回错误:(500)内部服务器错误
- [问题解决]Deepin环境变量设置无效解决
- c++的const和static区别
- selenium-WebElement接口常用方法
- spring 上传附件