我是靠谱客的博主 故意凉面,这篇文章主要介绍基于“移位拼接”的打拍处理手法,现在分享给大家,希望可以做个参考。

打2拍 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
`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

仿真代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
`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拍

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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拍

最后

以上就是故意凉面最近收集整理的关于基于“移位拼接”的打拍处理手法的全部内容,更多相关基于“移位拼接”内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部