跨时钟之数据使能选通道设计

module mux_synchronizer(
 input   wire clka ,
  input   wire clkb , 
  input   wire rst , 
  input   wire [3:0]  data_bus , 
  input   wire data_enable_a   ,
   output  reg data_bus_b 
   );
 reg reg_data_enable_a ; 
 reg data_enable_b_mid ;
 reg data_enable_b ; 
 reg [3:0]   reg1_data_bus_a ; 
 wire [3:0]   data_bus_mux ; 
 //时钟域a下同步本地数据及其有效标志信号,改善时序
 always@(posedge clka or posedge rst) begin
        if(rst) begin
              reg_data_enable_a <= 1'b0 ; 
              reg1_data_bus_a   <= 4'd0 ; 
        end 
        else begin
              reg_data_enable_a <= data_enable_a  ; 
              reg1_data_bus_a   <= data_bus ; 
        end
end 
//将数据有效标志信号同步到b时钟域,两级同步器 
always@(posedge clkb or posedge rst) begin
          if(rst) begin 
                data_enable_b_mid <= 1'b0   ; 
                data_enable_b <= 1'b0; 
           end
           else begin 
                 data_enable_b_mid <= reg_data_enable_a; 
                 data_enable_b <= data_enable_b_mid; 
            end 
end 

assign data_bus_mux = data_enable_b ? reg1_data_bus_a : data_bus_b; 
always@(posedge clkb or posedge rst) begin
         if(rst) begin 
                  data_bus_b <= 4'b0; 
         end 
         else begin
                  data_bus_b <= data_bus_mux;
         end
end 
endmodule
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值