Sun, 17 Jul 2005
shobon-JTAG ¤Ï¡¢Æ°ºî¾õÂÖ¡¢¤¢¤ë¤¤¤ÏÆâÉô²óÏ©¤ÈÀÚ¤êÎ¥¤·¤¿¾õÂ֤ǡ¢FPGA,CPLD Åù¤Î JTAG ¥Ð¥¦¥ó¥À¥ê¥¹¥¥ã¥ó(IEEE 1149.1)Âбþ¥Ç¥Ð¥¤¥¹¤Î¥Ô¥ó¤Î¿®¹æ¥ì¥Ù¥ë¤ò¥â¥Ë¥¿¤¹¤ë¤¿¤á¤Î¥½¥Õ¥È¤Ç¤¹¡£
¥À¥¦¥ó¥í¡¼¥É¡¢ChangeLog Åù¤Ï¤³¤Á¤é¤Î¥¨¥ó¥È¥ê¤«¤é¤É¤¦¤¾¡£
¤µ¤Æ¡¢¼ÂºÝ¤Ë¿·¤·¤¤¥Ç¥Ð¥¤¥¹¤òÄɲ䷤Ƥ⡢¿®¹æ̾¾ÎÍ󤬥ǥХ¤¥¹¤ÎIO_xx ¤Ê¤ó¤È¤«¤Ç¤Ï¤Ê¤ó¤Î¿®¹æ¤ò¤ß¤Æ¤¤¤ë¤Î¤ä¤é¤ï¤«¤ê¤Þ¤»¤ó¡£
¸½ºß(2005.7.16)¡¢²óÏ©¿Þ¥Õ¥¡¥¤¥ë¤«¤é¤Î¿®¹æ̾¾Î¤ÎÆɤ߼è¤ê¤Ï¡¢D2CAD¤¬½ÐÎϤ¹¤ë Mentor ·Á¼°¤Î¥Í¥Ã¥È¥ê¥¹¥È½ÐÎϤò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡Êñ¤Ë¾ðÊó¤ò¼è¤ê½Ð¤·¤ä¤¹¤¤¤«¤é¡Ë¤¬¡¢D2CAD ¤ò»ÈÍѤ·¤Æ²óÏ©¤ò½ñ¤¤¤Æ¤¤¤ëÊý¤Ð¤«¤ê¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¤·¡¢FPGA ¤Î¥Ö¥ì¥Ã¥É¥Ü¡¼¥É¤ÇÍ·¤ó¤Ç¤¤¤ëËͤ餬¥Ö¥ì¥Ã¥É¥Ü¡¼¥É¤ÎCAD¥Ç¡¼¥¿¤ä¥Í¥Ã¥È¥ê¥¹¥È¤ò»ý¤Ã¤Æ¤¤¤ë¤ï¤±¤â¤¢¤ê¤Þ¤»¤ó¡£
¤½¤³¤Ç¡¢¤³¤³¤Ç¤Ï Xilinx ¤Î̵ÎÁ³«È¯´Ä¶ WebPack6 ¤Ç»ÈÍѤµ¤ì¤Æ¤¤¤ë UserConstraint¥Õ¥¡¥¤¥ë¡©(.ucf)¤Î¥ê¡¼¥À¤ò shobon-JTAG ¤ËÄɲ乤뤳¤È¤Ç¡¢FPGA ¤Î³«È¯´Ä¶¤Ç»ÈÍѤ·¤¿¿®¹æ̾¾Î¤ò shobon-JTAG ¤ÇÍøÍѤǤ¤ë¤è¤¦¤Ë²þ¤¤·¤Æ¤ß¤¿Îã¤òµó¤²¡¢¼«Ê¬¤ÎÉáÃʻȤäƤ¤¤ë³«È¯´Ä¶¤¬À¸À®¤¹¤ë¥Ô¥ó¡¦¿®¹æ̾¾Î¥Õ¥¡¥¤¥ë¡ÊConstraint ¥Õ¥¡¥¤¥ë¡Ë¤ÎÆɤ߼è¤êµ¡Ç½¤ò shobon-JTAG ¤ËÄɲ乤ë¤Ë¤Ï¤É¤Î¤è¤¦¤Ë¤¹¤ì¤Ð¤¤¤¤¤«¤ò¤´ÀâÌÀ¤·¤Þ¤¹¡£
£±¡Ëshobon-JTAG ¤Î¥×¥í¥¸¥§¥¯¥È¤Î²ô¤ò¤³¤³¤«¤éÍî¤È¤·¤Æ¡¢VisualStudio.NET ¤Ç³«¤¤Þ¤¹¡£
£²¡Ëshobon-JTAG ¤Ç¥Ô¥ó̾¾Î¡Ê¥Í¥Ã¥È̾¾Î¡Ë¤òÆɤ߼è¤ê¤¿¤¤¾ðÊó¥Õ¥¡¥¤¥ë¡¢º£²ó¤Ïsample.ucf¤ò»²¹Í¤Ë¤·¤Þ¤·¤¿¡£WebPack6 ¤Ç»ÈÍѤ·¤Æ¤¤¤ë¤â¤Î¤Ç¤¹¡£¤Þ¤º¤¶¤Ã¤Èį¤á¤Æ¤ß¤Þ¤¹¡£
#PACE: Start of PACE I/O Pin Assignments ... NET "CPLD_XXXX" LOC = "P13" ; ... #
£³¡Ë¤Ê¤ó¤È¤Ê¤¯¼¡¤Î¤³¤È¤¬¿ä¬¤Ç¤¤Þ¤·¤¿¡£
A) ¹Ô¤¬ NET ¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤ë¡£
B) ¿®¹æ̾¾Î¤¬ 2 ÈÖÌܤΥȡ¼¥¯¥ó¡£¥À¥Ö¥ë¥¯¥ª¡¼¥È¤Ç°Ï¤Þ¤ì¤Æ¤¤¤ë¡£
C) ¥Ô¥ó̾¾Î¤¬ LOC = ¤Ë³¤¯ 5 ÈÖÌܤΥȡ¼¥¯¥ó¡£¥À¥Ö¥ë¥¯¥ª¡¼¥È¤Ç°Ï¤Þ¤ì¤Æ¤¤¤ë¡£¤Þ¤¿Æ¬¤Ë P ¤¬¤Ä¤¤¤Æ¤¤¤ë¡ÊÌÌÅݤǤ¹¤Í¡Ë¡£
D) ¥³¥á¥ó¥È¹Ô¤Ï # ¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤ë¡£
£´¡ËMentor ¥Í¥Ã¥È¥ê¥¹¥È¤Ë»÷¤Æ¤¤¤ë¤Î¤Ç¡¢¤¹¤Ç¤Ë shobon-JTAG ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë TinyNetMentor.cs ¥¯¥é¥¹¤ò²þ¤¤·¤ÆÄɲ䷤Ƥߤޤ¹¡£
£µ¡ËTinyNetMentor.cs ¤ò VS.NET ¤ÎÅý¹ç´Ä¶¤Î¥½¥ê¥å¡¼¥·¥ç¥ó¥¨¥¯¥¹¥×¥í¡¼¥é¤Ç¥³¥Ô¡¼¤·¤Æ¡¢Ì¾¾Î¤ò TinyUcf.cs ¤ËÊѹ¹¤·¤Þ¤¹¡£
£¶¡Ë¥¯¥é¥¹Ì¾¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¤ò TinyUcf ¤ËÊѹ¹¤·¤Þ¤¹¡£
£·¡Ë¼ÂºÝ¤Î£±¹Ô²ò¼á¤Ï
private void create_PIN_MAP(StreamReader sr,string chipname)
¤Ç¤¹¡£¤³¤ÎÃæ¤À¤±Êѹ¹¤¹¤ì¤Ð¤¤¤¤¤Ç¤·¤ç¤¦¡£
²þ¤ÅÀ¤Ï
A¡Ëchipname ¤Ïº£²ó¤ÏɬÍפʤ¤¤Î¤Ç´ØÏ¢¥³¡¼¥ÉÁ´ºï½ü¡Ê²óÏ©¿Þ¥Í¥Ã¥È¥ê¥¹¥È¤Ç¤Ê¤¤¤Î¤Ç¡Ë¡£
B¡Ë¥»¥Ñ¥ì¡¼¥¿¤ò¥¹¥Ú¡¼¥¹¤È²¾Äꤹ¤ë¡£¿®¹æ̾¾Î¡¢¥Ô¥ó̾¾Î¤Ë¥¹¥Ú¡¼¥¹¤¬¤¢¤ë¤È¸íÆ°ºî¤·¤Þ¤¹¤¬¡¢º£²ó¤ÏÎã¤Ê¤Î¤Ç¤Û¤Ã¤È¤¤Þ¤·¤ç¤¦¡£
C¡Ë¿®¹æ̾¾Î¤Î¹ÔÃæ¤Î°ÌÃÖ¡¢¥Ñ¥é¥á¡¼¥¿Ãæ¤Î¼è¤ê½Ð¤·²Õ½ê¤ò°Ê²¼¤Î¤è¤¦¤Ë²¾Äê¡Ê¤à¤ê¤ä¤ê¡Ë¡£
// ̾Á°¤Ï£²ÈÖÌÜ¡££±¥¥ã¥é¥¯¥¿ÌܤȺǽª¥¥ã¥é¥¯¥¿¤Ï¥À¥Ö¥ë¥¯¥ª¡¼¥È¤Ê¤Î¤Ç̵»ë
name = param[1].Substring(1,param[1].Length - 2) ;
// ¥Ô¥ó¤Ï£µÈÖÌÜ¡££±¥¥ã¥é¥¯¥¿ÌܤȺǽª¥¥ã¥é¥¯¥¿¤Ï¥À¥Ö¥ë¥¯¥ª¡¼¥È¤Ê¤Î¤Ç̵»ë¡¢
// ¥Ô¥ó̾¾Î£²¥¥ã¥é¥¯¥¿ÌܤΠ'P' ¤â¥¸¥ã¥Þ¤½¤¦¤Ê¤Î¤Çº£²ó̵»ë¡£
// BGA ¤È¤«¤ÇÌäÂ꤬¤Ç¤½¤¦¤À(w
pin = param[4].Substring(2,param[4].Length - 3) ;
//Console.WriteLine("pin["+pin+"]="+name) ;
pinmap.Add(pin,name) ;
£¸¡Ë¤µ¤Æ¡¢shobon-JTAG ¤Ë¤Õ¤µ¤ï¤·¤¤(¡¦¦Ø¡¦¡Ë¤Ê¥ê¡¼¥À¤¬¤Ç¤¤Þ¤·¤¿¡£
£¹¡ËListView ¤Î¥á¥Ë¥å¡¼¤ËÁȤ߹þ¤ó¤Ç¤ß¤Þ¤¹¡£ViewForm.cs[¥Ç¥¶¥¤¥ó] ¤ò³«¤¡¢contextMenu1 ¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¥á¥Ë¥å¡¼ÊÔ½¸¤Ë "Read Pin-Name Info from Xilinx UCF (shobon-parser)" ¤òÄɲá£
£±£°¡Ë¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤Ç¥Ï¥ó¥É¥é¤òºî¤ê¡¢Ãæ¿È¤ò Mentor ¤Î¤È¤³¤«¤é¥³¥Ô¡¼¤·¤Æ¤¤Æ¡¢°Ê²¼¤Î¤è¤¦¤ËÊÔ½¸¤·¤Þ¤¹¡£chipname ÆþÎÏ¥À¥¤¥¢¥í¥°´ØÏ¢¤Ï¤¤¤é¤Ê¤¤¤Î¤Ç¡¢ºï¤ê¤Þ¤¹¡£
¤½¤ì¤Ë¤·¤Æ¤â¡¢¥ê¡¼¥À¤Ç P ¤ò̵»ë¤·¤Æ¡¢¤³¤Ã¤Á¤Ç¤Ï P ¤ò¤¯¤Ã¤Ä¤±¤ë¤Ê¤ó¤Æ¡¢¤Û¤ó¤È¤¦¤Ë¡Ê¡¦¦Ø¡¦¡Ë¤Ç¤¹¤Í¡£
£±£±¡Ë¤Ç¤Ï¡¢¼ÂºÝ¤ËÆɤá¤ë¤«¤É¤¦¤«»î¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£private void menuItem12_Click(object sender, System.EventArgs e) { // NETLIST ¥Õ¥¡¥¤¥ë¤Î¥ª¡¼¥×¥ó openFileDialog3.Title = "Open Xilinx UCF File" ; openFileDialog3.Filter = "Xilinx UCF File (*.ucf)|*.ucf|All File|*.*" ; openFileDialog3.DefaultExt = "*.ucf" ; // NETLIST ¥Õ¥¡¥¤¥ë¤Î¥ª¡¼¥×¥ó if (openFileDialog3.ShowDialog() == DialogResult.OK) { // NETLIST ¥ê¡¼¥À¤òµ¯Æ° TinyUcf tn= new TinyUcf() ; if (tn.readFile(openFileDialog3.FileName) < 0) { MessageBox.Show("UCF Parser Abnormally Terminated.","Error") ; return ; } // ¥Ô¥ó¤È NET ̾¾Î¤ÎÂбþɽ¤òÆÀ¤ë StringDictionary sd = tn.getPinmap() ; // ¤³¤ì¤¬¤¢¤ë¤ÈÄɲä˻þ´Ö¤¬¤«¤«¤ë listView1.ListViewItemSorter = null ; // ¥Ô¥óÈ֤Ǽ½ñ¤ò°ú¤¡¢Âбþ¤¹¤ë NET ̾¾Î¤¬¤¢¤ë¤«Ä´¤Ù¤ë for (int i=0;i¡ãlistView1.Items.Count;i++) { // ¥³¥Ô¥Ú¤Î¤È¤¤Ï ¡ã ¤ò < ¤ËÃÖ¤´¹¤¨¤Æ¤Í - wikideitish ¤Ç¡ã¤¬¤¦¤Þ¤¯°·¤¨¤Ê¤¤¤¿¤á(^^; ListViewItem lvi = listView1.Items[i] ; PinItem pi = lvi.Tag as PinItem ; if (pi != null) { string netname = sd[pi.pinno] ; // °ú¤±¤Ê¤¤¤È¤¤ÏÀèƬ¤Î'P'¤ò̵»ë¤·¤Æ¸¡º÷¡Ê¥¤¥«¥µ¥Þ¡Ë if ((netname == null) && (pi.pinno[0] == 'P')){ netname = sd[pi.pinno.Substring(1)] ; } if (netname != null) { // NET ̾¾Î¤ò¾å½ñ¤ pi.usertag = netname ; listView1.Items[i] = pi.getListViewItem() ; } } } } }
Device ¤òÁªÂò¡¢¤Þ¤º ListView ¤Ë BSDL ¤Î¥Ô¥ó¾ðÊó¤òÆɤߤޤ¹¡£º£²ó¤Ï XC95144_PQ160 ¤Î¥³¥ó¥¹¥È¥ì¥¤¥ó¥È¥Õ¥¡¥¤¥ë¤ò»È¤¦¤Î¤Ç¡¢XC95144 ¤Î BSDL ¤«¡¢.vfd ¥Õ¥¡¥¤¥ë¤Ç¤¹¡£
£±£²¡Ë¼¡¤Ëº£ 10) ¤ÇºîÀ®¤·¤¿¥á¥Ë¥å¡¼¤Çº£²ó»²¹Í¤Ë¤·¤¿¥Õ¥¡¥¤¥ë sample.ucf ¤Ç»î¤·¤Æ¤ß¤Þ¤¹¡£¤Ê¤ó¤«Æɤá¤Æ¤ë¤è¤¦¤Ç¤¹(¡¦¢Ï¡¦¡Ë¡ª¡ª¡£
£±£³¡Ëº£²ó¤Î sample.ucf ¤ÏÆɤá¤Þ¤·¤¿¤¬¡¢Å¬Åö¤Êºî¤ê¤«¤é¤ï¤«¤ë¤è¤¦¤ËÅöÁ³¤Ê¤¬¤é¤¤¤Ä¤â¤¦¤Þ¤¯¤¤¤¯¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£
WebPack ¤Î¥Ð¡¼¥¸¥ç¥ó¤¬°ã¤Ã¤Æ¤¤¤¿¤ê¡¢¥Ô¥óÈÖ¤Ë "P" ¤¬¤Ê¤«¤Ã¤¿¤ê¡¢¤Þ¤¿ .ucf ¤Ë¥Ô¥ó°Ê³°¤ÎÀ©Ìó¾ò·ï¤¬¤¢¤ë¤È¡¢¸íÆ°ºî¤¹¤ë¤Ç¤·¤ç¤¦¡£
¤Ç¤â¡¢¤³¤ó¤Ê´¶¤¸¤Ç¤ªµ¤³Ú¤ËÂнè¤Ç¤¤ë¤È»×¤ï¤ì¤Þ¤¹¡Ê¡¦¦Ø¡¦¡Ë¡£
º£²ó¤ÎÎã¤ÇÄɲä·¤¿ xilinx .ucf ¥ê¡¼¥À ¤¬´Þ¤Þ¤ì¤¿¥×¥í¥¸¥§¥¯¥È°ì¼°¤Ï¡¢
¤³¤Á¤é¤Î¥¨¥ó¥È¥ê¤«¤éÍî¤È¤»¤Þ¤¹¡£