9.1i EDK  –  OPB EMC:tAW的值与MHS文件中指定的值不同-Altera-Intel社区-FPGA CPLD-ChipDebug

9.1i EDK – OPB EMC:tAW的值与MHS文件中指定的值不同

问题描述

在EDK设计中使用OPB EMC,我将tAW的值指定为90 ns(如下所示)。仿真时序结果为175 ns,示波器I测量为900 ns。

C_WRITE_ADDR_TO_OUT_SLOW_PS_0 = 90000

在我的MHS文件中,OPB EMC配置如下:

## OPB EMC代码段:

BEGIN opb_emc

PARAMETER INSTANCE = opb_emc_flash

PARAMETER HW_VER = 1.10.b

参数C_NUM_BANKS_MEM = 1

参数C_INCLUDE_NEGEDGE_IOREGS = 0

PARAMETER C_MEM0_WIDTH = 8

PARAMETER C_MAX_MEM_WIDTH = 8

PARAMETER C_INCLUDE_DATAWIDTH_MATCHING_0 = 0

参数C_SYNCH_MEM_0 = 0

PARAMETER C_READ_ADDR_TO_OUT_SLOW_PS_0 = 0

参数C_WRITE_ADDR_TO_OUT_SLOW_PS_0 = 90000

参数C_WRITE_MIN_PULSE_WIDTH_PS_0 = 50000

参数C_READ_ADDR_TO_OUT_FAST_PS_0 = 90000

参数C_WRITE_ADDR_TO_OUT_FAST_PS_0 = 90000

PARAMETER C_READ_RECOVERY_BEFORE_WRITE_PS_0 = 5000

PARAMETER C_WRITE_RECOVERY_BEFORE_READ_PS_0 = 5000

参数C_OPB_CLK_PERIOD_PS = 25000

PARAMETER C_DEV_MIR_ENABLE = 0

PARAMETER C_BASEADDR = 0xFF7FFFE0

PARAMETER C_HIGHADDR = 0xFF7FFFFF

PARAMETER C_MEM0_BASEADDR = 0xFF800000

PARAMETER C_MEM0_HIGHADDR = 0xFFBFFFFF

PORT Mem_A = opb_emc_flash_Mem_A

PORT Mem_RPN = opb_emc_flash_Mem_RPN

PORT Mem_DQ = opb_emc_flash_Mem_DQ

PORT Mem_WEN = opb_emc_flash_Mem_WEN

PORT Mem_OEN = opb_emc_flash_Mem_OEN

PORT Mem_BEN = opb_emc_flash_Mem_BEN

PORT Mem_CEN = opb_emc_flash_Mem_CEN

BUS_INTERFACE SOPB = myopb_v20

结束

##结束MHS代码段

解决/修复方法

请考虑以下有关时序参数计算的问题:

对于参数C_WRITE_ADDR_TO_OUT_SLOW_PS_0(tAW),使用25 ns的时钟周期执行如下所示的计算。

tAW的结果值如下:

tAW =(C_WRITE_ADDR_TO_OUT_SLOW_PS_0 [时钟周期] + 4)*时钟周期

初始设置为90 ns;在时序仿真中,结果为175 ns:

=> tAW =(90ns [25ns] + 4)* 25ns =(3 + 4)* 25ns = 7 * 25ns = 175ns。

对于参数C_WRITE_MIN_PULSE_WIDTH_PS_0(tWP),根据25ns的时钟周期如下所示执行计算。

tWP的值是:

tWP = tAW – 2 *时钟周期

=> tWP = 175 ns – 50 ns

=> tWP = 125 ns

以上是对先前结果的示例解释。以下是正确计算的示例。

tAW = 90 ns是不可能的,因为必须将tAW四舍五入到时钟周期的最接近倍数,即100 ns。

因此,应用等式:

tAW =(C_WRITE_ADDR_TO_OUT_SLOW_PS_0 [时钟周期] + 4)*时钟周期= 100 ns

=> C_WRITE_ADDR_TO_OUT_SLOW_PS_0 [时钟周期] = 0

任何小于时钟周期的值都可以工作,例如:

==> C_WRITE_ADDR_TO_OUT_SLOW_PS_0 = 10000 ps

对于tWP,应用相应的等式:

=> tWP = 100 ns – 50 ns

=> tWP = 50 ns

任何小于时钟周期的值都可以工作,例如:

==> C_WRITE_MIN_PULSE_WIDTH_PS_0 = 10000 ps

以下是MHS片段:

BEGIN opb_emc

PARAMETER INSTANCE = opb_emc_flash

PARAMETER HW_VER = 1.10.b

参数C_NUM_BANKS_MEM = 1

参数C_INCLUDE_NEGEDGE_IOREGS = 0

PARAMETER C_MEM0_WIDTH = 8

PARAMETER C_MAX_MEM_WIDTH = 8

PARAMETER C_INCLUDE_DATAWIDTH_MATCHING_0 = 0

参数C_SYNCH_MEM_0 = 0

PARAMETER C_READ_ADDR_TO_OUT_SLOW_PS_0 = 10000

PARAMETER C_WRITE_ADDR_TO_OUT_SLOW_PS_0 = 10000

PARAMETER C_WRITE_MIN_PULSE_WIDTH_PS_0 = 10000

PARAMETER C_READ_ADDR_TO_OUT_FAST_PS_0 = 10000

PARAMETER C_WRITE_ADDR_TO_OUT_FAST_PS_0 = 10000

PARAMETER C_READ_RECOVERY_BEFORE_WRITE_PS_0 = 5000

PARAMETER C_WRITE_RECOVERY_BEFORE_READ_PS_0 = 5000

参数C_OPB_CLK_PERIOD_PS = 25000

PARAMETER C_DEV_MIR_ENABLE = 0

PARAMETER C_BASEADDR = 0xFF7FFFE0

PARAMETER C_HIGHADDR = 0xFF7FFFFF

PARAMETER C_MEM0_BASEADDR = 0xFF800000

PARAMETER C_MEM0_HIGHADDR = 0xFFBFFFFF

PORT Mem_A = opb_emc_flash_Mem_A

PORT Mem_RPN = opb_emc_flash_Mem_RPN

PORT Mem_DQ = opb_emc_flash_Mem_DQ

PORT Mem_WEN = opb_emc_flash_Mem_WEN

PORT Mem_OEN = opb_emc_flash_Mem_OEN

PORT Mem_BEN = opb_emc_flash_Mem_BEN

PORT Mem_CEN = opb_emc_flash_Mem_CEN

BUS_INTERFACE SOPB = myopb_v20

结束

请登录后发表评论

    没有回复内容