1. 握手与反压
一般我们会将模块分为发起操作的Master和接受执行操作的Slave。Master和Slave之间需要用握手的方式去确保数据或指令的正常执行。而反压是Slave告知Master自己能正常接收数据和指令的手段;
握手机制需要注意的三件事:
1. valid与ready不可以过度依赖,表现在vaild不可以等待ready拉高后再拉高,为了防止死锁;
2. Valid拉高时与有效数据同步,时钟对齐;
3. Valid可以先拉高后等待ready拉高,每次成功握手后,如果没有新的有效数据,valid要拉底;
面对反压一般是指Slave还没准备好,这是Master需要保持数据不懂,等待ready信号握手成功后再更新数据;
一般情况下,sender和receiver直接相连反压很好设局,但是如果sender和receiver通过总线相连,总线恰好是流水线的形式,那么receiver要对sender进行反压的话,就不可以跨级反压,原因在于当receiver反压sender时,仍然有n(流水线数)的数据仍未传输;
解决方法:
1. 带存储器的跨级反压:通过将未被传输的数据通过fifo保存,防止数据被冲毁。需要注意到是当fifo内存空间只剩n(流水线数)应反压sender停止传输;
2. 不带存储器的反压;
3. 带存储器的逐级反压;
2. APB
我理解是一种协议,使得主机能通过寻址的方法对从机进行数据的写入和读出操作;
APB特点:支持多从设备,一次读写占两个周期,不支持突发传输;
APB2信号:
PCLK:时钟信号;
PRESETn:复位信号;
PSEL:拉高表示要进行传输;
PENABLE:在PSEL的第二个周期拉高,传递数据;
PWRITE:1为写入操作,0为读出操作;
PRDATA:读数据总线;
PWDATA:写数据总线;
波形图如下图所示:(写入时序):
penable存在是由于历史问题,可以理解为当时设备问题,需要第一个周期读取地址,第二个周期才能传输数据;
如果使用时序逻辑可以不用penable信号,如果使用组合逻辑需要使用penable信号延迟一拍再传输数据,该通过状态机来实现;
APB3在增加了PREADY和PSLVERR信号:
PREADY:表示slave是否以及准备好接受主机传过来的信息;
PSLVERR:表示主机的这次传输是否有错误,比如时候访问了非法地址等;
波形图如下所示:
当pready信号拉低时,penable需要保持拉高,并且DATA1和ADDR1需要保持不变知道pready再次拉高;
3. AHB
AHB和APB的区别在于AHB将地址和数据的传输采用了流水线设计,使得数据不在需要通过两个周期才可以传输成功,比APB更加高效,同时支持了多主多从,突发传输等操作;
AHB组成由Decoder来选择和哪一个Slave进行通讯,后从Multiplexer选出和主机通讯的Slave信号进行输出;
主要信号组成有:
//全局信号:
HCLK :时钟信号;
HRESETn: 复位信号,第有效;
//Master信号:
HADDR:地址信号;
HBURST: 突发传输类型,只传输的数据是连续地址的,突发传输类型分为:
SINGLE:不突发传输;
INCR:非定长突发传输,不可以跨越1KBye的边界;
INCRx:定长的突发传输;
WRAPx:回环传输主要用于(cacheline)作用是当超过分组时, 数据循环传输
HMASTERLOCK:用来实现原子操作,用来绑定操作,比如读入和写出有顺序,则可将他们绑定,再他们完成后才可以进行别的操作;
HPROT:保护控制信号;
HSIZE:数据的长度;
HTRANS:传输的类型分为:
IDLE:表示没有数据传输;
BUSY:也表示没有数据传输,但此代表主机在忙,传输其实仍然在继续,一般用于突发传输中;
NONSEQ:需要传输数据,可能是只传输一次数据,或者是突发传输的第一组数据;
SEQ:需要传输数据;用于突发传输中代表连续的数据,地址需要增加;
HWDATA:写数据;
HWRITE:高代表写数据,低代表读数据;
//Slave信号:
HRDATA:读数据;
HREADYOUT:高时为数据一传输完,是Slave对主机的反压;
HRESP:表示数据是否有传输错误