속성과 명확하게 등록 응용 프로그램에 대한 기사

기사에 기록 된 이름은 "수석 검증 엔지니어가 어떻게 레지스터에 의해 기사를 설계하는 방법을 알려하는"경우,이 문서가 가능성이 큰 BBS에 전달하는 것입니다, 좋은 트래픽을 얻을. 내가 나를 생각할 때 나는 그들이 그래서, 하, 하,이 제목이 정말 감당할 수 있다고 생각하지 않았다 주장, 내 검증 엔지니어보다 더 많이했다!

개념 등록 (세그먼트 도메인) 액세스 속성

다음 일반적인 레지스터 정의된다.

저장 이름 : 시스템 구성 레지스터 [0xC800_0000]

도메인 이름 세그먼트

도메인 섹션 범위

액세스 속성

기본 값

기술

RSV

31-7

RO

0

보유

비디오 _ 형식

6-4

RW

0

시작 코어

0 : RAR

1 : MPEG4

2 : AVI

3 : 3GP

4 : FLV

5 :

다른 사람 : RSV

RSV

3-1

RO

0

보유

mode_type

0

RW

0

0 : 정상 모드

1 : 테스트 모드

액세스 도메인 부 단부의 모양, 프로세서에서 (예를 들면, CPU). mode_type 예에서, 액세스 속성 필드 부분은 값 필드 세그먼트는 프로세서가 판독 될 수 있고, 어느 프로세서가 기록 될 수 있음을 나타내는, RW (읽기 쓰기)된다. 일반적으로, 레지스터 액세스 속성 레지스터에 접근이 일치 세그먼트 속성 필드. 레지스터 예약 필드를 들어, 일반 프로세서 동작 정보 만이 "0"의 디폴트 값을 판독 할 수있는 예약 필드 필드 세그먼트가 예약되지 않은 표지 된 예약 필드 액세스 속성 일 수있다 "는 RO (읽기 전용) . "

인해 도메인 세그먼트 mode_type 및 video_format 액세스 속성 RW 인 것을 상기 예에서 예약 필드의 존재를, 상기 액세스 속성 RW의 "시스템 구성 레지스터"하지만 예약 필드의 액세스 특성에 RO, 즉 레지스터 액세스 속성 및 영역 세그먼트가 존재할 것이다 액세스 일치하지 않는 속성의 경우.

설명의 편의를 위해, 모든 "속성 레지스터 액세스」이하로서 특히 유효하다"속성 액세스 도메인 세그먼트. "

레지스터 액세스 구조

 

도시 된 바와 같이, 그 버스 마스터 논리 설계를 통해 액세스 버스 슬레이브의 프로세서 (CPU). 이 기입 동작하는 경우는, 판독 결과 일반 변환 로직 처리를보고, 판독 동작의 경우 분석 버스 슬레이브 레지스터 버스 액세스는 일반적으로, 논리 처리를 전환하도록 구성된다.

이하의 설명의 편의를 위하여, 상기 프로세서는 "데이터"라는 정보,라고도 내부 로직 설계에 기억 된 기존의 정보 기록합니다 "세그먼트 값 필드."

UVM -defined 액세스 속성 레지스터

UVM定义的寄存器访问属性共有25个。如果想一下记住25个访问属性,还是比较难的。因此,我们需要对访问属性先做一个归纳总结:

1、  所有包括R的访问属性,会将寄存器的“域段值”读出给处理器;

2、  所有包括W的访问属性,会将处理器的“数据”,传递给寄存器域段处理,但不一定是简单的赋值操作;

3、  读操作的处理范围是整个寄存器(因为读操作无法区分读哪个域段,不读哪个域段);

4、  写操作的处理范围可以是整个寄存器,也可以是某个域段,当需要区分域段时,需要通过1(或0)标记哪个域段信息被操作;

5、  所有包括“C”的访问,将清除(清0)对应处理范围的信息,处理范围可能是整个寄存器,也可能是整个域段;

6、  所有包括“S”的访问,将置位(置1)对应处理范围的信息,处理范围可能是整个寄存器,也可能是整个域段;

7、  所有包括“T”的访问,将翻转(0->1,1->0)对应处理范围的信息,处理范围可能是整个寄存器,也可能是整个域段;

如果您已经理解以上7点,那么我们可以继续学习UVM的寄存器属性了

UVM定义的寄存器访问属性如下所示。

”RO” W: no effect, R: no effect
”RW” W: as-is, R: no effect
”RC” W: no effect, R: clears all bits
”RS” W: no effect, R: sets all bits
”WRC” W: as-is, R: clears all bits
”WRS” W: as-is, R: sets all bits
”WC” W: clears all bits, R: no effect
”WS” W: sets all bits, R: no effect
”WSRC” W: sets all bits, R: clears all bits
”WCRS” W: clears all bits, R: sets all bits
”W1C” W: 1/0 clears/no effect on matching bit, R: no effect
”W1S” W: 1/0 sets/no effect on matching bit, R: no effect
”W1T” W: 1/0 toggles/no effect on matching bit, R: no effect
”W0C” W: 1/0 no effect on/clears matching bit, R: no effect
”W0S” W: 1/0 no effect on/sets matching bit, R: no effect
”W0T” W: 1/0 no effect on/toggles matching bit, R: no effect
”W1SRC” W: 1/0 sets/no effect on matching bit, R: clears all bits
”W1CRS” W: 1/0 clears/no effect on matching bit, R: sets all bits
”W0SRC” W: 1/0 no effect on/sets matching bit, R: clears all bits
”W0CRS” W: 1/0 no effect on/clears matching bit, R: sets all bits
”WO” W: as-is, R: error
”WOC” W: clears all bits, R: error
”WOS” W: sets all bits, R: error
”W1” W: first one after HARD reset is as-is, other W have no effects, R: no effect
”WO1” W: first one after HARD reset is as-is, other W have no effects, R: error
”NOACCESS” W: no effect, R: no effect

 

