【Verilog】模16可逆流水灯
生活随笔
收集整理的這篇文章主要介紹了
【Verilog】模16可逆流水灯
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
功能:
實現模16的可逆流水燈
?
Verilog代碼:
`timescale 1ns / 1psmodule Liushuideng_16(en, clk, y);input clk, en;output[15:0] y;reg[15:0] y;reg[3:0] m;reg i, flag1, flag2;reg[15:0] j;reg[8:0] k;initialbegini = 0;m = 0;y = 0;j = 0;k = 0;flag1 = 0;flag2 = 0;end//100M100000分頻得到1KHZalways@(posedge clk)beginif(j == 16'd49999)beginflag1 <= ~flag1;j <= 0;endelse j <= j + 1;end//1KHZ千分頻得到1HZalways@(posedge flag1)beginif(k == 9'd499)beginflag2 <= ~flag2;k <= 0;endelse k <= k + 1;end//模16可逆計數器always@(posedge flag2)beginif(m==4'b1111) i = 1;if(m==4'b0000) i = 0;if(en==0) m <= m;else if(i==0) m <= m + 1'b1;else m <= m - 1'b1;end//4—16譯碼器always@(m) beginif(en==0) y = 0;elsecase({en, m})5'b10000: y = 16'b0000_0000_0000_0001;5'b10001: y = 16'b0000_0000_0000_0010;5'b10010: y = 16'b0000_0000_0000_0100;5'b10011: y = 16'b0000_0000_0000_1000;5'b10100: y = 16'b0000_0000_0001_0000;5'b10101: y = 16'b0000_0000_0010_0000;5'b10110: y = 16'b0000_0000_0100_0000;5'b10111: y = 16'b0000_0000_1000_0000;5'b11000: y = 16'b0000_0001_0000_0000;5'b11001: y = 16'b0000_0010_0000_0000;5'b11010: y = 16'b0000_0100_0000_0000;5'b11011: y = 16'b0000_1000_0000_0000;5'b11100: y = 16'b0001_0000_0000_0000;5'b11101: y = 16'b0010_0000_0000_0000;5'b11110: y = 16'b0100_0000_0000_0000;5'b11111: y = 16'b1000_0000_0000_0000;endcaseend endmodule?
測試代碼:
`timescale 1ns / 1psmodule test;reg en;reg clk;wire [15:0] y;Liushuideng_16 uut (.en(en), .clk(clk), .y(y));initial beginen = 1;clk = 0;endalways #5 clk = ~clk;endmodule總結
以上是生活随笔為你收集整理的【Verilog】模16可逆流水灯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Verilog】 3-8译码器
- 下一篇: 【Verilog】基于Nexys4DDR