程序猿,用代码记录生活
2018/12/28
-
简单的搭了下电路:
-
简单写一下管脚约束文件
######## clk #####
NET "fosc" LOC = "P8";
NET "HIGH_FOSC" LOC = "P9";
######## TEST #########
NET "LED1" LOC = "M16";
NET "LED2" LOC = "N16";
NET "LED_ON" LOC = "L16";
NET "TEST1" LOC = "T13";
NET "TEST2" LOC = "T14";
NET "TEST3" LOC = "R15";
NET "TEST4" LOC = "P15";
NET "TEST5" LOC = "P16";
########## DP83640-A ############################
NET "PMDIO" LOC = "H3"; # SMI DATA CLOCK
NET "PMDC" LOC = "J1"; # SMI DATA I/O
NET "PCOL" LOC = "C4"; # PHY ADDRESS [4:0]
NET "PRXD3" LOC = "G2";
NET "PRXD2" LOC = "H1";
NET "PRXD1" LOC = "F3";
NET "PRXD0" LOC = "G1";
NET "PRXDV" LOC = "E2"; # select MII MODE = 0 & RMII MODE = 1
NET "PRXER" LOC = "D3"; # RECEIVE ERROR
NET "PRXCLK" LOC = "F1"; # O MII RECEIVE CLOCK & RMII
NET "PTXCLK" LOC = "C2"; # O MII RECEIVE CLOCK & RMII
NET "PTXEN" LOC = "D1"; # I
NET "PTXER" LOC = "E1";
NET "PTXD0" LOC = "B3"; # MII RECEIVE DATA [3:0] & RMII RECEIVE DATA [1:0]
NET "PTXD1" LOC = "C1";
NET "PTXD2" LOC = "B4";
NET "PTXD3" LOC = "A3";
NET "PCRS" LOC = "A4";
######## DP83640-B #########
NET "BPMDIO" LOC = "B6"; # SMI DATA CLOCK
NET "BPMDC" LOC = "A6"; # SMI DATA I/O
NET "BPCOL" LOC = "B14"; # PHY ADDRESS [4:0]
NET "BPRXD3" LOC = "C7";
NET "BPRXD2" LOC = "A7";
NET "BPRXD1" LOC = "B8";
NET "BPRXD0" LOC = "A8";
NET "BPRXDV" LOC = "C9"; #select MII MODE = 0 & RMII MODE = 1
NET "BPRXER" LOC = "B10"; # RECEIVE ERROR
NET "BPRXCLK" LOC = "A9"; # O MII RECEIVE CLOCK & RMII
NET "BPTXCLK" LOC = "C11"; # O MII RECEIVE CLOCK & RMII
NET "BPTXER" LOC = "A10";
NET "BPTXEN" LOC = "A11";
NET "BPTXD0" LOC = "B12"; # MII RECEIVE DATA [3:0] & RMII RECEIVE DATA [1:0]
NET "BPTXD1" LOC = "A12";
NET "BPTXD2" LOC = "C13";
NET "BPTXD3" LOC = "A13";
NET "BPCRS" LOC = "A14";
注释是依照芯片手册简单查了一下。
首先是定义寄存器:MDC/MDIO 串行管理接口
芯片手册的 page 58-59 是对寄存器地址和功能的描述。
page 60 之后是定义Register Data 每一位的含义。
看了芯片手册还是乱糟糟的,这个MII mode 和 RMII mode 是区分使用引脚数量不同么?
看个一篇Applicaion Note :AN-1729 里面 3.1 简单介绍了一个 rate correction function
先简单写一个module,向寄存器写数据。然后一步一步来试吧。