Trở lại clock enable cho "dem", "dem" chỉ tăng khi clock enable = '1'. Chẳng hạn khi key[0] hoặc key[1] được nhấn xuống, set clock enable = '1' để bắt đầu đếm, và khi đếm = X, reset clock enable = '0' để ngưng đếm. Theo như template bên trên:
Nếu chúng ta muốn đếm chỉ khi clock enable = '1', và reset đếm thành 0 khi đếm bằng X, chúng ta cũng code theo template:
Nếu bạn chỉ muốn bắt đầu đếm sau khi key đã được nhấn và buông ra, bạn cần phải tìm falling edge của key (synchronously), và sau đó dùng falling edge của key để tác động lên clock enable:
Một cách thường được dùng để tìm falling edge (hoặc rising edge) là delay signal 1 clock cycle. Dựa vào sự khác biệt giữa signal với no delay và signal delayed 1 clock cycle, chúng ta có thể biết khi nào key_falling_edge nên được set thành '1'.
key_no_delay:000011110000
key_delay_01:000001111000
falling_edge:000000000100
Dùng "always @(negedge KEY[0] or negedge KEY[1])" is not recommended.
Một vấn đề khác nữa là bạn nhấn và sau đó buông key. Khi key[X] = '1', bạn cần save giá trị của X để sau đó bạn có thể biết key nào đã được nhấn, và display những giá trị tương ứng ra LED.
Code:
always @ (posedge clk) if (dem == X) dem_clock_enable = 1'b0; else if (key[0] = 1'b1 or key[1] = 1'b1) dem_clock_enable = 1'b1;
Nếu chúng ta muốn đếm chỉ khi clock enable = '1', và reset đếm thành 0 khi đếm bằng X, chúng ta cũng code theo template:
Code:
always @ (posedge clk) if (dem == X) dem = 0; else if (dem_clock_enable = 1'b1) dem = dem + 1;
Nếu bạn chỉ muốn bắt đầu đếm sau khi key đã được nhấn và buông ra, bạn cần phải tìm falling edge của key (synchronously), và sau đó dùng falling edge của key để tác động lên clock enable:
Code:
always @ (posedge clk) if (dem == X) dem_clock_enable = 1'b0; else if (key_falling_edge[0] = 1'b1 or key_falling_edge[1] = 1'b1) dem_clock_enable = 1'b1;
key_no_delay:000011110000
key_delay_01:000001111000
falling_edge:000000000100
Dùng "always @(negedge KEY[0] or negedge KEY[1])" is not recommended.
Một vấn đề khác nữa là bạn nhấn và sau đó buông key. Khi key[X] = '1', bạn cần save giá trị của X để sau đó bạn có thể biết key nào đã được nhấn, và display những giá trị tương ứng ra LED.
Comment