1 ·ÂÕæµ÷ÊÔ˵Ã÷
ÔÚѧϰ²¢³¢ÊÔ±¾Õ½ÚÇ°£¬ÄãÐèÒª¾ßÓÐÒÔÏÂ֪ʶ:
(1) ·ÂÕ湤¾ßµÄʹÓ㬱ÈÈç Vivado µÄ Xsim¡£
(2) Verilog µÄ»ù±¾Óï·¨¡£
ͨ¹ý±¾Õ½ڵÄѧϰ£¬Ä㽫»ñµÃ:
(1) ¸÷Àà·ÂÕæ´íÎóÅŲéµÄ·½·¨¡£
(2) CPU Âß¼³ö´íµÄµ÷ÊÔÖ¸µ¼¡£
(3) Verilog ÔËËã·ûµÄÓÅÏȼ¶¡£
¿´Íê±¾Õ½ڣ¬ÇëѯÎÊ×Ô¼ºÊÇ·ñÖªµÀÒÔÏÂ֪ʶµã£¬Èç¹û²»ÖªµÀ£¬ÇëÕÒ¶ÓÓÑÌÖÂÛ: (1) ºÎΪ¶àÇý¶¯µÄÐźÅ?
(2) ×èÈû¸³ÖµºÍ·Ç×èÈû¸³ÖµµÄÇø±ð?ÆäʹÓÃÇé¿ö·Ö±ðÊÇ?
(3) ÐźÅΪ¡°Z¡±ºÍ¡°X¡±µÄÇø±ð¡£
(4) Verilog ÖС°+¡±Óë¡°&¡±µÄÓÅÏȼ¶¡£
(5) Verilog ÖУ¬Á½¸ö reg ÐÍÐźÅдÔÚÒ»¸ö always ¿éÀïºÍ·Ö¿ªÐ´ÔÚÁ½¸ö always ¿éÀÓкÎÇø±ð? (6) Ç뷴˼×Ô¼º±àдVerilogÖÐÊÇCÓïÑÔ±à³ÌµÄ˼Ï룬»¹ÊÇ»µç·¿òͼµÄ˼Ïë¡£
±¾ÎĵµÔÚ½éÉܵķÂÕæµ÷ÊÔÊÖ¶ÎÊÇ»ùÓÚ Vivado µÄ Xsim ·ÂÕæÆ÷µÄ¾Ñé×ܽᡣ¶ÔÓÚÆäËû·ÂÕæÆ÷£¬Ö÷ÌåÄÚÈÝÒ²ÊÇͨ Óõģ¬µ«ÔÚ²¿·Öϸ½ÚÉÏÓÐËù²»Í¬£¬ÐèÒª´ó¼Ò¾ßÌåÎÊÌâ¾ßÌå·ÖÎö¡£
1.1 µ÷ÊÔÖ¸µ¼Ë¼Ïë¸ÅÊö
µ÷ÊÔÊÇÖ¸ÔÚÎÒÃÇÉè¼ÆµÄÒ»¸öϵͳÔÚÖ´Ðй¦ÄܳöÏÖÁË´íÎóʱ£¬¶¨Î»³ö´íÎóµÄÔÒò¡£±ÈÈçÎÒÃÇÉè¼ÆÁËÒ»¸ö CPU£¬ ÔÚÔËÐÐÒ»¸ö²âÊÔ³ÌÐòʱ·¢ÏÖ½á¹û²»¶Ô£¬Õâʱ¾ÍÐèÒª½øÐе÷ÊÔ£¬ÒÔ±ãºóÐø½øÐоÀÕý¡£¿ÉÒÔ¿´µ½È«¾ÖÉϵĵ÷ÊÔÔÀíÊÇ ´Ó½á¹ûÍÆÔÒò£¬Äѵã¾ÍÊǶ¨Î»´íÎóµÄÔ´Í·¡£
±¾Îĵµ±àдʱ²ÉÓõĵĵ÷ÊÔ˼·ÊÇ:ʱ¼äÉÏÏȶ¨´í£¬¿Õ¼äÉÏÔÙ¶¨´í¡£Ò»¸öÉè¼ÆÔÚÖ´Ðй¦ÄܳöÏÖ´íÎóʱ£¬ÍùÍù ÊÇÔÚÒ»¸ö´óƬµÄʱ¼ä¶ÎÄÚ¸ÃÉè¼ÆµÄµç·µÄÖ´Ðж¼²»·ûºÏÔ¤ÆÚ¡£¡°Ê±¼äÉÏÏȶ¨´í£¬¿Õ¼äÉÏÔÙ¶¨´í¡±¾ßÌå½âÊÍÈçÏÂ:
(1) ʱ¼äÉÏÏȶ¨´í:ÔÚ³ö´íµÄ´óƬʱ¼ä¶ÎÀ¶¨Î»³öÔ´Í·²¿·Ö£¬Ô´Í·²¿·ÖÊÇÒ»¸ö½ÏСµÄʱ¼ä¶Î¡£
(2) ¿Õ¼äÉÏÔÙ¶¨´í:ÔÚԴͷʱ¼ä¶ÎÀ²é¿´Éè¼Æµç·µÄ¿ØÖƲ¿·ÖºÍÊý¾Ýͨ·£¬¶¨Î»ÊÇÄĸöÐźŴøÀ´µÄ´íÎ󣬻ò
ÕßÊÇÄļ¸¸öÐźŵÄ×éºÏ´øÀ´µÄ´íÎ󣬻òÕßÊÇÉè¼ÆÉÏÄÄÀïÓÐÊèºö´øÀ´µÄ´íÎó¡£
±ÈÈçÒ»¸öÉè¼ÆµÄ CPU ÔÚÖ´ÐвâÊÔ³ÌÐò³ö´íÁË£¬Õâ¸ö³ÌÐòÊǷֺܶàÖ¸ÁîµÄ£¬ÕâЩָÁîÊÇÔÚʱ¼äÉÏ˳ÐòÖ´Ðеģ¬ ÎÒÃÇÊ×ÏÈÐèÒªÕÒ³öµÚÒ»¸ö´íÎóµÄµÄÖ¸Áî(Ò²¾ÍÊÇʱ¼äÉ϶¨Î»´íÎó)£¬ËæºóÔÚ CPU µÄÊý¾Ýͨ·ºÍ¿ØÖÆÐźÅÀﶨλ¸Ã Ö¸Áî´íÎóµÄÔÒò(Ò²¾ÍÊÇ¿Õ¼äÉ϶¨Î»´íÎó)¡£
Ïà¶ÔÓÚ¿Õ¼äÉϵĶ¨´í£¬Ê±¼äÉϵĶ¨´í¸ü¼ÓÀ§ÄÑ¡£ÌرðÊÇ¶Ô CPU µ÷ÊÔ¶øÑÔ£¬¸üÊÇÈç´Ë£¬ÍùÍù 80%µÄ¾«Á¦¶¼ÓÃÓÚ Ê±¼äÉ϶¨´íÁË¡£
ʱ¼äÉ϶¨´íºÍ¿Õ¼äÉ϶¨´í£¬ÊÇÒ»ÖÖÕë¶ÔÉè¼ÆµÄÕûÌåµ÷ÊÔµÄÖ¸µ¼Ë¼Ïë¡£µ«µ±ÎÒÃÇ·ÂÕæ·¢ÏÖÒ»¸ö´íÎóʱ£¬ÍùÍùÐè ÒªÏÈÈ¥±æ±ð´íÎóʱʲôÀàÐÍ£¬²¢°²×°Ò»¶¨µÄ·½·¨×·×Ù´íÎóÔÒò¡£
1
1.2 ·ÂÕæ³ö´í·ÖÀà ·ÂÕæ³ö´íÇé¿ö°´ÕÕ²¨ÐÎÖ±½Ó¹Û²ì½á¹û¿É·ÖΪÁ½Àà:
(1) ²¨Ðγö´í:´Ó²¨ÐÎͼÀïÖ±½Ó¹Û²ì£¬¶ø²»ÐèÒª·ÖÎöµç·Éè¼ÆµÄ¹¦ÄÜ£¬¾ÍÄÜÅÐ¶ÏµÄ´í£¬±ÈÈ粨ÐÎÖÐÐźÅΪ ¡°X¡±¡£
(2) Âß¼³ö´í:²¨ÐÎÖ±½Ó¹Û²ìºÜÕý³££¬µ«Æäµç·ִÐнá¹û²»·ûºÏÔ¤ÆÚ£¬ÊôÓÚÂß¼³ö´í£¬±ÈÈç¼Ó·¨Æ÷ÔËÐнá¹û²» ¶Ô¡£
¡°²¨Ðγö´í¡±ÎªÇ³²ã´ÎµÄ³ö´í£¬¶¼ÊǺÜÈÝÒײéÕÒµ½ÔÒòµÄ¡£¡°Âß¼³ö´í¡±ÔòÊÇÉî²ã´ÎµÄ³ö´í£¬ÊÇÕæÕýµ÷ÊÔÄÑ µã£¬Æä¾ßÌåÄÚÈÝÒ²ÊÇ°üÂÞÍòÏó¡£
1.3 ³ö´í·ÖÀàÒ»:²¨Ðγö´í
²¨Ðγö´í£¬Ï¸·ÖÓֿɹéΪÒÔϼ¸Àà: (1) ·¢ÏÖÐźÅΪ¡°Z¡±¡£
(2) ·¢ÏÖÐźÅΪ¡°X¡±¡£
(3) ²¨ÐÎÍ£Ö¹¡£
(4) Ô½ÑزÉÑù:ÉÏÉýÑزÉÑùµ½±»²ÉÑùÊý¾ÝÔÚÉÏÉýÑغóµÄÖµ¡£
(5) ÆäËû£¬²¨ÐιÖÒì:·ÂÕ沨ÐÎͼÏÔʾ¹ÖÒ죬ÓëÉè¼ÆµÄµç·¹¦ÄÜÎ޹صĴíÎó¡£
1.3.1 ÐźÅΪ¡°Z¡± ¡°Z¡±±íʾ¸ß×裬±ÈÈçµç·¶Ï·Á˾ÍÊÇÏÔʾΪ¸ß×裬ÍùÍùÊÇÄ£¿éµ÷ÓõÄÐźÅδÁ¬½Óµ¼ÖµÄÐźÅÐü¿Õ£¬ÈçÏÂͼ:
(a) Ô´Âë (b) ²¨ÐΠͼ 1-1 ÐźÅΪ¡°Z¡±Ê¾Àý
ÉÏͼʾÀýÖÐÓÐһϼ¸µã±È½ÏÖØÒª:
(1) ÐźÅֵΪ¡°Z¡±£¬ÎªÄ£¿éµ÷ÓÃÊÇÐźÅδÁ¬½Ó£¬Î´Á¬½Ó°üÀ¨Á½ÖÖ:ÏÔʽµÄδÁ¬½Ó£¬Èçͼ 1-1(a)ÖеÄ.c();Òþʽ µÄδÁ¬½Ó£¬Èçͼ 1-1(a)ÖÐÄ£¿é adder µ÷ÓÃʱ£¬a ¶Ë¿Ú¼´Î´Á¬½Ó¡£¡°ÏÔʽµÄδÁ¬½Ó¡±Ò»°ãÊÇÈËΪ¹ÊÒâÉèÖõģ¬ Ö»Õë¶Ô output Àà½Ó¿Ú;¡°ÒþʽµÄδÁ¬½Ó¡±ÔòÊÇÊèºö£¬ÊôÓÚ´úÂë²»¹æ·¶£¬ÍùÍùÒ²Êǵ¼ÖÂÐźÅֵΪ¡°Z¡±µÄÖ÷ ÒªÔÒò¡£
(2) adder Ä£¿éÀa ¶Ë¿ÚδÁ¬½Ó£¬µ¼Ö a Ϊ¡°Z¡±£¬µ« c ¶Ë¿ÚҲδÁ¬½Ó£¬c È´Êǹ̶¨Öµ¡£ÕâÊÇÒò¶ø a ¶Ë¿ÚÊÇ input£¬c ¶Ë¿ÚÊÇ output¡£output Àà½Ó¿ÚδÁ¬½ÓÊÇĸģ¿éÀﲻʹÓøÃÐźţ¬¿ÉÄÜÊÇÈËΪ¹ÊÒâÉèÖõġ£ËùÓÐµÄ input Àà½Ó¿Ú±»µ÷ÓÃʱ²»ÔÊÐíÐü¿Õ¡£
2
(3) adder Ä£¿éÀï a ÐÅºÅ´Ó 0 ʱ¿Ì¿ªÊ¼¾ÍÊÇ¡°Z¡±£¬¶ø a_r ÐźÅȷʵÔÚ 100ns ×óÓҲűä³É¡°Z¡±µÄ¡£ÕâÊÇÒò¶ø a ÐźÅΪ¶Ë¿Ú£¬±»µ÷ÓÃʱ¾ÍδÁ´½Ó£¬¹Ê´Ó 0 ʱ¿Ì¾ÍΪ¡°Z¡±£¬µ« a_r ÐźÅÊÇÄÚ²¿¼Ä´æÆ÷£¬´Ó 100ns ʱ¿Ì²Åʹ Óà a ÐźŲÎÓ븳ֵ£¬ËùÒÔÒ²±ä³ÉÁË¡°Z¡±¡£
Õë¶ÔÒÔÉÏÒÔÉϼ¸µã£¬ÎÒÃÇÓÐһϼ¸µã½¨Òé:
(1) RTL±àдʱעÒâ´úÂë¹æ·¶£¬ÌرðÊÇÄ£¿éµ÷ÓÃʱ£¬°´½Ó¿Ú˳ÐòÒ»Ò»¶ÔÓ¦¡£
(2) ËùÓÐinputÀà½Ó¿Ú±»µ÷ÓÃʱ²»ÔÊÐíÐü¿Õ¡£
(3) Ò»µ©·¢ÏÖÒ»¸öÐźÅΪ¡°Z¡±£¬ÏòÇ°×·×Ù²úÉú¸ÃÐźŵÄÒò×ÓÐźţ¬¿´ÊÇÄĸöΪ¡°Z¡±£¬Ò»Ö±×·×ÙÏÂÈ¥Ö±µ½×·×Ù µ½¸ÃÄ£¿éÀïµÄ input ½Ó¿Ú£¬Ëæºó½øÐÐÐÞÕý¡£
(4) ÓпÉÄÜ¡°Z¡±Ö»³öÏÖÔÚÏòÁ¿ÐźÅÀïµÄij¼¸Î»ÉÏ£¬Ò²ÊÇÒ»ÑùµÄ×·×Ù£¬ÓпÉÄܵ÷ÓÃʱij¸ö½Ó¿Ú´æÔÚ¿í¶È²»Æ¥Åä Ò²»á´øÀ´¸Ã½Ó¿ÚÉÏijЩλΪ¡°Z¡±¡£
1.3.2 ÐźÅΪ¡°X¡±
¡°X¡±±íʾ²»¶¨Öµ£¬ÍùÍùÊÇ RTL ÀïÐźÅδ¸³Öµµ¼Öµģ¬ÈçÏÂͼ:
(a) Ô´Âë
ÔÚÉÏͼÖУ¬ÓÉÓÚ b_r ÐźÅÉùÃ÷ºóʼÖÕδ¸³Öµ£¬µ¼ÖÂÆäֵΪ¡°X¡±£¬ºóÐø c ÐźÅÓÉÓÚʹÓÃÁË b_r Ðźţ¬µ¼ÖÂÆäÖµ
ҲΪ¡°X¡±¡£
ÁíÍ⣬Vivado2017.1 ¶ÔÓÚ¶àÇý¶¯(2 ¸ö¼° 2 ¸öÒÔÉϵç·µ¥ÔªÇý¶¯Í¬Ò»ÐźÅ)£¬·ÂÕæʱҲ»á²úÉú¡°X¡±£¬Èçͼ 1-3¡£ ÕâÖÖÇé¿öÏÂ×·Ñ°ÐźÅΪ¡°X¡±µÄÔÒò¿ÉÄܲ»Ì«ºÃ×·£¬¿ÉÒÔ³¢ÊÔÏȽøÐÐ×ۺϣ¬¹Û²ìÏ Critial warning£¬´Ëʱ»á±¨³ö¶àÇý ¶¯µÄ¾¯¸æ£¬Èçͼ 1-4¡£
ͼ 1-2 ÐźÅΪ¡°X¡±Ê¾Àý
(b) ²¨ÐÎ
(c) Ô´Âë
(d) ²¨ÐÎ
ͼ1-3 Vivado2017.1ÖжàÇý¶¯Òý·¢¡°X¡± 3
ͼ 1-4 Vivado ÖжàÇý¶¯±¨³ö Critical warning Õë¶ÔÐźÅΪ¡°X¡±Çé¿ö£¬ÎÒÃÇÓÐÒÔϼ¸µã½¨Òé:
(1) Ò»µ©·¢ÏÖ·ÂÕæ´íÎóÀ´×Ôij¸öÐźÅΪ¡°X¡±£¬ÔòÏòÇ°×·×Ù²úÉú¸ÃÐźŵÄÒò×ÓÐźţ¬¿´ÊÇÄĸöΪ¡°X¡±£¬Ò»Ö±×· ×ÙÏÂÈ¥Ö±µ½×·×Ùµ½Ä³¸öÐźÅδ¸³Öµ£¬ËæºóÐÞÕý¡£
(2) Èç¹ûÒò×ÓÐźŶ¼Ã»ÓÐΪXµÄ£¬ÔòºÜ¿ÉÄÜÊǶàÇý¶¯µ¼Öµģ¬Ôò×ÛºÏÅŲéErrorºÍCriticalwarning¡£
(3) ¼Ä´æÆ÷ÐÍÐźÅÈç¹ûûÓи´Î»Öµ£¬ÔÚ¸´Î»½×¶ÎÆäÖµ¿ÉÄÜҲΪ¡°X¡±£¬µ«¿ÉÄÜÕâ²¢²»»á´øÀ´´íÎó¡£
(4) ¡°X¡±ºÍ 1 ½øÐлòÔËËã½á¹ûΪ 1£¬¡°X¡±ºÍ 0 ½øÐлòÔËÐнá¹ûΪ 0¡£
1.3.3 ²¨ÐÎÍ£Ö¹ ²¨ÐÎÍ£Ö¹ÊÇÖ¸·ÂÕæֹͣijһʱ¿Ì£¬ÔÙÒ²ÎÞ·¨Ç°½ø·ÖºÁ£¬¶ø·ÂÕæÈ´ÏÔʾ²»Í£µØÔÚÔËÐУ¬ÈçÏÂͼ:
(e) Ô´Âë (f) ²¨ÐÎ
²¨ÐÎÍ£Ö¹»ù±¾¶¼ÊÇÓÉÓÚ¡°×éºÏ»·Â·¡±µ¼Öµģ¬Ëùν×éºÏ»·Â·¾ÍÊÇÐźŠA µÄ×éºÏÂß¼±í´ïʽÖÐij¸ö²úÉúÒò×ÓΪ B£¬ ¶ø B µÄ×éºÏÂß¼±í´ïʽÖÐÓÖÓõ½ÁËÐźŠA£¬ÈçÉÏͼԴÂë c_t Óõ½ÁË c£¬¶ø c ÓÖÓõ½ c_t¡£·ÂÕæÆ÷ÊÇÔÚÿ¸öÖÜÆÚÄÚ¼Æ Ëã¸ÃÖÜÆÚµÄËùÓбí´ïʽ£¬×éºÏÂ߼ѻ·Ç¶Ì×£¬´øÀ´µÄÊÇ·ÂÕæÆ÷µÄÑ»·¼ÆË㣬µ¼ÖÂÆäÎÞ·¨Í˳ö¸Ã¼ÆË㣬´øÀ´Á˲¨ÐΠֹͣµÄÏÖÏó¡£
ÓÉÓÚ²¨ÐÎÍ£Ö¹³öÏÖʱ£¬²¢²»ºÃÅŲéÄÄÀïд³öÁË×éºÏ»·Â·£¬ÎÒÃǽ¨Òé°´ÒÔÏ´¦Àí:
(1) Ò»µ©·¢ÏÖ²¨ÐÎÍ£Ö¹£¬ÔòÏȶÔÉè¼Æ½øÐÐ×ۺϡ£
(2) ²é¿´×ۺϲúÉúµÄ Error ºÍ Critical warning£¬²¢³¢ÊÔÐÞÕý¡£±ÈÈçÉÏͼʾÀýÖеÄ×éºÏ»·Â·£¬¾¹ý Vivado µÄ×ÛºÏ ºó±ä³ÉÁËÒ»¸ö¶àÇý¶¯µÄ¹Ø¼ü¾¯¸æ£¬Èçͼ 1-5¡£
4
ͼ 1-5 ×éºÏÂß¼±¨³ö¶àÇý¶¯µÄ critical warning
ÁíÍ⣬Vivado ¹¤³ÌÖÐÓÐ TCL ÃüÁî report_timing_summary£¬»á¼ì²é×éºÏ»·Â·£¬²¢±¨³ö¼ì²é½á¹û¡£µ«ºÜÒź¶£¬¶Ô
ÓÚÎÒÃÇÉÏͼµÄʾÀý£¬¸ÃÃüÁûÓмì²é³ö×éºÏ»·Â·£¬ºÜÓпÉÄܺÍ×ÛºÏʱ±ä³ÉÁ˶àÇý¶¯Óйء£
1.3.4 Ô½ÑزÉÑù
Ô½ÑزÉÑùÔÚ²¨Ðγö´íÖÐÊÇÒ»¸öÒþ²Ø½ÏÉîµÄ³ö´í£¬ÍùÍù¿ÉÄÜ»áºÍÂß¼³ö´í»ìÔÚÒ»Æð¡£³õ¿´ÆðÀ´£¬Æ䲨ÐÎÒ²ÊÇºÜ Õý³£µÄ£¬¶øÇÒÔÚ·¢ÉúÔ½ÑزÉÑùºó£¬ÍùÍù»áÔÙÖ´Ðкܳ¤Ê±¼ä²Å»á³ö´í¡£Òò¶øÐèÒª´ó¼ÒÏÈ°´ÕÕÂß¼³ö´íÈ¥µ÷ÊÔ£¬×îºó Èç¹û·¢ÏÖÊý¾Ý²ÉÑùÓÐЩÒì³££¬¾ÍÐèÒªÕç±ðÏÂÊÇ·ñÊÇÔ½ÑزÉÑùµÄ´íÎóÁË¡£
Ô½ÑزÉÑùÊÇÖ¸Ò»¸ö±»²ÉÑùµÄÐźÅÔÚÉÏÉýÑزÉÑùµ½ÁËÆäÔÚÉÏÉýÑغóµÄÖµ£¬Ò»°ãÇé¿öÏ£¬ÈÏΪÕâÊÇÒ»¸ö´íÎó£¬Èç ÏÂͼ:
(g) Ô´Âë
(h) ²¨ÐÎ
ͼ 1-6 Ô½ÑزÉÑùʾÀý
ÉÏͼʾÀýÖÐÔÚ 105ns ʱ¿Ì£¬clk ÉÏÉýÑص½À´£¬a_r ºÍ a_r_r ͬʱ±äΪÁË 1(Ò²¾ÍÊÇ a µÄÖµ)¡£a_r ÔÚ 105 ʱ¿ÌÇ°ÊÇ 0£¬ÔÚ 105 ʱ¿ÌºóÊÇ 1¡£´ÓÔ´ÂëÀ´¿´£¬a_r_r ÊÇÔÚÉÏÉýÑزÉÑù a_r µÄÖµ£¬½á¹ûÆäÔÚ 105 ʱ¿Ì²ÉÑùµ½ a_r Ϊ 1 µÄÖµ£¬Ò² ¾ÍÊDzÉÑùµ½ÁË a_r ÔÚͬһÉÏÉýÑغóµÄÖµ¡£Õâ¾ÍÊôÓÚÔ½ÑزÉÑù¡£
Ôì³ÉÕâÒ»ÏÖÏó¸üÉî²ãµÄÔÒòÊÇ Verilog Àï×èÈû¸³Öµ¡°=¡±ºÍ·Ç×èÈû¸³Öµ¡°<=¡± »ìÓá£ÉÏͼԴÂëÖÐ a_r ²ÉÓÃ×èÈû ¸³Öµ£¬¶ø a_r_r ²ÉÓ÷Ç×èÈû¸³Öµ¡£
ÿһ´Î¸³Öµ£¬·ÖΪÁ½²½:Ϊ¼ÆËãµÈʽ×ó²àµÄ±í´ïʽºÍ¸³Öµ¸øÓÒ²àµÄÐźţ¬¼ò¼ÇΪ¼ÆËãºÍ¸³Öµ¡£ÔÚÒ»¸öÉÏÉýÑØ µ½À´Ê±£¬ËùÓÐÓÉÉÏÉýÑØÇý¶¯µÄÐźŰ´ÒÔÏÂ˳Ðò½øÐд¦Àí:
(1) ÏÈ´¦Àí×èÈû¸³Öµ£¬ÏÈÍê³É¼ÆËãºÍ¸³Öµ£¬Í¬Ò»ÐźÅÍê³É¼ÆËãºóÁ¢ÂíÍê³É¸³Öµ¡£Í¬Ò» always ¿éÀïµÄ×èÈû¸³Öµ 5
´ÓÉϵ½Ï°´Ë³Ðò´®ÐÐÖ´ÐУ¬²»Í¬ always ¿éÀïµÄ×èÈû¸³ÖµÒÀÀµ¹¤¾ßʵÏÖÈ·¶¨Ë³Ðò´®ÐÐÖ´ÐУ¬Ò»Ò»Íê³É¼ÆË㠺͸³Öµ¡£
(2) ÔÙ½øÐзÇ×èÈû¸³ÖµµÄ¼ÆËã¡£ËùÓзÇ×èÈû¸³ÖµÆäµÈʽ×ó²àµÄÖµ¶¼Í¬Ê±¼ÆËãºÃ¡£
(3) ÉÏÉýÑؽáÊøʱ£¬ËùÓзÇ×èÈû¸³ÖµÍ¬Ê±Íê³É×îÖյĸ³Öµ¶¯×÷¡£
´ÓÒÔÉÏÃèÊö¿ÉÒÔ¿´µ½£¬·Ç×èÈû¸³ÖµÊÇÔÚÉÏÉýÑصÄ×îºóÒ»¸öʱ¼ä²½ÀïÍê³É´¦ÀíµÄ£¬ÍíÓÚ×èÈû¸³ÖµµÄ´¦Àí¡£ËùÒÔ ÉÏͼʾÀýÖУ¬a_r_r µÄ¸³ÖµÍíÓÚ a_r µÄ¸³Öµ£¬Ôì³ÉÁËÔ½ÑزÉÑùµÄÇé¿ö¡£
Ô½ÑزÉÑù£¬³ý·ÇÌØÒâÉè¼Æ£¬Ò»°ãÎÒÃÇÈÏΪÊÇÒ»¸öÉè¼Æ´íÎó£¬Õë¶ÔÔ½ÑزÉÑù£¬ÎÒÃÇÓÐһϼ¸µã½¨Òé:
(1) RTL±àдʱעÒâ´úÂë¹æ·¶£¬ËùÓÐalwaysдµÄʱÐòÂß¼Ö»ÔÊÐí²ÉÓ÷Ç×èÈû¸³Öµ¡£
(2) Ò»µ©·¢ÏÖÔ½ÑزÉÑùµÄÇé¿ö£¬×·×Ù±»²ÉÑùÐźţ¬Ö±µ½×·×Ùµ½Ä³Ò»¸ö×èÈû¸³ÖµµÄÐźţ¬Ëæºó½øÐÐÐÞÕý¡£
1.3.5 ²¨ÐιÖÒì ±¾Îĵµ½«Ä¿Ç°Î´ÄÜÏëµ½µÄ²¨Ðγö´íµÄÀàÐͶ¼¹éΪ²¨ÐιÖÒì¡£
µ±³öÏÖ²¨ÐιÖÒìÀàµÄ´íʱ£¬ÐèÒªÇø·ÖÆäÊÇ·ÂÕ湤¾ß³ö´í»¹ÊÇ RTL ´úÂë³ö´í:
(1) ¹Û²ì³ö´íµÄÐźţ¬¿´ÆäÉú³ÉÒò×Ó£¬Èç¹û×ÔÎÒÅÐ¶Ï RTL Ó¦¸ÃûÓУ¬ÇÒ²¨ÐÎÏÔʾȷʵ̫¹ÖÒì(±ÈÈçʼÖÕΪ
32¡¯hxx?x0x?)£¬ÔòºÜÓпÉÄÜ·ÂÕ湤¾ß³ö´í¡£ÖØÆôµçÄÔÉõÖÁÖؽ¨¹¤³ÌÊÔÊÔ¡£
(2) ʵÔÚÎÞ·¨´Ó²¨ÐÎÀïÇø·Ö³öÊÇʲô´í¡£¿ÉÒÔ³¢ÊÔÏÈÔËÐÐ×ۺϣ¬¿´³ö×ۺϺóµÄ Error¡¢Critical warning ºÍ
warning¡£ÆäÖÐ Error ÊDZØÐëÒªÐÞÕýµÄ£¬Critical warning ÊÇÇ¿ÁÒ½¨ÒéÒªÐÞÕýµÄ£¬warning Êǽ¨ÒéÄÜÐÞÔòÐ޵ġ£
(3) ¾³£ÓÐЩ²»·ûºÏ¹æ·¶µÄ´úÂ룬Vivado Ò²²»»á±¨³ö Warning£¬ÐèÒª´ó¼Ò×Ðϸ¸´ºË×Ô¼ºµÄ´úÂë¡£³£¼ûµÄÒþ±Î´í
ÎóÓÐ:¶Ô input ÐźŽøÐÐÁ˸³Öµ£¬Ä£¿éµ÷ÓÃÐźÅÁ¬½Ó´íÎó£¬reset ÐźŽӳÉÁË clock Ðźţ¬µÈµÈ¡£
1.4 ³ö´í·ÖÀà¶þ:Âß¼³ö´í
Âß¼³ö´íÔòÊÇ°üÂÞÍòÏ󣬴íÎóÀàÐÍÊÇÉè¼ÆµÄµç·¹¦ÄÜÓÐ´í£¬´Ëʱ²¨ÐνçÃæ¿´ÆðÀ´ÊǺÜÕý³£µÄ£¬ÎÒÃÇÐèÒªÀûÓà ²¨Ðι۲ì¸÷Ðźŵı仯£¬½áºÏÔ¤¶¨µÄµç·¹¦ÄܽøÐж¨´í¡£
ÒÔÊý¾ÝºÍ¿ØÖÆ·Ö¿ªÀ´¿´£¬Âß¼³ö´í¿É·ÖΪÁ½Àà:Êý¾Ýͨ·³ö´íºÍ¿ØÖÆÐźųö´í¡£ÆäÖÐÊý¾Ýͨ·ͨ³£ÊôÓڽϼò µ¥µÄ´í£¬±ÈÈç¼Ó·¨Æ÷ËãÁ½¸ö¼ÓÊýµÄºÍ£¬½á¹û²»¶Ô;¶ø¿ØÖÆÐźųö´íÔòÍùÍù±È½ÏÄѵ÷£¬ÍùÍùÊÇÉè¼ÆʱµÄ±ß½ÇÎÊÌ⿼ ÂDz»Öܵ¼Öµģ¬±ÈÈç CPU µÄ·Ã´æϵͳ³ö´í¡£ÕâЩ¶¼ÊÇÂß¼Éϳö´íÁË£¬µ«ÊǺܲ»ÐÒµÄÊÇ£¬ÔÚÎÒÃÇδÄܶ¨Î»³ö¸Ã´íÎó µÄԴͷʱ£¬ÎÒÃÇÍùÍù²»ÄÜÅжϳöÆäÊÇÊý¾Ýͨ·³ö´í£¬»¹ÊÇ¿ØÖÆÐźųö´í¡£µç·Éè¼ÆÕßÔÚÉè¼ÆÖ®³õÓ¦µ±¶ÔÕû¸öµç· ÓнÏÈ«ÃæµÄÈÏʶºÍ¿¼ÂÇ£¬¾¡Á¿¼õÉÙ¿ØÖÆÐźųö´íµÄÇé¿ö¡£
Âß¼³ö´íʱ£¬²»Í¬µÄµç·Éè¼ÆÓÐÆäÌض¨µÄµ÷ÊÔÊֶΣ¬ÄÑÒÔ×ܽá³öͳһµÄµ÷ÊÔÊֶΣ¬µ«ËûÃǵÄÖ¸µ¼Ë¼ÏëÊÇÒ»Ö µÄ:ʱ¼äÉÏÏȶ¨´í£¬¿Õ¼äÉÏÔÙ¶¨´í¡£
ÒÔÏÂÎÒÃǽ«Õë¶Ô CPU µÄÂß¼³ö´íµ÷ÊÔ×÷¼òµ¥µÄ˵Ã÷£¬Ö÷ÒªÒÔÁ÷Ë®Ïß CPU ΪÀý½øÐÐ˵Ã÷¡£ 1.4.1 CPU Âß¼³ö´íµ÷ÊÔ
CPU Âß¼³ö´íµ÷ÊÔʱ£¬Ê×ÏÈÐèÒªÔÚ²¨Ðδ°¿ÚÀïץȡ±ØÒªµÄÐÅÏ¢:Ö¸ÁîµÄ PC ÖµºÍ»úÆ÷Ö¸Áî±àÂë¡¢Ö¸ÁîµÄд»Ø½á ¹û¡¢¶¥²ãµÄ·Ã´æ½Ó¿Ú¡¢Ö¸ÁîÖ´ÐеÄÊý¾Ýͨ·ÉϵÄÐÅÏ¢¡£
¶ÔÓÚÁ÷Ë®Ïß CPU£¬ÐèÒª¸÷Á÷Ë®¼¶ÐźŷÖ×é×¥³ö£¬±ÈÈç×¥³öÿ¼¶Á÷Ë®ÀïµÄ PC Öµ¡¢Ö¸Áî±àÂëºÍÖ´Ðнá¹û¡£Á÷Ë® ¼¶¼äµÄ½øÈëºÍÍ˳öµÄ¿ØÖÆÐźÅÒ²ÓÈÆäÖØÒª£¬±ØÐë×¥³ö£¬CPU ³õÆÚµ÷ÊÔÍùÍù¶¼ÊÇÁ÷Ë®Ïß¿ØÖƳö´íÁË¡£»¹Óж¥²ã×ÜÏß ½Ó¿ÚÒ²ºÜÖØÒª£¬Ò»µ©È¡Ö¸³ö´íÁË£¬»òÕßµ÷ÊԷôæÖ¸Áî³ö´íÁË£¬¾ÍÐèÒª¹Ø×¢¶¥²ã×ÜÏß½Ó¿ÚÉϵÄÐźÅÁË£¬CPU ºóÆÚµ÷ ÊÔÍùÍù¶¼ÊǷôæϵͳ³ö´íÁË¡£
CPU Âß¼³ö´íµ÷ÊÔͬÑù°´¡°Ê±¼äÉÏÏȶ¨´í£¬¿Õ¼äÉÏÔÙ¶¨´í¡±½øÐС£ (1) ¶¨Î»³ö´íʱ¼äÔ´Í·
6
´ËʱÐèÒª½áºÏÖ´ÐеIJâÊÔ³ÌÐòºÍ CPU Éè¼Æ½øÐж¨Î»¡£¶¨Î»´íÎóÇ°£¬ÐèÒª´ó¼Ò×öºÃÒÔÏÂÈýÏî×¼±¸:
Ê×ÏÈ£¬ÐèÒªÏÈÀí½â²âÊÔ³ÌÐòµÄ´óÖÂÐÐΪ¡£Àí½â¹ý³ÌÖÐÐèÒªÔĶÁ²âÊÔ³ÌÐòµÄÔ´Â룬CPU Éè¼ÆÖлáÔËÐеijÌÐòÓÐ Á½Àà:¹¦ÄܲâÊÔ³ÌÐò func ºÍÐÔÄܲâÊÔ³ÌÐò coremark¡¢dhrystone µÈ¡£¹¦ÄÜ func ÐÐΪºÜ¼òµ¥£¬ËùÓбàºÅµÄ¹¦ÄܵãÒÀ´Î ²âÊÔ£¬Ã¿Á½¸ö¹¦Äܵã²âÊÔÖ®¼ä²åÈë wait_1s º¯Êý¡£ÐÔÄܲâÊÔ³ÌÐòÐÐΪÔòÆ«¸´ÔÓ£¬¿ÉÒÔ²»ÓÃŪ¶®£¬µ«ÔÚµ÷ÊÔ¹ý³ÌÖÐÈç ÓÐÐèÒªÓ¦µ±ÄܺܿìÕÒµ½º¯Êý¼äµÄµ÷ÓùØϵ¡£
ÔÙÕߣ¬ÐèÒª¶Ô mips »ã±àºÍ func ±àÒë»·¾³ÓÐÒ»¶¨Á˽⡣ÎÒÃÇÔÚ¹¦ÄܺÍÐÔÄܲâÊÔ³ÌÐòµÄ±àÒë»·¾³ÖлáÉú³ÉÈçÏ 8 ¸öÎļþ£¬Î»ÓÚ±àÒëĿ¼µÄ obj/Ï¡£ÆäÖÐ test.s ÊÇÎÒÃǵ÷ÊÔ¹ý³ÌÖÐÖصã¹Ø×¢µÄ£¬Ëü¶ÔÖ´ÐгÌÐòµÄÿÌõ»úÆ÷Ö¸Áî½øÐÐÁË ·´»ã±àºÍ×¢ÊÍ£¬¶ÔÎÒÃǵĵ÷ÊÔºÜÓаïÖú¡£
±í 1-1 ±àÒëÉú³ÉÎļþ
ÎļþÃû
½âÊÍ
data_ram.coe
ÖØж¨ÖÆ data ram ËùÐèµÄ coe Îļþ
data_ram.mif
·ÂÕæʱ data ram ¶ÁÈ¡µÄ mif Îļþ
inst_ram.coe
ÖØж¨ÖÆ inst ram ËùÐèµÄ coe Îļþ
inst_ram.mif
·ÂÕæʱ inst ram ¶ÁÈ¡µÄ mif Îļþ
main.bin
±àÒëºóµÄ´úÂë¶Î£¬¿ÉÒÔ²»ÓùØ×¢
main.data
±àÒëºóµÄÊý¾Ý¶Î£¬¿ÉÒÔ²»ÓùØ×¢
main.elf
±àÒëºóµÄ elf Îļþ
test.s
¶Ô main.elf ·´»ã±àµÃµ½µÄÎļþ
×îºó£¬ÐèÒª¶Ô CPU ÄÚ²¿Âß¼±È½ÏÊìϤ¡£ÒòΪÊÇ´ó¼Ò×ÔʵÏÖµÄ CPU£¬ÏàÐÅ´ó¼ÒÓ¦¸Ã±È½ÏÊìϤ¡£ÔÚ¶¨Î»Ê±¼äÔ´Í· ʱ£¬ÐèÒªÃ÷È· CPU ÕýÔÚÖ´ÐеÄÖ¸ÁîµÄ PC Öµ¡¢±àÂëºÍд»Ø½á¹û£¬½«ÕâЩÐÅϢץȡµ½²¨Ðδ°¿ÚÖУ¬½øÐжԱȡ£
¾ßÌåµ÷ÊÔʱ£¬¿ÉÒÔ²ÉÓÃһϷ½°¸:
(1) ÔÚ²¨ÐÎ×îºó³ö´í´¦£¬È·ÈÏÈ¡»áµÄÖ¸ÁîºÍ PC ÖµÊǶÔÓ¦ÕýÈ·µÄ£¬Ò²¾ÍÊÇÈ·ÈÏÈ¡Ö¸ÕýÈ·£¬Õâʱ¾ÍÐèÒª¶ÔÕÕ·´»ã
±à³ÌÐò test.s¡£
(2) Èç¹ûÈ¡Ö¸²»ÕýÈ·£¬ÔòÍùÇ°×·ËÝ£¬Ö±µ½µÚÒ»¸öÈ¡Ö¸ÕýÈ·µÄµØ·½¡£×·Ëݵķ½·¨Ò²Óн²¾¿£¬ÓÐʱ²»Äܼòµ¥Ò»ÌõÌõ
Ö¸Áî×·ËÝ£¬ÒòΪµÚÒ»¸öÈ¡Ö¸ÕýÈ·µÄµØ·½¿ÉÄÜÔÚºÜÔç֮ǰ£¬±ØÒªµÄʱºò£¬Ó¦¿çÔ½Ò»´ó¶ÎÖ¸Áî¶Î£¬È¥È·ÈÏÈ¡Ö¸ ÊÇ·ñÕýÈ·¡£×·Ëݹý³Ì¾ÍÊdzÌÐò¶Î²»Í£µÄѹËõ£¬Ö±µ½ÕÒµ½µÚÒ»¸öÈ¡Ö¸ÕýÈ·µÄµØ·½£¬´ËʱÍùÍùÒªÓõ½·ÂÕ湤¾ß ÖмӱêÇ©µÄ·½·¨()¡£
(3) ÕÒµ½µÚÒ»ÌõÖ¸ÁîÕýÈ·µÄµØ·½ºó£¬¿ÉÒÔÏÈÈ·ÈϸÃÖ¸ÁîÖ´Ðнá¹ûÊÇ·ñÕýÈ·¡£ËæºóÎÒÃǵĵ÷ÊÔÄ¿±êÊÇÈ·ÈÏʱ¼äÉÏ µÚÒ»¸ö³ö´íµÄµØ·½ÊÇÔÚ¸ÃÖ¸ÁîÇ°»¹ÊÇÔÚ¸ÃÖ¸Áîºó¡£È·ÈÏ·½·¨¾ÍÐèÒª½áºÏ²âÊÔ³ÌÐò£¬±ÈÈçÅжϸÃÖ¸ÁîλÓÚµÄ º¯Êý£¬È·Èϸú¯ÊýÊÇ·ñÓ¦¸ÃÖ´ÐУ¬Æä½øÈëÌõ¼þÊÇ·ñÕýÈ·¡£ÕâÀïÓкܶàÖÖµ÷ÊÔ·½·¨£¬ÐèÒª¸ù¾Ý¾ßÌåÇé¿ö¾ßÌå ·ÖÎö£¬ÎÞ·¨ºÜºÃµÄ×ܽá·ÖÀ࣬ÐèÒª´ó¼ÒÔÚʵ¼ùÖнøÐÐ×ܽᡣ×ܶøÑÔÖ®£¬ÐèÒª½«²âÊÔ³ÌÐò´úÂëºÍ CPU ½áºÏ ÆðÀ´Áªµ÷¡£
ÒÔÉÏ·½·¨ÊÇÓɺóÍùÇ°×·£¬Èç¹û×·Ëݹý³ÌÖз¢ÏÖÎÞ·¨ÔÙ×·ÁË£¬Ôò¿ÉÒÔ¿¼ÂÇÓÉÇ°Íùºó×·¡£ÕâÀïµÄ¡°Ç°¡±¾ÍÐèÒª´ó ¼ÒºÃºÃ¶¨Î»ÁË£¬ÉõÖÁ¿ÉÄÜ´æÔÚÔËÆøµÄ³É·Ö£¬Ò»¶¨ÒªÈ·±£Õâ¸ö¡°Ç°¡±Ö®Ç°µÄ³ÌÐòÖ´ÐÐʱ¶Ô£¬ÕâÑùÍùºó×·²ÅÄÜ×·µ½Õý È·µÄµÚÒ»¸ö´íÎóµÄµê£¬·ñÔò£¬Ö»»á½«×Ô¼ºÒýÏò´íÎóµÄ·½·¨¡£
ʱ¼äÉϵĶ¨´í£¬ÒªÇó´ó¼Ò¶Ô²âÊÔ³ÌÐòÓÐÒ»¶¨µÄÁ˽âºÍÕÆÎÕ£¬¾ßÌåµ÷ÊÔ·½·¨ÐèÒª´ó¼Ò¶à¶àÔÚʵ¼ùÖÐ×ܽᡣ
ÖµµÃÒ»ÌáµÄÊÇ£¬ÎÒÃÇµÄ CPU ʵÑ鿪·¢»·¾³ ucas_CDE ·ÂÕæʱһµ©³ö´í£¬Ñé֤ƽ̨»áºÜ¿ìÍ£Ö¹£¬²¢´òÓ¡¶Ô±È³ö ´íµÄÐźţ¬´ó¼Ò×î¶àÍùÇ°×·ËÝÒ»»á¾Í»áÕÒµ½µÚÒ»Ìõ³ö´íµÄÖ¸Áî¡£
(2) ¶¨Î»³ö´í¿Õ¼äÔ´Í· ÔÚÍê³Éʱ¼äÉϵĶ¨´íºó£¬Ò²¾ÍÊÇÕÒµ½Ò»¸öÖ´Ðгö´íµÄÖ¸Áîºó£¬ÐèÒª½øÐпռ䶨´íÁË¡£
7
¿Õ¼ä¶¨´íʱÐèÒª´ó¼Ò¶Ô CPU ΢½á¹¹ÓиüÉîÈëµÄÀí½â¡£½¨Òé´ó¼ÒÒԿռ仮·ÖµÄÊÓ½ÇÈ¥Àí½â CPU£¬ÌرðÊÇÁ÷Ë®Ïß CPU£¬Ã¿Ò»Á÷Ë®¼¶¶¼ÊÇÓжÔÓ¦µÄ²¿¼þµÄ£¬Ó¦µ±Àí½âÇå³þ¸÷Á÷Ë®¼¶µÄ»®·Ö¡£
¿Õ¼ä¶¨Î»Ê±£¬ÓÐÁ½ÖÖ·½·¨:
(1) ´ÓCPUÁ÷ˮǰ¶ËÏòÁ÷Ë®ºó¶ËÅŲ飬ȷÈÏÖ¸ÁîÔÚÄĸöÁ÷Ë®¼¶¿ªÊ¼³ö´í¡£Ê×ÏÈÒªÅŲéµÄ¾ÍÊÇÈ¡Ö¸ÊÇ·ñÕýÈ·¡£
(2) ´Ó CPU Á÷Ë®ºó¶ËÏëÁ÷ˮǰ¶ËÅŲ飬ȷÈÏÖ¸ÁîÊÇ´ÓÄĸöÁ÷Ë®¼¶³ö´íµÄ¡£Ê×ÏÈÒªÅŲéµÄ¾ÍÊÇд»Ø½á¹ûÊÇ·ñÕý È·¡£
1.5 ×Ü½á ´ó¼ÒÔÚ·ÂÕæ¹ý³ÌÖÐÅöµ½´íÁË¿ÉÒÔ°´ÐèË÷Òý±¾Îĵµ£¬µ÷ÊÔ¹ý³ÌÖмÇס¡°Ê±¼äÉÏÏȶ¨´í£¬¿Õ¼äÉÏÔÙ¶¨´í¡±£¬²»Òª
ÊÖæ½ÅÂÒ£¬¸÷ÖÖÐźÅÂÒ×¥£¬Òª×¢ÒâÀíÇåµ÷ÊÔ˼·¡£
Éè¼Æ³õÆÚ£¬Ó¦µ±¾ßÓÐÈ«¾Ö˼·£¬¾¡Á¿¿¼ÂÇÖܵ½£¬ÌرðÊDZ߽ÇÇé¿ö£¬ÕâÑù¿ÉÒÔ´ó´ó¼õÉÙºóÆÚµ÷ÊԵŤ×÷Á¿¡£µ± ȻҲ²»¿É×êÅ£½Ç¼â£¬ÉîÏÝÉè¼Æ¿¼ÂÇÖжø³Ù³Ù²»¿Ï¶¯±Ê£¬ºÜ¶àÉè¼ÆÍùÍùÊÇд×ÅдמÍÇåÎúÁË¡£
±à³Ì¹ý³ÌÖУ¬Ó¦µ±×¢Òâ±àÂë¹æ·¶£¬·ÂÕæ¡¢×ÛºÏʵÏÖÖкܶà¹ÖÒìÏÖÏó£¬ÒÔ¼°¡°·ÂÕæͨ¹ý£¬ÉÏ°å²»¹ý¡±µÈºÜ¶à¶¼ ÊÇÓÉÓÚ´úÂë²»¹æ·¶µ¼Öµģ¬Ç¿ÁÒ½¨Òé°´ÕպõĹ淶À´±à³Ì¡£
×îºó£¬¸ø´ó¼ÒÇ¿µ÷Ï Verilog µÄÔËËã·ûµÄÓÅÏȼ¶£¬¼ûͼ 1-7¡£ÆäÖС°+¡±ºÍ¡°¡ª¡±µÄÓÅÏȼ¶ÊǺܸߵģ¬ÐèÒª´ó¼Ò ÁôÒ⣬±ÈÈç¡°assign res[31:0] = a[31:0] + b[0]&&c[0];¡±£¬±í´ïʽÓÒ²àÔËÐнá¹ûÊÇÒ»¸ö 1bit µÄ½á¹û£¬¶ø²»ÊÇÎÒÃÇÈÏΪ µÄ 32bit µÄ½á¹û£¬Òò¶øÉÏÊöÓï¾äµÈЧÓÚ¡°assign res[31:0] = (a[31:0] + b[0]) && c[0];¡±¡£
ÓÅÏȼ¶±ð
!~ */% +-
<< >>
< <= > >= == != === !==
&
^ ^~ |
&&
||
?:
¸ßÓÅÏȼ¶±ð
µÍÓÅÏȼ¶±ð
ͼ1-7 VerilogÔËËã·ûÓÅÏȼ¶
8