问题描述
在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
结束
没有回复内容