{"id":3533,"date":"2020-03-05T18:20:37","date_gmt":"2020-03-05T09:20:37","guid":{"rendered":"http:\/\/flogics.com\/wp\/?p=3533"},"modified":"2023-09-05T19:49:49","modified_gmt":"2023-09-05T10:49:49","slug":"analyzing-spinal-m2spipe","status":"publish","type":"post","link":"https:\/\/flogics.com\/wp\/2020\/03\/analyzing-spinal-m2spipe\/","title":{"rendered":"[SpinalHDL] Spinal \u306e FIFO\uff08m2sPipe\uff09\u3092\u89e3\u8aad\u3057\u3066\u307f\u308b"},"content":{"rendered":"<p>Before designing FIFO by myself, trying to understand Spinal m2sPipe.<\/p>\n<p><a href=\"\/wp\/2020\/03\/fifo-design-is-harder-than-expected\/\">\u524d\u56de<\/a>\u3001\u81ea\u529b\u3067 FIFO \u306e\u8a2d\u8a08\u3092\u8a66\u307f\u307e\u3057\u305f\u304c\u3001\u76f4\u611f\u7684\u306a\u3084\u308a\u65b9\u3067\u306f\u8a2d\u8a08\u304c\u56f0\u96e3\u306a\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3057\u305f\u3002\u305d\u3053\u3067\u3001\u3082\u3046\u5c11\u3057\u5f62\u5f0f\u7684\u306a\u624b\u6cd5\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u3044\u304f\u3064\u304b\u6559\u79d1\u66f8\u3092\u3072\u3063\u304f\u308a\u8fd4\u3057\u3001Mealy \u30de\u30b7\u30f3\u306e\u8a2d\u8a08\u306b\u3064\u3044\u3066\u5fa9\u7fd2\u3057\u3066\u307f\u307e\u3057\u305f\u3002Google \u3067\u691c\u7d22\u3059\u308b\u3068\u3044\u308d\u3044\u308d\u51fa\u3066\u304f\u308b\u3068\u601d\u3044\u307e\u3059\u304c\u3001<a href=\"https:\/\/www.slideserve.com\/eagan-flowers\/lecture-17\">\u3053\u306e\u8aac\u660e<\/a>\u306e 13\u30da\u30fc\u30b8\u306b\u51fa\u3066\u304f\u308b\u56f3\uff08Mealy \u3068 Moore \u30de\u30b7\u30f3\u306e\u6bd4\u8f03\uff09\u304c\u5c11\u3057\u5206\u304b\u308a\u3084\u3059\u3044\u304b\u306a\u3001\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u3057\u304b\u3057\u306a\u304c\u3089\u3001\u81ea\u5206\u3067 Mealy \u30de\u30b7\u30f3\u3092\u8a2d\u8a08\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001\u300c\u72b6\u614b\u300d\u3092\u3069\u306e\u3088\u3046\u306b\u5206\u985e\u3059\u308b\u304b\u3001\u3068\u3044\u3046\u554f\u984c\u306b\u7a81\u304d\u5f53\u305f\u308a\u307e\u3059\u3002FSM\uff08\u72b6\u614b\u9077\u79fb\u30de\u30b7\u30f3\uff09\u306e\u3088\u3046\u306b\u660e\u78ba\u306b\u72b6\u614b\u3092\u5b9a\u7fa9\u3067\u304d\u308b\u3082\u306e\u3067\u3042\u308c\u3070\u3084\u308a\u3084\u3059\u3044\u306e\u3067\u3059\u304c\u3001FIFO \u306f\u3061\u3087\u3063\u3068\uff08\u79c1\u306b\u306f\uff09\u96e3\u3057\u3044\u3067\u3059\u3002\u305d\u3053\u3067\u307e\u305a\u306f\u3001SpinalHDL \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u3042\u308b Stream.m2sPipe() \u306e\u5b9f\u88c5\u3092\u7e59\u304d\u3001\u9006\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u3057\u3066\u307f\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<h2>m2sPipe \u306e\u771f\u7406\u5024\u8868\u3092\u66f8\u3044\u3066\u307f\u308b<\/h2>\n<p>\u307e\u305a\u6700\u521d\u306b\u3001\u524d\u56de\u793a\u3057\u305f\u8ad6\u7406\u56de\u8def\u56f3\u3092\u518d\u63b2\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/flogics.com\/wp\/wp-content\/uploads\/2020\/03\/streamfifo.svg\"><img decoding=\"async\" class=\"alignnone size-full wp-image-3519\" src=\"http:\/\/flogics.com\/wp\/wp-content\/uploads\/2020\/03\/streamfifo.svg\" alt=\"\" \/><\/a><\/p>\n<p>\u7d9a\u3044\u3066\u3001\u89e3\u8aad\uff08?\uff09\u3057\u305f\u771f\u7406\u5024\u8868\u3092\u793a\u3057\u307e\u3059\u304c\u3001\u8868\u304c\u6c5a\u3089\u3057\u304f\u306a\u3089\u306a\u3044\u3088\u3046\u306b\u3001\u5c11\u3057\u7565\u8a18\u3092\u3057\u307e\u3059\u3002<\/p>\n<ul>\n<li>rV: valid \u30e9\u30a4\u30f3\u306b\u7e4b\u304c\u3063\u3066\u3044\u308b D-FF \u306e\u51fa\u529b\uff08\u3064\u307e\u308a\u5185\u90e8\u72b6\u614b\uff09<\/li>\n<li>rP: payload \u30e9\u30a4\u30f3\u306b\u7e4b\u304c\u3063\u3066\u3044\u308b D-FF \u306e\u51fa\u529b\uff08\u540c\uff09<\/li>\n<li>s.v: src.valid\uff08.p \u306f payload\u3001.r \u306f ready\uff09<\/li>\n<li>d.v: sink.valid\uff08d \u306f destination \u306e\u3064\u3082\u308a\uff09<\/li>\n<li>rV*, rP*: rV \u3068 rP \u306e\u3001\u6b21\u306e\uff08\u3064\u307e\u308a 1\u30af\u30ed\u30c3\u30af\u5f8c\u306e\uff09\u72b6\u614b<\/li>\n<li>NC: Don&#8217;t Care\uff08SpinalHDL \u306e Stream \u30d0\u30b9\u306e\u5b9a\u7fa9\u3088\u308a\u3001valid \u304c False \u306e\u5834\u5408\u306f ready \u3084 payload \u306f Don&#8217;t Care \u306b\u306a\u308b\uff09<\/li>\n<li>1: True\uff08T \u3068 F \u3060\u3068\u8aad\u307f\u306b\u304f\u3044\u306e\u3067\uff09<\/li>\n<li>0: False\uff08\u540c\uff09<\/li>\n<li>p0, p1: \u305d\u308c\u305e\u308c payload \u306e\u4efb\u610f\u306e\u5024<\/li>\n<\/ul>\n<p>\u771f\u7406\u5024\u8868\u3067\u3059\u3002\u6700\u521d\uff08\u5de6\u7aef\uff09\u304c\u3001\u72b6\u614b\u304a\u3088\u3073\u5165\u529b\u306e\u5168\u7a2e\u985e\u306b\u5bfe\u5fdc\u3059\u308b\u30e9\u30d9\u30eb\u3001\u7d9a\u3044\u3066 2\u6841\u304c\uff08\u73fe\u5728\u306e\uff09\u72b6\u614b\u30013\u6841\u304c\u5165\u529b\u30012\u6841\u304c\u6b21\u306e\u72b6\u614b\u3001\u6700\u5f8c\u306e 3\u6841\u304c\u51fa\u529b\u3067\u3059\u3002<\/p>\n<div class=\"table-responsive\"><table  style=\"width:100%; \"  class=\"easy-table easy-table-default \" >\n<tbody>\r\n<tr><td  style=\"text-align:center\" ><\/td>\n<td colspan=\"2\" style=\"text-align:center\" > \u72b6\u614b<\/td>\n<td colspan=\"3\" style=\"text-align:center\" > \u5165\u529b<\/td>\n<td colspan=\"2\" style=\"text-align:center\" > \u6b21\u306e\u72b6\u614b<\/td>\n<td colspan=\"3\" style=\"text-align:center\" > \u51fa\u529b<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >\u30e9\u30d9\u30eb<\/td>\n<td  style=\"text-align:center\" > rV<\/td>\n<td  style=\"text-align:center\" > rP<\/td>\n<td  style=\"text-align:center\" > s.v<\/td>\n<td  style=\"text-align:center\" > s.p<\/td>\n<td  style=\"text-align:center\" > d.r<\/td>\n<td  style=\"text-align:center\" > rV*<\/td>\n<td  style=\"text-align:center\" > rP*<\/td>\n<td  style=\"text-align:center\" > d.v<\/td>\n<td  style=\"text-align:center\" > d.p<\/td>\n<td  style=\"text-align:center\" > s.r<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >A<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > NC<\/td>\n<td  style=\"text-align:center\" > 0 (NC)<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > NC<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > p0 (NC)<\/td>\n<td  style=\"text-align:center\" > 1 (NC)<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >(B)<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > NC<\/td>\n<td  style=\"text-align:center\" > 1 (NC)<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > NC<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > p0 (NC)<\/td>\n<td  style=\"text-align:center\" > 1 (NC)<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >C<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p1<\/td>\n<td  style=\"text-align:center\" > 0 (NC)<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p1<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > p0 (NC)<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >(D)<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p1<\/td>\n<td  style=\"text-align:center\" > 1 (NC)<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p1<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > p0 (NC)<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >E<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > NC<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 0 (NC)<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >F<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > NC<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > NC<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 1 (NC)<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >G<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p1<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 0<\/td>\n<\/tr>\n\r\n<tr><td  style=\"text-align:center\" >H<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p1<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p1<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<td  style=\"text-align:center\" > p0<\/td>\n<td  style=\"text-align:center\" > 1<\/td>\n<\/tr>\n<\/tbody><\/table><\/div>\n<p>\u3053\u3053\u3067\u3001\u30e9\u30d9\u30eb B \u3068 D \u306b\u30ab\u30c3\u30b3\u304c\u4ed8\u3044\u3066\u3044\u308b\u306e\u306f\u3001B \u306f A \u3068\u540c\u7fa9\u3067\u3042\u308a\u3001D \u306f C \u3068\u540c\u7fa9\u3067\u3042\u308b\u305f\u3081\u3001\u691c\u8a0e\u3057\u306a\u304f\u3066\u826f\u3044\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u306a\u305c\u306a\u3089\u3001d.r\uff08sink.ready\uff09\u304c Don&#8217;t Care \u306a\u306e\u3067\u3001d.r \u304c True \u3067\u3082 False \u3067\u3082\u540c\u3058\u6271\u3044\u306a\u306e\u3067\u3059\u3002<\/p>\n<h2>\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u6ce2\u5f62\u3068\u6bd4\u3079\u308b<\/h2>\n<p>\u305d\u308c\u3067\u306f\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u7d50\u679c\u3068\u6bd4\u3079\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4e0a\u8a18\u771f\u7406\u5024\u8868\u306e\u30e9\u30d9\u30eb\u3068\u72b6\u614b\u3092\u5408\u308f\u305b\u3066\u51fa\u529b\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u62e1\u5927\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>state_string \u306f\u3001\u3053\u3053\u3067\u306f rV D-FF \u306e\u5185\u90e8\u72b6\u614b\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u30020\uff08False\uff09 \u306e\u3068\u304d\u304c state0 \u3067\u30011\uff08True\uff09\u306e\u3068\u304d\u304c state1 \u3067\u3059\u306d\u3002\uff08\u3053\u306e\u3088\u3046\u306a\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u51fa\u529b\u306e\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u5f8c\u8ff0\u3057\u307e\u3059\u3002\uff09<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/flogics.com\/wp\/wp-content\/uploads\/2020\/03\/0723bfd798928bb531a2b24168cf5c77.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-3550\" src=\"http:\/\/flogics.com\/wp\/wp-content\/uploads\/2020\/03\/0723bfd798928bb531a2b24168cf5c77-1024x306.png\" alt=\"\" width=\"665\" height=\"199\" srcset=\"https:\/\/flogics.com\/wp\/wp-content\/uploads\/2020\/03\/0723bfd798928bb531a2b24168cf5c77-1024x306.png 1024w, https:\/\/flogics.com\/wp\/wp-content\/uploads\/2020\/03\/0723bfd798928bb531a2b24168cf5c77-300x90.png 300w, https:\/\/flogics.com\/wp\/wp-content\/uploads\/2020\/03\/0723bfd798928bb531a2b24168cf5c77-768x230.png 768w, https:\/\/flogics.com\/wp\/wp-content\/uploads\/2020\/03\/0723bfd798928bb531a2b24168cf5c77-660x197.png 660w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/><\/a><\/p>\n<p>\u3053\u308c\u3092\u898b\u308b\u3068\u3001\u79c1\u306e\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u7528\u30c6\u30b9\u30c8\u30d9\u30f3\u30c1\u306f\u3001\u5168\u3066\u306e\u53ef\u80fd\u306a\u72b6\u614b\u3068\u5165\u529b\u3092\u7db2\u7f85\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3057\u305f\u3002\uff08\u7d50\u679c\u30aa\u30fc\u30e9\u30a4?\uff09<\/p>\n<h2>\u8a2d\u8a08\u306e\u89e3\u8aad\u7d50\u679c\u306e\u8003\u5bdf<\/h2>\n<p>\u6b21\u306b\u3001\u5404\u72b6\u614b\u3068\u5165\u529b\u306b\u5bfe\u3059\u308b\u51fa\u529b\u8ad6\u7406\u306b\u3064\u3044\u3066\u8003\u5bdf\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u6700\u521d\u306b rV D-FF \u306e\u5185\u90e8\u72b6\u614b\u3067\u3059\u304c\u3001<\/p>\n<ul>\n<li>0\uff08False\uff09: FIFO \u5185\u90e8\u306b\u306f\u3001\u300c\u9810\u304b\u308a\u4e2d\u300d\u306e\u30c7\u30fc\u30bf\uff08payload\uff09\u3092\u6301\u3063\u3066\u3044\u306a\u3044\u3001\u3064\u307e\u308a\u300cFIFO \u304c\u7a7a\u300d\u306e\u72b6\u614b<\/li>\n<li>1\uff08True\uff09: \u53cd\u5bfe\u306b\u3001FIFO \u5185\u90e8\u306b\u300c\u9810\u304b\u308a\u4e2d\u300d\u306e\u30c7\u30fc\u30bf\u304c\u3042\u308b\u72b6\u614b\u3001\u3064\u307e\u308a FIFO \u30d5\u30eb\u306e\u72b6\u614b<\/li>\n<\/ul>\n<p>\u3053\u3046\u8003\u3048\u308b\u3068\u3001\u610f\u5916\u3068\u7d20\u76f4\u306a\u8a2d\u8a08\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002\u307e\u3001FIFO \u3060\u304b\u3089\u5f53\u305f\u308a\u524d\u3068\u3044\u3048\u3070\u305d\u3046\u3067\u3059\u304c\u3001\u3053\u3053\u307e\u3067\u89e3\u8aad\u3057\u3066\u307f\u3066\u3001\u3088\u3046\u3084\u304f\u7406\u89e3\u3067\u304d\u305f\u3068\u3044\u3046\u6c17\u6301\u3061\u3067\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u5404\u30e9\u30d9\u30eb\u306b\u5bfe\u3059\u308b\u72b6\u614b\u9077\u79fb\u3068\u51fa\u529b\u306e\u8ad6\u7406\u306b\u3064\u3044\u3066\u3067\u3059\u3002<\/p>\n<ul>\n<li><strong>A<\/strong>: FIFO \u304c\u7a7a\u3067\u3001src.valid = False\u3002\u3053\u306e\u5834\u5408\u306f\u72b6\u614b\u5909\u5316\u305b\u305a\u3001\u51fa\u529b\u306f dst.valid = False \u3067\u3059\u3002<\/li>\n<li><strong>C<\/strong>: FIFO \u304c\u7a7a\u3067\u3001src.valid = True\u3002\u3053\u306e\u5834\u5408\u306f\u3001\u30c7\u30fc\u30bf\u306e\u9810\u304b\u308a\u304c\u767a\u751f\u3059\u308b\u306e\u3067 rV D-FF = 1 \u306b\u9077\u79fb\u3057\u307e\u3059\u3002\u51fa\u529b\u306f\u3001\u307e\u3060 dst.valid = False \u3067\u3059\u304c\u3001src.ready \u306f True \u3068\u306a\u308a\u3001\u30c7\u30fc\u30bf\u3092\u9810\u304b\u3063\u305f\u306e\u3067\u3001\u6b21\u30b5\u30a4\u30af\u30eb\u3067 source \u306f valid \u3092\u843d\u3068\u3057\u3066\uff08de-assert \u3057\u3066\uff09\u826f\u3044\u3088\u3001\u3068\u3044\u3046\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/li>\n<li><strong>E<\/strong>: FIFO \u304c\u30d5\u30eb\u3067\u3001src.valid = False \u304b\u3064 dst.ready = False\u3002\u51fa\u529b\u306f dst.valid = True \u3067\u3059\u3002sink \u306b\u5bfe\u3057\u3066\u3001\u30c7\u30fc\u30bf\u306e\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u3092\u4f1d\u3048\u3066\u3044\u307e\u3059\u304c\u3001dst.ready = False \u306a\u306e\u3067 rV D-FF = 0 \u306b\u72b6\u614b\u9077\u79fb\u3067\u304d\u307e\u305b\u3093\u3002\uff08\u30c7\u30fc\u30bf\u306f\u9810\u304b\u3063\u305f\u307e\u307e\uff09<\/li>\n<li><strong>F<\/strong>: FIFO \u304c\u30d5\u30eb\u3067\u3001src.valid = False \u304b\u3064 dst.ready = True\u3002\u51fa\u529b\u306f dst.valid = True \u3067\u3059\u3002sink \u306b\u5bfe\u3057\u3066\u3001\u30c7\u30fc\u30bf\u306e\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u3092\u4f1d\u3048\u3066\u304a\u308a\u3001\u307e\u305f dst.ready = True \u306a\u306e\u3067\u3001\u3053\u306e\u30b5\u30a4\u30af\u30eb\u3067\u30c7\u30fc\u30bf\u306f sink \u304c\u53d7\u3051\u53d6\u308c\u3066\u3044\u307e\u3059\u3002\u3064\u307e\u308a\u3001rV D-FF = 0 \u306b\u72b6\u614b\u9077\u79fb\u3067\u304d\u307e\u3059\u3002<\/li>\n<li><strong>G<\/strong>: FIFO \u304c\u30d5\u30eb\u3067\u3001src.valid = True \u304b\u3064 dst.ready = False\u3002\u3064\u307e\u308a\u3001\u307e\u3060\u30c7\u30fc\u30bf\u3092 sink \u306b\u5f15\u304d\u6e21\u305b\u3066\u3044\u306a\u3044\u306e\u306b src.valid \u304c True \u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u51fa\u529b dst.valid \u306f True \u306e\u307e\u307e\u3001\u307e\u305f\u3001source \u304b\u3089\u306e\u30c7\u30fc\u30bf\u3092\u53d7\u3051\u53d6\u308c\u306a\u3044\u306e\u3067\u3001src.ready = False \u3068\u306a\u308a\u307e\u3059\u3002\u3082\u3061\u308d\u3093\u72b6\u614b\u9077\u79fb\u306f\u3067\u304d\u307e\u305b\u3093\u3002<\/li>\n<li><strong>H<\/strong>:\u00a0FIFO \u304c\u30d5\u30eb\u3067\u3001src.valid = True \u304b\u3064 dst.ready = True\u3002dst.ready = True \u306a\u306e\u3067\u3001\u3053\u306e\u30b5\u30a4\u30af\u30eb\u3067\u30c7\u30fc\u30bf\u306f sink \u304c\u53d7\u3051\u53d6\u308c\u3066\u3044\u307e\u3059\u3002\u6b21\u30b5\u30a4\u30af\u30eb\u3067 source \u304b\u3089\u306e\u30c7\u30fc\u30bf\u3092\u53d7\u3051\u53d6\u308c\u308b\u306e\u3067\u3001src.ready = True \u3067\u793a\u3057\u307e\u3059\u3002\uff08src.valid \u304c True \u3067 dst.ready \u304c True \u3060\u3068\u3001\u3053\u306e\u72b6\u614b rV D-FF = 1 \u304b\u3064\u3001\u30e9\u30d9\u30eb H \u306e\u5165\u529b\u304c\u9023\u7d9a\u3057\u3001\u7d50\u679c\u3068\u3057\u3066 source \u304b\u3089 sink \u3078\u30011\u30b5\u30a4\u30af\u30eb\u9045\u5ef6\u3067\u6bce\u30b5\u30a4\u30af\u30eb\u30c7\u30fc\u30bf\u304c\u8ee2\u9001\u3055\u308c\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002\uff09<\/li>\n<\/ul>\n<p>\u3044\u304b\u304c\u3067\u3057\u3087\u3046\u304b\u3002\u671f\u5f85\u901a\u308a\u306e\u52d5\u4f5c\u306b\u306a\u3063\u3066\u3044\u305d\u3046\u3067\u3059\u306d\u3002<\/p>\n<p>\u305d\u308c\u306b\u3057\u3066\u3082\u3001FIFO \u3068\u3044\u3046\u306e\u306f\u610f\u5916\u3068\u96e3\u3057\u3044\u3082\u306e\u3060\u3068\u3044\u3046\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001\u3053\u3053\u307e\u3067\u89e3\u8aad\u3067\u304d\u308c\u3070\u3001\u81ea\u5206\u3067\u3082 m2sPipe \u304f\u3089\u3044\u306f\u8a2d\u8a08\u3067\u304d\u305d\u3046\u306a\u6c17\u3082\u3057\u3066\u304d\u307e\u3059\u306d\u3002\uff08\u7121\u7406\u304b\u306a?\uff09<\/p>\n<h2>\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u6ce2\u5f62\u306b\u72b6\u614b\u3092\u51fa\u529b\u3059\u308b\u65b9\u6cd5<\/h2>\n<p>\u3055\u3066\u3001\u4e0a\u8ff0\u306e\u6ce2\u5f62\u3067\u72b6\u614b\u3092\u6587\u5b57\u5217\u3067\u8868\u793a\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u3069\u3046\u3084\u308b\u306e\u3067\u3057\u3087\u3046\u3002\u5b9f\u306f SpinalHDL \u306b\u306f SpinalEnum \u3068\u3044\u3046\u578b\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001\u305d\u308c\u3092\u4f7f\u3046\u3053\u3068\u3067\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u7d50\u679c\u306b\u6587\u5b57\u5217\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30b3\u30fc\u30c9\u3092\u793a\u3057\u3066\u304a\u304d\u307e\u3059\u3002\u3042\u307e\u308a\u7dba\u9e97\u3067\u306a\u3044\u3067\u3059\u304c\u5fa1\u5bb9\u8d66\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><code class=\"language-scala\">import spinal.core._\nimport spinal.lib._\n\nobject FifoState extends SpinalEnum {\n  val state0, state1 = newElement()\n}\n\nobject FifoInput extends SpinalEnum {\n  val A, C, E, F, G, H, X = newElement()\n}\n\nclass LearnFifo(\n    width_payload: Int\n) extends Component { \n  val io = new Bundle {\n    val src = slave Stream (Bits(width_payload bits))\n    val dst = master Stream (Bits(width_payload bits))\n  }\n\n  val state = FifoState() \/\/ \u72b6\u614b\n  val inputs = FifoInput() \/\/ \u5165\u529b\u30e9\u30d9\u30eb\n   \n  io.src.m2sPipe() &gt;&gt; io.dst\n   \n  when(io.dst.valid) {\n    state := FifoState.state1\n  } otherwise {\n    state := FifoState.state0\n  } \n \n  inputs := FifoInput.X\n\n  when(state === FifoState.state0 &amp;&amp; !io.src.valid) {\n    inputs := FifoInput.A\n  }\n  when(state === FifoState.state0 &amp;&amp; io.src.valid) {\n    inputs := FifoInput.C\n  }\n  when(state === FifoState.state1 &amp;&amp; !io.src.valid &amp;&amp; !io.src.ready) {\n    inputs := FifoInput.E\n  }\n  when(state === FifoState.state1 &amp;&amp; !io.src.valid &amp;&amp; io.src.ready) {\n    inputs := FifoInput.F\n  }\n  when(state === FifoState.state1 &amp;&amp; io.src.valid &amp;&amp; !io.src.ready) {\n    inputs := FifoInput.G\n  }\n  when(state === FifoState.state1 &amp;&amp; io.src.valid &amp;&amp; io.src.ready) {\n    inputs := FifoInput.H\n  }\n}\n<\/code><\/pre>\n<p>\u4eca\u65e5\u306f\u3053\u3053\u307e\u3067\u3002<\/p>\n<h2>\u304a\u554f\u3044\u5408\u308f\u305b\u306f\u304a\u6c17\u8efd\u306b<\/h2>\n<div class=\"wpforms-container wpforms-container-full\" id=\"wpforms-2662\"><form id=\"wpforms-form-2662\" class=\"wpforms-validate wpforms-form\" data-formid=\"2662\" method=\"post\" enctype=\"multipart\/form-data\" action=\"\/wp\/wp-json\/wp\/v2\/posts\/3533\" data-token=\"b616164aa0c2475fc88fcc3c973d7e71\"><noscript class=\"wpforms-error-noscript\">\u3053\u306e\u30d5\u30a9\u30fc\u30e0\u306b\u5165\u529b\u3059\u308b\u306b\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u30fc\u3067 JavaScript \u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/noscript><div class=\"wpforms-field-container\"><div id=\"wpforms-2662-field_0-container\" class=\"wpforms-field wpforms-field-name\" data-field-id=\"0\"><label class=\"wpforms-field-label\" for=\"wpforms-2662-field_0\">\u304a\u540d\u524d\uff08\u30cb\u30c3\u30af\u30cd\u30fc\u30e0\u53ef\uff09 <span class=\"wpforms-required-label\">*<\/span><\/label><input type=\"text\" id=\"wpforms-2662-field_0\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][0]\" required><div class=\"wpforms-field-description\">\u304a\u554f\u3044\u5408\u308f\u305b\u3092\u9802\u3044\u305f\u5f8c\u3001\u7d99\u7d9a\u3057\u3066\u55b6\u696d\u6d3b\u52d5\u3092\u3057\u305f\u308a\u3001\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\u7b49\u3092\u304a\u9001\u308a\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u306f\u3054\u3056\u3044\u307e\u305b\u3093\u3002<\/div><\/div><div id=\"wpforms-2662-field_1-container\" class=\"wpforms-field wpforms-field-email\" data-field-id=\"1\"><label class=\"wpforms-field-label\" for=\"wpforms-2662-field_1\">\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 <span class=\"wpforms-required-label\">*<\/span><\/label><input type=\"email\" id=\"wpforms-2662-field_1\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][1]\" spellcheck=\"false\" required><div class=\"wpforms-field-description\">\u5fa1\u8fd4\u7b54\u306f 24\u6642\u9593\u4ee5\u5185\uff08\u55b6\u696d\u6642\u9593\u4e2d\uff09\u3068\u3055\u305b\u3066\u9802\u3044\u3066\u304a\u308a\u307e\u3059\u3002\u5fc5\u305a\u8fd4\u4fe1\u81f4\u3057\u307e\u3059\u304c\u3001\u6642\u3005\u30a2\u30c9\u30ec\u30b9\u8aa4\u308a\u3068\u601d\u308f\u308c\u308b\u8fd4\u4fe1\u30a8\u30e9\u30fc\u304c\u3054\u3056\u3044\u307e\u3059\u3002\u8fd4\u7b54\u304c\u5c4a\u304b\u306a\u3044\u5834\u5408\u3001\u5927\u5909\u304a\u624b\u6570\u3067\u306f\u3054\u3056\u3044\u307e\u3059\u304c\u5225\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u7763\u4fc3\u9802\u3051\u307e\u3059\u3068\u5e78\u3044\u3067\u3059\u3002<\/div><\/div><div id=\"wpforms-2662-field_5-container\" class=\"wpforms-field wpforms-field-checkbox\" data-field-id=\"5\"><label class=\"wpforms-field-label\" for=\"wpforms-2662-field_5\">\u3044\u304f\u3064\u3067\u3082\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044<\/label><ul id=\"wpforms-2662-field_5\"><li class=\"choice-6 depth-1\"><input type=\"checkbox\" id=\"wpforms-2662-field_5_6\" name=\"wpforms[fields][5][]\" value=\"\u9762\u767d\u304b\u3063\u305f \/ \u53c2\u8003\u306b\u306a\u3063\u305f\"  ><label class=\"wpforms-field-label-inline\" for=\"wpforms-2662-field_5_6\">\u9762\u767d\u304b\u3063\u305f \/ \u53c2\u8003\u306b\u306a\u3063\u305f<\/label><\/li><li class=\"choice-4 depth-1\"><input type=\"checkbox\" id=\"wpforms-2662-field_5_4\" name=\"wpforms[fields][5][]\" value=\"\u79c1\u3082\u3084\u3063\u3066\u307f\u305f\u3044\"  ><label class=\"wpforms-field-label-inline\" for=\"wpforms-2662-field_5_4\">\u79c1\u3082\u3084\u3063\u3066\u307f\u305f\u3044<\/label><\/li><li class=\"choice-1 depth-1\"><input type=\"checkbox\" id=\"wpforms-2662-field_5_1\" name=\"wpforms[fields][5][]\" value=\"\u8a73\u3057\u3044\u8a71\u3092\u805e\u304d\u305f\u3044\"  ><label class=\"wpforms-field-label-inline\" for=\"wpforms-2662-field_5_1\">\u8a73\u3057\u3044\u8a71\u3092\u805e\u304d\u305f\u3044<\/label><\/li><li class=\"choice-3 depth-1\"><input type=\"checkbox\" id=\"wpforms-2662-field_5_3\" name=\"wpforms[fields][5][]\" value=\"\u30bb\u30df\u30ca\u30fc\u3092\u3084\u3063\u3066\u6b32\u3057\u3044\uff08\u76f8\u6a21\u539f\u5e02\u8fd1\u90ca\u3001\u3042\u308b\u3044\u306f\u30cd\u30c3\u30c8\u4f1a\u8b70\u306b\u3066\uff09\"  ><label class=\"wpforms-field-label-inline\" for=\"wpforms-2662-field_5_3\">\u30bb\u30df\u30ca\u30fc\u3092\u3084\u3063\u3066\u6b32\u3057\u3044\uff08\u76f8\u6a21\u539f\u5e02\u8fd1\u90ca\u3001\u3042\u308b\u3044\u306f\u30cd\u30c3\u30c8\u4f1a\u8b70\u306b\u3066\uff09<\/label><\/li><li class=\"choice-2 depth-1\"><input type=\"checkbox\" id=\"wpforms-2662-field_5_2\" name=\"wpforms[fields][5][]\" value=\"\u7d9a\u7de8\u306e\u8a18\u4e8b\u3092\u5e0c\u671b\"  ><label class=\"wpforms-field-label-inline\" for=\"wpforms-2662-field_5_2\">\u7d9a\u7de8\u306e\u8a18\u4e8b\u3092\u5e0c\u671b<\/label><\/li><\/ul><\/div><div id=\"wpforms-2662-field_2-container\" class=\"wpforms-field wpforms-field-textarea\" data-field-id=\"2\"><label class=\"wpforms-field-label\" for=\"wpforms-2662-field_2\">\u30e1\u30c3\u30bb\u30fc\u30b8 <span class=\"wpforms-required-label\">*<\/span><\/label><textarea id=\"wpforms-2662-field_2\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][2]\" required><\/textarea><\/div><\/div><!-- .wpforms-field-container --><div class=\"wpforms-field wpforms-field-hp\"><label for=\"wpforms-2662-field-hp\" class=\"wpforms-field-label\">Email<\/label><input type=\"text\" name=\"wpforms[hp]\" id=\"wpforms-2662-field-hp\" class=\"wpforms-field-medium\"><\/div><input type=\"hidden\" name=\"wpforms[recaptcha]\" value=\"\"><div class=\"wpforms-submit-container\" ><input type=\"hidden\" name=\"wpforms[id]\" value=\"2662\"><input type=\"hidden\" name=\"wpforms[author]\" value=\"1\"><button type=\"submit\" name=\"wpforms[submit]\" id=\"wpforms-submit-2662\" class=\"wpforms-submit\" data-alt-text=\"\u9001\u4fe1\u4e2d...\" data-submit-text=\"\u9001\u4fe1\" aria-live=\"assertive\" value=\"wpforms-submit\">\u9001\u4fe1<\/button><\/div><\/form><\/div>  <!-- .wpforms-container -->\n","protected":false},"excerpt":{"rendered":"<p>Before designing FIFO by myself, trying to understand Spinal m2sPipe. \u524d\u56de\u3001\u81ea\u529b\u3067 FIFO \u306e\u8a2d\u8a08\u3092\u8a66\u307f\u307e\u3057\u305f\u304c\u3001\u76f4\u611f\u7684\u306a\u3084\u308a\u65b9\u3067\u306f\u8a2d\u8a08\u304c\u56f0\u96e3\u306a\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3057\u305f\u3002\u305d\u3053\u3067\u3001\u3082\u3046\u5c11\u3057\u5f62\u5f0f\u7684\u306a\u624b\u6cd5\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u3044\u304f\u3064\u304b\u6559\u79d1\u66f8\u3092\u3072\u3063\u304f\u308a\u8fd4\u3057\u3001Mealy \u30de\u30b7\u30f3\u306e\u8a2d\u8a08\u306b\u3064\u3044\u3066\u5fa9\u7fd2\u3057\u3066\u307f\u307e\u3057\u305f\u3002Google \u3067\u691c\u7d22\u3059\u308b\u3068\u3044\u308d\u3044\u308d\u51fa\u3066\u304f\u308b\u3068\u601d\u3044\u307e\u3059\u304c\u3001\u3053\u306e\u8aac\u660e\u306e 13\u30da\u30fc\u30b8\u306b\u51fa\u3066\u304f\u308b\u56f3\uff08Mealy \u3068 Moore \u30de\u2026 <span class=\"read-more\"><a href=\"https:\/\/flogics.com\/wp\/2020\/03\/analyzing-spinal-m2spipe\/\">\u7d9a\u304d\u3092\u8aad\u3080 &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":3551,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[69,133],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/posts\/3533"}],"collection":[{"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/comments?post=3533"}],"version-history":[{"count":20,"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/posts\/3533\/revisions"}],"predecessor-version":[{"id":6794,"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/posts\/3533\/revisions\/6794"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/media\/3551"}],"wp:attachment":[{"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/media?parent=3533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/categories?post=3533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flogics.com\/wp\/wp-json\/wp\/v2\/tags?post=3533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}