寄存器访问属性的应用

RW(读写)

RW寄存器是逻辑设计中数量最多的寄存器,一般用于配置操作。其中的读操作是可测试性设计,写入的寄存器,处理器可以通过读取操作,判断写入信息是否正确。

 

有“高人”曾建议,配置寄存器就应该采用“WO只写”方式,这样可以节省寄存器资源。我当时真的感到“天雷滚滚”!不怕被测试、软件,以及项目经理骂死,就这么设计好了。省的那点资源,不够费的功夫。

RO(只读)

RO寄存器是逻辑设计中数量第二多的寄存器,一般用于状态指示,或者信息采样。

状态指示举例:当前的时钟是否锁定(PLL_LOCK);当前的状态机状态(FSM_State);

信息采样举例:当前处理数据的平均功率统计(averagepower)。

 

RC(读清)

RC寄存器,读操作后,域段信息就被清除。应用RC寄存器的考虑因素包括:

从设计便利性考虑:一段时间的统计信息,如计数值,或者平均功率,读操作完成后,数据清零,重新统计;

从信息的重要性考虑:相对不是特别重要的信息,一般可以采用读清操作。

RC寄存器与RO寄存器的结构基本一致,仅多了一步清除操作。

RS(读置位)

与RC的应用场景类似,有时候计数器置位后,下一次计数则从0xffff直接跳到0,比较方便。但是,本能上不喜好这样的设计,没有任何特殊理由。

 WC(写清)

主要与RC(读清)寄存器对比,相比较读清,写清可以在软件确信获取到信息后,再清除信息。需要注意的是,WC(写清)是与RC(读清)做选择,而不是和W1C(写1清)做选择。因为WC和RC都是对整个寄存器的操作,而W1C是对域段的操作,应用场景完全不同。


W1C(写1清)

最常用于“中断状态指示寄存器”。

当中断发生时,逻辑发送中断“脉冲”给寄存器域段缓存。处理器收到中断线指示(中断使能场景)后,读取相应的“中断状态指示寄存器”,获取是哪个信息导致的中断。处理器依次处理中断对应信息,完成中断处理程序后,向对应域段的写1,清除对应域段。

一般W1C寄存器,与某个RW寄存器的域段一一对应,该RW寄存器为“中断状态指示使能寄存器”,一个bit的使能,对应一个bit的中断状态指示。

 

写1清的好处是,仅操作对应域段,而不影响其他域段的中断信息。

W1C(写1清)要小心“电平指示”中断

对于“脉冲”指示的中断,中断信息缓存在寄存器域段里,如果清中断,系统中就不再有中断指示。但是,对于“电平指示”的中断,仅仅清除寄存器域段中的指示是不够的,还需要清除逻辑处理发出的持续电平信号。否则,即使清除了寄存器域段中的中断指示,逻辑处理的中断电平又会立刻将寄存器中的中断指示拉起。导致最终陷入“清中断->重新拉起中断”的死循环。

W1T(写1翻转)

一个非常有意思的寄存器访问属性,最常用于“总线测试寄存器”。举例如下:

当“域段值”为8’hFF时,写入8’h55,读出8’hAA,证明总线(APB/AXI)读写正常。

W1(只写1次)

一般这样的寄存器应用于做“一次”操作的判断(flag)。应用该寄存器的需求分析:

1、  从便利性的角度分析:可以多个软件进程调用写,只要有一个写操作,写操作就记录,且屏蔽后续的写操作。在某些场景下,这样的设计会比较方便;

2、  从“安全性”的角度分析:某些特殊信息,如DDR初始化启动指示等,上电后,仅操作一次。

但是,从设计角度讲,这样的设计有些过于严格要求硬件,而放松软件。但是,硬件如何设计不合理,软件是没有办法挽回的。例如DDR初始化,可能在某些场景,需要执行两次,如果软复位操作不到对应寄存器,系统就可能挂死。因此,要慎用W1(只写1次)访问属性的寄存器。

 

其余寄存器访问属性

其余寄存器访问属性,不是特别常见,本文就不再赘述。虽然更多的寄存器属性,可以带来应用上的方便,但是也会带来理解上的障碍。从沟通的角度来看,我建议尽量少用不常见的寄存器属性。当然,哪些寄存器访问属性是常用的,哪些是不常用的,这个问题可以好好探讨。

发布了133 篇原创文章 · 获赞 129 · 访问量 33万+

추천

출처blog.csdn.net/wofreeo/article/details/103199786