数字IC设计-DMA设计-轮转优先级电路

本文介绍了一个基于状态跳转图的通道优先级译码表设计,用于DMA请求仲裁。设计中,四个DMA通道的request信号根据预定义的优先级顺序进行处理。在上电复位后,系统进入状态1,当有请求时,状态会根据请求的优先级变化。例如,req0有效时保持状态1,req1有效则跳至状态2,依此类推。RTL代码展示了轮转优先级发生器的工作原理,并提供了testbench波形以验证设计功能。

状态跳转图

在这里插入图片描述

通道优先级译码表

当处于不同状态时,不同通道的request有不同的优先级编码,00最高,11最低。
在这里插入图片描述

设计讲解

当有多个外设同时发起req请求,DMA的仲裁器将按照其规定的优先级顺序,处理DMA请求。
该文章中设计的电路是一个轮转优先级发生器,
输入为四个DMA通道的request信号,
输出为对应这4个request的仲裁优先级。
当上电复位后,系统进入状态1
然后DMA等待request
1-假如此时req0有效,则会继续维持在状态1
2-后req1有效,则状态会从状态1条至状态2
3-后req1和req0同时有效,则状态会从状态2跳至状态1.(状态2时优先级:req0>req1)
4-后req2有效,则状态会从状态1跳至状态3
5-后req2和req0同时有效,则状态会从状态3跳至状态1
6-后req2和req1同时有效,则状态会从状态1跳至状态2
7-后req2,req1,req0同时有效,则状态会从状态2跳至状态3
8-后req3有效,则状态会从状态3跳至状态0

RTL代码

module round_robin(
input  wire          hclk    ,
input  wire          hresetn ,
input  wire          req_in_ch0  ,
input  wire          req_in_ch1  ,
input  wire          req_in_ch2  ,
input  wire          req_in_ch3  ,
output wire [1:0]    priority_ch0,
output wire [1:0]    priority_ch1,
output wire [1:0]    priority_ch2,
output wire [1:0]    priority_ch3
                   );

reg  [7:0] priority     ;                    
wire [3:0] req_in       ;
wire [3:0] arb_state    ; 
reg  [3:0] arb_state_pre;
reg  [3:0] req_in_dly   ;

assign req_in = {
   
   req_in_ch3,req_in_ch2,req_in_ch1,req_in_ch0};

 always @ 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搞IC的那些年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值