180 likes | 256 Views
自动扫描控制模块设计. 自动扫描控制模块设计. 功能描述. 本模块在 MCU 的启动扫描信号 (Scan_start) 启动下,进行一次自动扫描测试,并给出相应的测试状态,在自动扫描测试过程中,还必须完成对测试表的读操作。在 MCU 对测试表操作时完成对测试表的读写操作。. 自动扫描控制模块设计. 接口信号(时序)描述. 表 1 外部接口模块管脚列表. 自动扫描控制模块设计. 接口信号(时序)描述. 表 2 MCU 接口模块管脚列表. 自动扫描控制模块设计. 接口信号(时序)描述. 表 3 RAM 接口模块管脚列表. Clk_50 :. Command :.
E N D
自动扫描控制模块设计 功能描述 本模块在MCU的启动扫描信号(Scan_start)启动下,进行一次自动扫描测试,并给出相应的测试状态,在自动扫描测试过程中,还必须完成对测试表的读操作。在MCU对测试表操作时完成对测试表的读写操作。
自动扫描控制模块设计 接口信号(时序)描述 表1 外部接口模块管脚列表
自动扫描控制模块设计 接口信号(时序)描述 表2 MCU接口模块管脚列表
自动扫描控制模块设计 接口信号(时序)描述 表3 RAM接口模块管脚列表
Clk_50: Command: AAH 55H RAM_Addr: 00H 00H 01H 01H 02H 02H …… FFH FFH 00H 00H 00H 00H 01H RAM_Data: TD0 TD0 TD0 …… /TD0 TD0 TD1 TD0 TD0 写 求反 读 写 读 写 写 写 测试表数据: 测试数据TD0 测试数据TD1 Ram回读的数据: TD0 比较数据: 比较数据TD0 比较 Compare_Valid: 存储单元测试 第二拍 存储单元测试第一拍 自动扫描控制模块设计 存储单元测试波形图
Clk_50 Command 55H RAM_Addr …… 01H 02H 02H FFH FFH 00H 00H 00H 00H 读 读 读 RAM_Data …… TD1 /TD1 TD1 TD2 TD1 TD0 TD1 TD0 写 写 写 写 求反 测试表数据: 测试数据TD2 测试数据TD1 Ram回读的数据: TD0 …… TD0 TD1 TD0 比较数据: 比较数据TD0 Compare_Valid: 比较 存储单元测试第二拍 自动扫描控制模块设计 存储单元测试波形图(续)
Clk_50: Command: 55H RAM_Addr …… …… FFH FFH 00H 00H 00H 00H 01H 01H FFH FFH 00H 00H 00H 00H 01H 读 读 RAM_Data: TDF /TDF TDF …… …… TDF FFH 01H 00H 写 写 写 写 求反 测试表数据: TDF 读 Ram回读的数据: …… TDE TDF …… TDF 比较数据: Compare_Valid: 存储单元测试 最后一拍 地址解码测试第一拍 自动扫描控制模块设计 地址解码测试波形图
Clk_50 Command 55H RAM_Addr …… FFH FFH FFH FFH 00H 00H 00H 00H 01H 01H 02H 读 读 RAM_Data …… FFH FFH 01H 02H 00H FFH 写 写 求反 测试表数据 Don’t care 读 读 读 …… Ram回读的数据 01H FFH 00H 比较数据 01H FFH 00H …… Compare_Valid 地址解码测试 第一拍 地址解码测试最后一拍 第一次 扫描结束 自动扫描控制模块设计 地址解码测试波形图(续)
MCU_Tab_Rd_n/MCU_T ab_We_n有效 测试表的 一次读写 Idle Scan_Start=’1’ 数据线 扫描测试 地址线 扫描测试 自动扫描控制模块设计 自动扫描测试状态简图
自动扫描控制模块设计 状态机基本结构图
自动扫描控制模块设计 Verilog HDL参考设计 module fsm1 (clk,reset,MCU_tab_rd_n, MCU_tab_we_n,scan_start); : reg [1:0] c_state; reg [1:0] n_state; parameter [1:0] IDLE = 2'b00, RW_TEST = 2'b01, DATA_TEST = 2'b10, ADDR_TEST = 2'b11;
自动扫描控制模块设计 Verilog HDL参考设计 always @(posedge clk) begin if(reset==1) c_state <= IDLE; else c_state<=n_state; end always@(c_state or MCU_tab_rd_n or MCU_tab_we_n or can_start) begin
自动扫描控制模块设计 Verilog HDL参考设计 n_state = IDLE; case (c_state) IDLE:begin if (MCU_tab_rd_n==0 || MCU_tab_we_0) n_state = RW_TEST; else if(scan_start==1_ n_state = DATA_TEST; end RD_TEST:begin
自动扫描控制模块设计 问题思考? • 第一个always块用于产生的连续的状态 机寄存器; • 第二个always块用于产生组合的下一状态逻辑, • assign赋值语句用于产生组合输出逻辑。 这样使得产生输出的逻辑和产生下一状态的逻辑通过一个组合逻辑块来实现 ,其设计缺陷在哪里?如何优化设计
自动扫描控制模块设计 设计缺陷 上述设计有两个不利之处在于: • 组合输出会在两个状态之间形成毛刺,对状态的变化形成干扰; • 另外由于组合逻辑输出的时延,本来被状态机输出驱动的逻辑块的时钟将会更晚一步到达。
自动扫描控制模块设计 状态机设计优化 我们可以通过One-hot编码输出成为状态机状态编码的一部分,来优化状态机的设计。与第一种设计方法综合出的电路相比较,将输出逻辑通过One-Hot编码的方式和当前状态寄存器融合在一起。输出信号未经过额外的逻辑对现态进行译码,而是直接来自状态寄存器,因而输出信号不会产生毛刺,同时减少了直接输出的逻辑,使电路综合面积更小。
自动扫描控制模块设计 优化后的状态机设计框图