1-Configuration Read

来源:互联网 发布:青年网络公开课叶海林 编辑:程序博客网 时间:2024/05/18 01:09

Configuration Read

(0)       第一个时钟周期前

在第一个时钟周期来临之前,target处于Idle状态。在statemachine module中,当pci_frame_l变为低电平有效时,不依赖于时钟驱动,pci_ad_en使能有效。

(1)       第一个时钟周期:idle状态转入conwai状态

紧跟第一个时钟周期上升沿后,在glue module中,由于pci_ad_en有效,pci_addr锁存pci_adcbe_reg_l锁存pci_cbe_lidsel_reg锁存pci_idsel。实际上,此时,pci_addr锁存了所要读取的配置空间的寄存器地址,cbe_reg_l锁存了读配置空间命令,而idsel_reg则锁存了pci_idsel信号。但由于config_mux module与读配置空间有关的两个模块收时钟驱动,所以pci_addr, cbe_reg_l, idsel_reg三个信号不会引发读操作。

statemachine module中,置dts_oe使能有效,pci_ad_oe有效。

(2)       第二个时钟周期:conwait状态转入conwait2状态

紧跟第二个时钟周期上升沿后,在config_mux module中,由于cbe_reg_l上的读配置空间命令被检测到,cfg_out使能变为有效。而在每一个时钟周期,pci_addr[5:2]地址所对应的配置空间寄存器中的内容都会被送到cfg_dat_out上。在该modulemux section中,不依赖于时钟输入,根据cfg_out使能有效与否,会把cfg_dat_outbkend_dat中的某一个数据送到pci_dat_out上。所以,当cfg_out使能一旦有效后,cfg_dat_out中根据pci_addr[5:2]读入的配置空间寄存器值即被送到了pci_dat_out上。

由于在第一个时钟周期中,已经置pci_ad_oe有效,故在pci_top module中,不依赖于时钟驱动,pci_dat_out中的数据在第二个时钟周期后即被送到了pci_ad上。

statemachine module中,置devse_l低电平有效。同时,由于已经进入con_wait状态,不再处于idle状态,不论pci_frame_l是否撤销,pci_ad_en使能已经无效,在glue module中,不再锁存新值,保持上一个时钟周期锁存的旧值,即pci_addrcbe_reg_l, pci_idsel的值保持不变。

(3)       第三个时钟周期:conwait2状态转入con状态

config_mux module中,由于pci_addr, cbe_reg_l, pci_idsel中锁存的值保持不变,故仍然将所寻址的配置寄存器中的数据送到pci_ad上。

statemachine module中,在紧跟第三个时钟上升沿之后置trdy_l有效,以期在下一时钟收起上升沿处完成数据传输操作。由于读配置空间不支持猝发模式,故在下一个时钟周期,主设备驱动的pci_frame_l信号应该撤销无效。所以在此处检查pci_fame_l信号,若pci_frame_l, 若其仍然有效,则置stop_l信号低电平有效,以期在下一个时钟周期处完成传输后不再传输数据;若其无效,则相应地置stop_l无效。

(4)       第四个时钟周期:从con状态转入backoff状态或就地等待

在第四个时钟周期上升沿处,若pci_irdy_l低电平有效,则由于此时trdy_l也低电平有效,则主设备从pci_ad上读取数据,完成数据传输。由于再上一个周期已对pci_frame_l是否有效检测并作出相应地处理,故此时pci_frame_l已经撤销,不必再关心。若pci_irdy_l高电平无效,则置devsel_l, trdy_l有效,插入等待周期,下一时钟周期继续con状态再次尝试数据传输。由于下一周期希望完成数据传输,因此在等待周期中同样要检测pci_frame_l是否有效,并作出使stop_l有效或无效的处理。

若完成了数据传输,则在statemachine module中紧跟第四个时钟周期上升沿后置devsel_l, trdy_l, stop_l无效。

(5)       第五个时钟周期:从backoff状态转入idle状态

在本时钟周期,读配置空间寄存器数据传输操作已经完成,再次置devsel_l, trdy_l, stop_l无效。同时,置dts_oe无效。

(待补充奇偶校验的相关信号与操作。。。)

原创粉丝点击