这不就很清楚了嘛。七楼正解:
cs为低,RD为高时,CPLD从总线上采样数据,然后lock住,自己内部去想怎么处理就怎么处理;
cs为低,RD也为低时,CPLD驱动总线,把数据放到总线上后,在cs或者rd任意一个为高后再释放总线驱动就行了。
always @ (posedge clk , negedge rst_b)
if (!rst_b)
cpld_smpl <= 1'b0;
else
cpld_smpl <= (!cs & rd) ;
always @ (posedge clk , negedge rst_b)
if (!rst_b)
cpld_drive_bus <= 1'b0;
else
cpld_drive_bus <= !cs & !rd ;
assign bus_data[WIDTH-1:0] = cpld_drive_bus ? cpld_data_out[WIDTH-1:0] : {(WIDTH){1'bz}} ;
|