Verilog学习之路(9)—计数器和移位寄存器

Verilog学习之路(9)—计数器和移位寄存器

一、前言

计数器是应用最广泛的逻辑部件之一。计数器可以统计输入脉冲的个数,具有计时、计数、分频、定时、产生节拍脉冲等功能。

计数器的种类繁多,根据计数器中触发器时钟端的链接方式,分为同步计数器和异步计数器;根据计数方式,分为二进制计数器、十进制计数器和任意进制计数器;根据计数器中的状态变化规律,分为加法计数器、减法计数器和加/减计数器。

移位寄存器可以用来实现数据的串并转换,也可以构成移位行计数器,进行计数、分频,还可以构成序列码发生器、序列码检测器等,它也是数字系统中应用非常广泛的时序逻辑部件之一。

二、二进制计数器

由D触发器实现的二进制计数器的VerilogHDL程序代码如下:

module comp2bit(Q, clk, rst_n);
	output reg Q;
	input clk, rst_n;
	
	always@(posedge clk or negedge rst_n) begin
		if(!rst_n) 
			Q <= 1'b0;
		else
			Q <= ~Q;
	end
endmodule 

其电路图如下所示
在这里插入图片描述

三、任意进制计数器

在数字电路系统中,经常会使用任意进制计数器,VerilogHDL可以很好地支持不同进制计数器的设计。
以11进制计数器为例,最少需要4个触发器。采用反馈清零法设计的11进制计数器的VerilogHDL程序代码如下所示:

module comp_11(cnt, clk, rst_n);
	output reg [3:0] cnt;
	input clk, rst_n;
	
	always@(posedge clk) begin
		if(!rst_n)
			cnt <= 4'd0;
		else if(cnt == 4'd10)
			cnt <= 4'd0;
		else
			cnt <= cnt+4'd1;
	end

endmodule 

编写测试代码tb.sv如下所示

module tb;

	reg clk, rst_n;
	wire [3:0]cnt;
 
	comp_11 dut(cnt, clk, rst_n);
	
	always#5 clk = ~clk;
	
	initial begin
		clk = 0; rst_n = 0;
		#20 rst_n = 1;
		#200;
		$stop;
	end
	
endmodule 

可得仿真波形如下所示,可以看到,该计数器在0~10共11个数之间循环计数

在这里插入图片描述

四、移位寄存器

N位环形移位寄存器由N个移位寄存器组成
在这里插入图片描述
一个参数化的移位寄存器如下所示,可通过参数来设置该移位寄存器位宽

module shiftregister(D, clk, rst_n);
	parameter reg_width = 4;
	output reg [reg_width-1:0] D;
	input clk,rst_n;
	
	always@(posedge clk) begin
		if(!rst_n)
			D <= 4'b0001;
		else
			D <= { D[reg_width-2:0], D[reg_width-1] };
	end

endmodule

编写测试代码tb.sv如下所示

module tb;

	reg clk, rst_n;
	wire [3:0]cnt;
 
	shiftregister dut(cnt, clk, rst_n);
	
	always#5 clk = ~clk;
	
	initial begin
		clk = 0; rst_n = 0;
		#20 rst_n = 1;
		#200;
		$stop;
	end
	
endmodule 

可得仿真波形如下所示,
在这里插入图片描述

五、附录
上一篇:Verilog学习之路(8)— 时序电路的设计
下一篇:

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Verilog是一种硬件描述语言,用于设计和模拟数字电路。在Verilog中,触发器、移位寄存器计数器是常用的时序逻辑部件。 触发器是一种存储元件,用于存储和传输数字信号。它可以用于存储一个位的状态,并在时钟信号的上升沿或下降沿进行状态的更新。触发器常用于存储数据或实现时序逻辑功能。 移位寄存器是一种特殊的触发器,在数据输入端和输出端之间实现了数据的移位操作。它可以实现数据的串并转换,也可以用于构成移位行计数器、序列码发生器和序列码检测器等功能。移位寄存器在数字系统中有广泛的应用。 计数器是一种用于统计输入脉冲个数的逻辑部件。计数器可以实现计时、计数、分频、定时和产生节拍脉冲等功能。它可以根据输入的时钟信号进行计数,并在达到特定计数值时产生输出信号。 综上所述,Verilog中的触发器、移位寄存器计数器都是常用的时序逻辑部件,用于存储、移位和计数数据。它们在数字系统的设计和实现中起到了重要的作用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Verilog移位寄存器的描述以及理解](https://blog.csdn.net/jkgkj/article/details/126877281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Verilog学习之路(9)—计数器移位寄存器](https://blog.csdn.net/qq_38113006/article/details/122418720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值