首页 > 其他 > 详细

跨时钟域信号处理

时间:2021-05-29 08:57:14      阅读:25      评论:0      收藏:0      [点我收藏+]

(一)场景描述:

某信号signal需要在不同的时钟域进行处理,需要同步到的不同的时钟域继续使用。

举例说明:某定时器Timer包含两个时钟域bus_clk和tmr_clk。状态寄存器STS和控制寄存器CTRL定义如下。寄存器读写访问采用bus_clk时钟,Timer功能采用tmr_clk时钟,当发生溢出时置位溢出标志,即set_tof=1,set_tof属于tmr_clk时钟域,通过对寄存器相应位写1清零清除溢出标志,即clr_tof=1,clr_tof属于bus_clk时钟域。经过跨时钟域处理之后,需要产生两个信号TOF和tof_async,TOF为寄存器标志位供用户访问属于bus_clk时钟域,tof_async用于产生异步中断属于tmr_clk时钟域,两个信号TOF和tof_async属于不同的时钟域。

Name STS  
Offset 0x00
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Read  
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read   TOF
Write W1C
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

TOF:计数器溢出标志,通过写1清零。

Name CTRL  
Offset 0x04
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Read  
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read                              IE EN
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

IE:溢出中断使能。

EN:Timer计数使能。

(一)代码实现:

 

------------恢复内容开始------------

(一)场景描述:

某信号signal需要在不同的时钟域进行处理,需要同步到的不同的时钟域继续使用。

举例说明:某定时器Timer包含两个时钟域bus_clk和tmr_clk。状态寄存器STS和控制寄存器CTRL定义如下。寄存器读写访问采用bus_clk时钟,Timer功能采用tmr_clk时钟,当发生溢出时置位溢出标志,即set_tof=1,set_tof属于tmr_clk时钟域,通过对寄存器相应位写1清零清除溢出标志,即clr_tof=1,clr_tof属于bus_clk时钟域。经过跨时钟域处理之后,需要产生两个信号TOF和tof_async,TOF为寄存器标志位供用户访问属于bus_clk时钟域,tof_async用于产生异步中断属于tmr_clk时钟域,两个信号TOF和tof_async属于不同的时钟域。

Name STS  
Offset 0x00
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Read  
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read   TOF
Write W1C
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

TOF:计数器溢出标志,通过写1清零。

Name CTRL  
Offset 0x04
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Read  
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read                              IE EN
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

IE:溢出中断使能。

EN:Timer计数使能。

(一)代码实现:

 

 1 module cross_clk_domain(
 2 
 3     output  wire  signal1,
 4     output  wire  signal2,
 5 
 6     input    wire  set_signal_condition,
 7     input    wire  clk1,
 8     input    wire  rstn1,
 9 
10     input    wire  clr_signal_condition,
11     input    wire  clk2,
12     input    wire  rstn2
13 );
14 
15 reg  set_signal;
16 reg  set_signal_d;
17 reg  set_signal_dd;
18 reg  clr_signal;
19 reg  clr_signal_d;
20 reg  clr_signal_dd;
21 
22 always @(posedge clk1 or negedge rstn1)begin
23     if(!rstn1)begin
24         set_signal<= 1b0;
25     end
26     else if(clr_signal_dd)begin
27         set_signal<= 1b0;
28     end
29     else if(set_signal_condition)begin
30         set_signal<= 1b1;
31     end
32 end
33 
34 always @(posedge clk2 or negedge rstn2)begin
35     if(!rstn2)begin
36         set_signal_d   <= 1b0;
37         set_signal_dd <= 1b0;
38     end
39     else begin
40         set_signal_d   <= set_signal;
41         set_signal_dd <= set_signal_d;
42     end
43 end
44 
45 always @(posedge clk2 or negedge rstn2)begin
46     if(!rstn2)begin
47         clr_signal <= 1b0;
48     end
49     else if(~set_signal_dd )begin
50         clr_signal <= 1b0;
51     end
52     else if(clr_signal_condition)begin
53         clr_signal <= 1b1;
54     end
55 end
56 
57 always @(posedge clk1 or negedge rstn1)begin
58     if(!rstn1)begin
59         clr_signal_d   <= 1b0;
60         clr_signal_dd <= 1b0;
61     end
62     else begin
63         clr_signal_d   <= clr_signal;
64         clr_signal_dd <= clr_signal_d   ;
65     end
66 end
67 
68 assign signal1=set_flag;
69 assign signal2=set_flag_dd;
70 
71 endmodule

 

------------恢复内容结束------------

跨时钟域信号处理

原文:https://www.cnblogs.com/chipInn/p/14824059.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!