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看不出来,呵呵。

最新文章

  1. javascipt的【函数表达式】
  2. android ProgressBar 进度条的进度两端是圆角的方法
  3. c#缓存 笔记
  4. dota BP练习工具开发:一个C/S多用户程序
  5. java中使用mysql
  6. NDK(0)简介
  7. Eclipse使用代码清理功能(Clean Up)
  8. 2014年度辛星css教程夏季版第七节
  9. 关于开发环境 git 重新部署
  10. c#变量在for循环内声明与外的区别
  11. 小猪的Android入门之路 Day 4 - part 1
  12. Java基础(2)-基础类型
  13. [伟哥开源项目基金会](https://github.com/AspNetCoreFoundation)
  14. Go-单元测试
  15. 解决依赖冲突:maven-enforcer-plugin插件
  16. L337 Should We Relax About Screen Time?
  17. JS应用实例5:全选、动态添加
  18. Spring tokenizeToStringArray
  19. html 基础之a标签的属性target解析
  20. 《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力

热门文章

  1. Hexo搭建博客教程(1) - 安装环境与本地搭建
  2. bzoj 2441 [中山市选2011]小W的问题
  3. Codeforces Round #542(Div. 2) A.Be Positive
  4. [已读]Nodejs高级编程
  5. audio、video的控制
  6. aspx页面调用webapi接口报错:远程服务器返回错误:(500)内部服务器错误
  7. [问题解决]Deepin环境变量设置无效解决
  8. c++的const和static区别
  9. selenium-WebElement接口常用方法
  10. spring 上传附件