
在以前的文章(赛普拉斯文档的翻译)中,非常认真地考虑了操作自动机Datapath。 逐渐地,我们继续研究其他UDB模块,尤其是管理和状态模块。
循环的一般内容是“ UDB。 这是什么?
第1部分。简介。 请第2部分。数据路径。第3部分。数据路径FIFO。第4部分。数据路径ALU。第5部分。数据路径。 有用的小东西。第6部分。管理和状态模块。 (当前文章)
第7部分。时序和复位控制模块第8部分。处理UDB21.3.3。 管理和状态模块
控制模块和状态的高级视图如图21-28所示。 控制寄存器的状态位被传输到跟踪资源,从而使程序能够控制UDB的行为。 状态寄存器从跟踪行接收数据,因此程序可以监视UDB执行的操作。
图21-28。 管理和状态记录器。控制模块的结构和状态在图21-29中更详细地显示。 该单元的主要目标是协调处理器核心程序与内部UDB元素之间的交互。 但是,由于与跟踪矩阵的牢固连接,可以将该模块配置为执行其他功能。
图21-29。 控制和状态模块。操作模式:
- 状态输入 可以输入从外部缠绕的线的状态并将其捕获为状态,然后读取CPU或DMA。
- 控制输出 CPU或DMA可以将数据写入控制寄存器。 该数据将确定去往跟踪资源的行的状态。
- 并行输入 -并行输入数据路径。
- 并行输出 -来自数据路径的并行输出。
- 计数器模式 在此模式下,控制寄存器用作具有可编程周期和自动复位的7位递减计数器。 跟踪通道输入可以配置为控制计数器的开启和复位。 激活此模式后,控制寄存器的功能不可用。
- 同步模式/同步模式 。 在此模式下,状态寄存器充当4位双同步器。 激活此模式后,状态寄存器的功能不可用。
21.3.3.1状态和控制模式
在控制和状态模式下工作时,该模块在图21-30所示的配置中充当状态寄存器,掩码替代寄存器和控制寄存器。
图21-30。 作业管理和状态。状态寄存器操作
每个UDB都有一个8位状态寄存器。 该寄存器的输入来自数字走线结构的任何信号。 状态寄存器是可破坏的:它在睡眠期间丢失状态,并且在唤醒后的值为0x00。 每个位都可以独立编程为以两种模式之一运行。
表21-19。 状态寄存器。
状态寄存器清除操作的一个重要功能是仅清除翘起的位。 这允许其余位继续捕获状态以维持过程的连续性。
正常阅读状态
默认情况下,CPU透明地读取相应电路的状态。 此模式可用于读取UDB内部锁存的数据。
阅读后保持状态清晰
在这种模式下,状态寄存器输入在每个控制和状态时钟周期进行采样。 如果给定时钟的信号为高电平,则无论随后的输入状态如何,该信号都会在状态位中捕获并保持为高电平。 当CPU或DMA读取状态寄存器时,该位被清除。 清除状态寄存器与模式无关,即使禁用UDB时钟,清除状态寄存器仍会发生。 它基于总线时序,是读取操作的一部分。
读取时的闩锁状态
图21-31显示了状态读取逻辑的结构。 粘性状态寄存器后面是一个锁存器,不管当前读取操作中的等待滴答次数如何,锁存器都会锁存状态寄存器数据并在读取周期内保持稳定。
图21-31。 读取状态的逻辑。中断产生
在大多数功能中,中断产生与状态位参数相关。 如图21-31所示,此功能以屏蔽操作的形式内置于状态寄存器逻辑中,并将
OR操作应用于状态。 内置中断发生器只能使用状态输入的低7位。 最高有效位(最高有效位,MSB)通常用作中断输出,可以使用数字跟踪通道转发给中断控制器。 在这种配置中,中断请求位的状态从高状态寄存器位读取。
21.3.3.2控制寄存器操作
每个UDB都有一个8位控制寄存器。 它用作系统总线上的标准读/写寄存器,这些寄存器位的输出由数字走线结构的线路控制。
控制寄存器是可破坏的:它在睡眠期间丢失状态,并且在唤醒后的值为0x00。
管理注册模式
可以用以下三种模式之一配置每个位。 通过组合两个8位寄存器CTL_MD1 [7:0]和CTL_MD0 [7:0]的位来指定配置。 例如,{CTL_MD1 [0],CTL_MD0 [0]}控制控制寄存器的零位模式(请参见表21-20)。
表21-20。 控制寄存器零位模式
直接控制寄存器模式
默认情况下,该模式为直接模式。 如图21-32所示,当将CPU或DMA写入控制寄存器时,控制寄存器的输出将在同一周期内直接发送到跟踪线。
图21-32。 直接控制寄存器模式。同步控制寄存器模式
在同步模式下,如图21-33所示,控制寄存器的输出与等于控制和状态(Status and Control,SC)当前时钟的时钟不同步。 这使您可以在选定的SC频率而不是总线时钟频率下控制输出的时序图。
图21-33。 同步控制寄存器模式。脉冲模式控制寄存器
脉冲模式与同步模式相似,因为其中的控制位以SC频率重新采样。 脉冲在第一个SC时钟周期开始,并在总线写周期之后开始。 在一个完整的SC时钟周期内设置控制位输出。 在该时钟周期结束时,控制位自动复位。
在这种操作模式下,程序可以将1写入控制寄存器位以产生脉冲。 给该位分配值1之后,程序将其读取为1,直到脉冲结束,之后将其读取为0。此后,程序可以写入另一个1以开始一个新脉冲。 因此,不可能比在SC信号的每个第二步上更频繁地给出脉冲。
重置管理注册
控制寄存器具有两种由EXT RES配置位控制的复位模式,如图21-34所示。 当EXT RES为0(默认)时,在同步或脉冲模式下,跟踪的复位输入将复位同步输出,但不会复位控制位本身。 当EXT RES为1时,可追溯的复位输入会同时复位控制位和同步输出。
图21-34。 重置管理寄存器。21.3.3.3并行输入/输出模式
在此模式下,控制和状态跟踪连接到并行输入和并行输出数据路径信号。 要激活此模式,您需要将SC OUT配置位置于非同步状态,以选择并行数据路径输出。 与并行输入的通信始终可用,但是,这些跟踪连接与状态寄存器输入,计数器控制输入和中断输出共享。
图21-35。 并行I / O模式。21.3.3.4计数器模式
如图21-36所示,当单元处于计数器模式时,可以在UDB内的操作中以及程序需要时使用7位递减计数器。 仪表的功能包括:
- 7位周期寄存器(读/写)。
- 7位帐户寄存器(读/写)。 仅当计数器停止时才可以访问。
- 当周期为零时,自动将周期重新加载到帐户寄存器中。
- 辅助控制寄存器CNT START中的软件可访问控制位,用于启动和停止计数器。 (它与ENABLE硬件信号重叠,必须安装该模块才能使可选的ENABLE硬件信号起作用)。
- 用于启动和加载功能的可选动态计数器控件的跟踪通道的可选位:
-EN,跟踪信号以开始或停止计数。
-LD,可追溯的负载信号,导致周期重新加载。 当该信号被锁定时,它将与挂起的结束信号重叠。 它对电平敏感,并且在信号被翘起时,周期会继续加载。 - 可以发送7位计数器作为sc_out [6:0]来跟踪资源。
- 终止信号可以将跟踪资源作为sc_out [7]输入。
- 在“默认”模式下,捕捉模式用于计数信号。 在替代模式下,它将切换到组合模式。
- 在默认模式下,必须设置可选的硬件EN信号(如果使用),以启用LD硬件信号。 在替代模式下,LD和EN硬件信号是独立的。
图21-36。 计数器模式译者注:
在这个地方附近,我意识到我完全对文档一无所知。 没有描述此“默认”和“替代”模式。 经过长时间的搜索,我设法找到了一些例子。
文件:C:\ Program Files(x86)\ Cypress \ PSoC Creator \ 4.2 \ PSoC Creator \ psoc \ content \ CyComponentLibrary \ CyComponentLibrary.cylib \ bScanComp_v1_10 \ bScanComp_v1_10.v
解释代码:

