概述
打2拍
`timescale 1ns/1ns
module test_dapai
(
input sys_clk ,
input sys_rst_n,
input sig_in ,
output sig_out
);
//定义中间变量
reg [1:0] sig_r;
always@(posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n) begin
sig_r <= 2'b00;
end
else begin
sig_r <={sig_r[0],sig_in}; //注意,有非阻塞赋值特性,此sig_in为上一周期值
end
end
/* 相当于在每一个时钟上升沿,于本周期将sig_in信号上一周期的值取出,存储在sig_r低位 */
/* 然后在下一个周期,再转移到sig_r高位读出,延迟了2个周期即打了2拍 */
assign sig_out = sig_r[1];
endmodule
仿真代码
`timescale 1ns/1ns
module tb_test_dapai();
//模拟输入信号
reg sys_clk ;
reg sys_rst_n ;
reg sig_in ;
//模拟输出信号
wire sig_out;
initial
begin
sys_clk = 1'b0;
sys_rst_n <= 1'b0; //注意在仿真文件中,何时选择"非阻塞赋值"
sig_in <= 1'd0;
#30
sys_rst_n <= 1'b1;
sig_in <= 1'd1;
#20
sig_in <= 1'd0;
end
//***生成时钟信号***//
always #10 sys_clk =~sys_clk;
//实例化
test_dapai test_dapai_inst
(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n),
.sig_in (sig_in ),
.sig_out (sig_out)
);
endmodule
仿真结果
如上图所示,输出信号sig_out相对于输入信号sig_in延迟了两个周期,相当于打了“2拍”
此方法适用于“脉冲控制信号” “单一变化控制信号”
打3拍
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
RGB_de_r <= 3'b0;
end
else begin
RGB_de_r <= {RGB_de_r[1:0], RGB_de};
//相当于左移1位,去掉最高位,最低为拼接 RGB_de
end
end
assign gray_de = RGB_de_r[2]; //输出信号延迟3个周期,即打了3拍
最后
以上就是故意凉面为你收集整理的基于“移位拼接”的打拍处理手法的全部内容,希望文章能够帮你解决基于“移位拼接”的打拍处理手法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复