Verilog HDL | 移位“打拍“

通过这种方法可以使波形向后延时一个时钟周期。
always@(posedge clk)
begin
delay <= in;
end

下面是一个实际应用:


“原信号中随机出现高电平,高电平之间间隔大于5个周期,高电平宽度均为1个时钟周期。

设计电路,将原信号中的高电平展宽为2个时钟周期宽度,并将展宽后的信号延时一个系统时钟再输出。”
module top(in,out,clk);
input in;
input clk;
reg delay1;
reg delay2;
reg delay3;
output wire out;
always@(posedge clk)
begin
delay1 <= in;
delay2 <= delay1;
delay3 <= delay2;
end
assign out = delay2 + delay3;
endmodule

各个信号的波形如下图所示:


### Verilog 中实现时序逻辑打拍操作 在 Verilog 中,“打拍”通常指的是通过寄存器将信号延迟一个或多个时钟周期的操作。这种技术广泛应用于同步电路设计中,用于确保数据稳定传输并减少毛刺的影响。 #### 使用 `always` 块实现单拍延迟 为了实现单拍延迟,可以利用触发器的概念,在上升沿捕获输入信号,并将其存储在一个寄存器变量中。下面是一个简单的例子: ```verilog module one_clock_delay( input wire clk, input wire reset_n, // 高电平有效复位 input wire data_in, output reg data_out ); always @(posedge clk or negedge reset_n) begin : proc_one_clk_del if (!reset_n) data_out <= 1'b0; else data_out <= data_in; end endmodule ``` 此模块定义了一个具有异步低电平有效的复位端口 `reset_n` 的单拍延迟能力的组件[^2]。当复位信号处于激活状态(即为低)时,输出被强制置零;而在正常工作期间,则是在每个时钟正边沿到来之际更新输出值等于当前时刻的输入值。 #### 多级打拍链路的设计模式 对于多拍延迟需求,可以通过串联多个上述基本单元或者直接扩展内部寄存器的数量来达成目的。这里给出一个多拍延迟的例子: ```verilog module multi_clock_delay #( parameter DEPTH = 4 // 宏观参数设置默认四级流水线深度 )( input wire clk, input wire reset_n, input wire data_in, output reg [DEPTH-1:0] data_out ); genvar i; generate for(i=0;i<DEPTH;i=i+1)begin : gen_multi_clk_del if(i==0)begin : first_stage always @(posedge clk or negedge reset_n) begin if(!reset_n) data_out[i] <= 1'b0; else data_out[i] <= data_in; end end else begin : other_stages always @(posedge clk or negedge reset_n) begin if(!reset_n) data_out[i] <= 1'b0; else data_out[i] <= data_out[i-1]; end end end endgenerate endmodule ``` 这段代码实现了可配置长度的多拍延迟功能,其中 `data_out[0]` 是经过一拍后的结果,而整个向量则表示了从原始输入到最终输出之间经历的不同阶段的状态变化过程。 #### 关键点总结 - **时钟敏感性**:所有的打拍操作都依赖于特定事件的发生来进行,最常见的是时钟信号的上升沿。 - **初始化机制**:考虑到上电或其他异常情况下的行为一致性,一般会加入全局复位路径以确保初始状态下所有寄存器都被正确清零。 - **资源消耗评估**:随着打拍次数增加,所需硬件资源也会相应增长,因此实际应用中需权衡性能与成本之间的关系。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值