相同的文字:cy_psoc3_count7 #(.cy_period(Period),.cy_route_ld(0),.cy_route_en(1), .cy_alt_mode(1)) ChannelCounter( /* input */ .clock(clk_int), /* input */ .reset(1'b0), /* input */ .load(1'b0), /* input */ .enable(enable_int), /* output [06:00] */ .count(count), /* output */ .tc(tc_o) );
我只为VHDL语言找到的组件cy_psoc3_count7的声明,似乎对于Verilog而言,它已内置在开发工具中。 现在,您大致知道了在哪里可以找到正在讨论的调整位。
在这里,我们考虑神秘的位,它们被称为SC OUT CTL或SC_OUT_CTL,但是它们的值没有记录。 我在任何地方都找不到。 从文本可以清楚地看出,它们在两种模式之间切换STATUS_CONTROL组件。 但是在前面提到的VHDL文件C中:\ Program Files(x86)\ Cypress \ PSoC Creator \ 4.2 \ PSoC Creator \ warp \ lib \ lcpsoc3 \ cpsoc3.vhd
我们分别看到我们已经知道的柜台 component cy_psoc3_count7 generic(cy_period : std_logic_vector (6 downto 0) := "1111111"; cy_init_value : std_logic_vector (6 downto 0) := "0000000"; cy_route_ld : boolean := false; cy_route_en : boolean := false; cy_alt_mode : boolean := false); port (clock : in std_logic; reset : in std_logic; load : in std_logic; enable : in std_logic; count : out std_logic_vector (6 downto 0); tc : out std_logic); end component;
分别-状态和管理 attribute atomic_rtl of cy_psoc3_status : component is rtl_generic; attribute cpu_access of cy_psoc3_status : component is true; component cy_psoc3_statusi generic(cy_force_order : boolean := false; cy_md_select : std_logic_vector (6 downto 0) := "0000000"; cy_int_mask : std_logic_vector (6 downto 0) := "0000000"); port (reset : in std_logic := '0'; clock : in std_logic := '0'; status : in std_logic_vector (6 downto 0); interrupt : out std_logic); end component; attribute atomic_rtl of cy_psoc3_statusi : component is rtl_generic; attribute cpu_access of cy_psoc3_statusi : component is true; component cy_psoc3_control generic(cy_init_value : std_logic_vector (7 downto 0) := "00000000"; cy_force_order : boolean := false; cy_ctrl_mode_1 : std_logic_vector (7 downto 0) := "00000000"; cy_ctrl_mode_0 : std_logic_vector (7 downto 0) := "00000000"; cy_ext_reset : boolean := false); port (reset : in std_logic := '0'; clock : in std_logic := '0'; control : out std_logic_vector (7 downto 0)); end component;
单独-同步器 component cy_psoc3_sync port (clock : in std_logic := '0'; sc_in : in std_logic; sc_out : out std_logic); end component;
我重复一遍,Verilog根本没有这些声明的版本(C中只有行为模型:\程序文件(x86)\ Cypress \ PSoC Creator \ 4.2 \ PSoC Creator \ warp \ lib \ sim目录,因此我认为这些位设置简单的程序员无法访问这些模式,在阅读本节时,请记住这一事实,这些内容仅供参考,不属于我们的程序员。
要启用计数器模式,必须在位SC_OUT_CTI [1:0]中选择计数器输出。 在这种模式下,控制寄存器的正常操作不可用。 同时,状态寄存器可用于读取操作,但不应将其用于产生中断,因为掩码映射寄存器也可用作计数器周期寄存器。 周期寄存器不会被破坏,并且在唤醒后保持其状态。 对于N小节的周期,必须将值N-1装入周期寄存器。 由于不支持分频器的值,因此N = 1(周期为零)的值将导致TC输出(端子计数TC)的单位恒定。 SYNC模式的可用性取决于是否使用动态控制(LD / EN)。 如果不使用它,则不会影响SYNC模式。 如果使用,则SYNC模式不可用。
21.3.3.5同步模式
如图21-37所示,如果SYNC MD位置1,则状态寄存器可以用作与当前SC_CLK值同步的4位双时钟。 此模式可用于实现异步信号(例如GPIO输入)的本地同步。 在这种情况下,从SC_IN [3:0]中选择同步信号,输出路由到触点SC_IO_OUT [3:0],并且SYNC MD自动将触点SC_IO切换到输出模式。 在此模式下,无论模式控制设置如何,状态寄存器都无法正常运行,并且粘性状态位模式被强制禁用。 该模式不影响控制寄存器。 该计数器仍然可以使用,但有一定的局限性。 在此操作模式下,不能使用动态输入(LD / EN)。
图21-37。 同步模式。21.3.3.6状态和控制时钟
在以下任何一种操作模式下,控制和状态寄存器都需要选择时钟:
- 处于粘性模式的任何一位的状态寄存器,读取后将其清除,
- 计数器模式下的控制寄存器
- 同步模式。
在时钟和复位模块中分配了时序。 见21.3.4。 时钟和复位控制模块。
21.3.3.7辅助控制寄存器
用于读写的辅助控制寄存器是一种特殊寄存器,用于控制硬设置的UDB设备。 该寄存器允许CPU或DMA动态控制中断,FIFO和计数器操作。 寄存器的位及其说明如下:
清除FIFO0和FIFO1(FIFO0清除,FIFO1清除)
FIFO0 CLR和FIFO1 CLR位用于复位相应FIFO的状态。 将1写入这些位时,将重置相应FIFO的状态。 要继续FIFO操作,必须写入0,这些位保持锁定状态,FIFO用作简单的单字节缓冲区,没有状态。
FIFO0和FIFO1级别(FIFO0级别,FIFO1级别)
FIFO0 LVL和FIFO1 LVL位设置4字节FIFO提升总线状态时的级别(总线对FIFO进行读写时)。 FIFO总线状态值取决于组态的方向,如下表所示。
表21-21。 FIFO级别控制位。
中断使能
当状态寄存器生成逻辑被激活时,INT EN位使生成的中断信号通过。
开始柜台/帐户? (计数开始)
CNT START位可用于启动和停止计数器(仅在将SC_OUT_CTL [1:0]位配置为计数器输出模式时可用)。
21.3.3.8管理和状态寄存器摘要
下表总结了控制和状态寄存器的功能。 请注意,掩码和控制寄存器与计数器和周期寄存器结合使用,这些寄存器的值不取决于操作模式。
表21-22。 管理和状态寄存器的操作的简要摘要
一个 -请注意,在计数器模式下,掩码覆盖寄存器用作周期寄存器,而不能用作掩码覆盖寄存器。 因此,当激活计数器模式时,中断输出不可用。
b。 -请注意,在同步模式下,状态寄存器不可用,因此无法使用掩码覆盖寄存器。 但是,它可以用作计数器模式的周期寄存器。
待续...