OSDN Git Service

vga_top修正バージョン
[oca1/test.git] / VGADisplay / src / push_sw.nsl
diff --git a/VGADisplay/src/push_sw.nsl b/VGADisplay/src/push_sw.nsl
new file mode 100644 (file)
index 0000000..2277089
--- /dev/null
@@ -0,0 +1,46 @@
+/**\r
+*      Push switch module\r
+*      Module name "push_sw"\r
+*      @author         Yujiro Kaneko\r
+*      @version        0.1\r
+*/\r
+\r
+#define CNT_1ms 19'd500000             // Count value for 1m sec at 50MHz\r
+//#define CNT_1ms 26'd50               // Count value for test\r
+\r
+#define TRUE   1'd1\r
+#define FALSE  1'd0\r
+\r
+declare push_sw {\r
+       input    i_sw ;                         // Button signal input terminal\r
+       func_out fo_sw_enb ;            // Button enable signal\r
+}\r
+module push_sw {\r
+       reg r_cnt[19]     = 19'd0 ;     // Button enable count\r
+       reg r_rise_flag   = FALSE ;     // Button signal rising flag\r
+       reg r_sw_hld      = 0 ;         //\r
+       reg r_finish_flag = FALSE ;     // "fo_btn_enb" transfer flag\r
+\r
+       r_sw_hld := i_sw ;\r
+\r
+       if( i_sw & ~r_sw_hld ) {\r
+               r_rise_flag := TRUE ;\r
+       } else if( ~i_sw ) {\r
+               r_rise_flag := FALSE ;\r
+               r_finish_flag := FALSE ;\r
+       }\r
+       \r
+       if( r_rise_flag == TRUE ){\r
+               any {\r
+                       ( r_cnt == CNT_1ms ) & ( r_finish_flag == FALSE ) : {\r
+                               r_finish_flag := TRUE ;\r
+                               fo_sw_enb() ;\r
+                       }\r
+                       else : {\r
+                               r_cnt++ ;\r
+                       }\r
+               }\r
+       } else {\r
+               r_cnt := 26'd0 ;\r
+       }\r
+}
\ No newline at end of file