【Verilog】模16可逆流水灯

功能:

实现模16的可逆流水灯

 

Verilog代码:
`timescale 1ns / 1ps

module 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;
	
	initial
		begin
			i = 0;
			m = 0;
			y = 0;
			j = 0;
			k = 0;
			flag1 = 0;
			flag2 = 0;
		end
	
	//100M100000分频得到1KHZ
	always@(posedge clk)
		begin
			if(j == 16'd49999)
				begin
					flag1 <= ~flag1;
					j <= 0;
				end
			else j <= j + 1;
		end
	
	//1KHZ千分频得到1HZ
	always@(posedge flag1)
		begin
			if(k == 9'd499)
				begin
					flag2 <= ~flag2;
					k <= 0;
				end
			else k <= k + 1;
		end
	
	//模16可逆计数器
	always@(posedge flag2)
		begin
			if(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) begin
		if(en==0) y = 0;
		else
			case({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;
			endcase
	end
endmodule 

 

测试代码:
`timescale 1ns / 1ps

module test;
	reg en;
	reg clk;
	wire [15:0] y;
	
	Liushuideng_16 uut (
		.en(en), 
		.clk(clk), 
		.y(y)
	);

	initial begin
		en = 1;
		clk = 0;
	end
	
	always #5 clk = ~clk;
      
endmodule 
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值