基本电路总结
1、握手信号:
1 module handshack 2 ( 3 input clk, 4 input rst_n, 5 input req, 6 input [7:0] datain, 7 output ack, 8 output [7:0] dataout 9 ); 10 11 reg reqr1,reqr2,reqr3; 12 reg [7:0] dataoutr; 13 reg ackr; 14 15 always @ (posedge clk,negedge rst_n) 16 if(!rst_n) 17 {reqr3,reqr2,reqr1} <= 3'b111; 18 else 19 {reqr3,reqr2,reqr1} <= {reqr2,reqr1,req}; 20 21 wire pos_req1 =reqr1 & ~reqr2; 22 wire pos_req2 =reqr2 & ~reqr3; 23 assign dataout = dataoutr; 24 assign ack =ackr; 25 26 always @ (posedge clk,negedge rst_n) 27 if(!rst_n) 28 dataoutr <= 8'h00; 29 else if(pos_req1) 30 dataoutr<= datain; 31 32 always @ (posedge clk,negedge rst_n) 33 if(!rst_n) 34 ackr <= 1'b0; 35 else if(pos_req2) 36 ackr <= 1'b1; 37 else if(!req) 38 ackr <= 1'b0; 39 endmodule
2、跨时钟域的握手通信电路:
3、异步复位同步释放:
首先分析一下异步复位为什么会引入亚稳态,异步复位信号在释放的时候,如果正好与时钟的采样沿对齐的话,那么由于不确定复位信号释放之后,到底是复位的值,还是采样的新的值。对于级联的寄存器,这种问题就更加难以确定。这就是异步释放引入的亚稳态。
复位信号由时钟进行同步,要么延迟一拍复位,要么立即复位。
更好的复位方式,由于置位端ENA比数据端D更容易使得复位输出稳定。
4、门控时钟的方案:
实质上是为了消除时钟上窄的脉冲!后面将波形示意图补充完整。